Function: special-display-popup-frame
special-display-popup-frame is a byte-compiled function defined in
window.el.gz.
This function is obsolete since 30.1; use
display-buffer-pop-up-frame instead.
Signature
(special-display-popup-frame BUFFER &optional ARGS)
Documentation
Pop up a frame displaying BUFFER and return its window.
If BUFFER is already displayed in a visible or iconified frame, raise that frame. Otherwise, display BUFFER in a new frame.
Optional argument ARGS is a list specifying additional information.
If ARGS is an alist, use it as a list of frame parameters. If these parameters contain (same-window . t), display BUFFER in the selected window. If they contain (same-frame . t), display BUFFER in a window of the selected frame.
If ARGS is a list whose car is a symbol, use (car ARGS) as a function to do the work. Pass it BUFFER as first argument, and pass the elements of (cdr ARGS) as the remaining arguments.
Source Code
;; Defined in /usr/src/emacs/lisp/window.el.gz
(defun special-display-popup-frame (buffer &optional args)
"Pop up a frame displaying BUFFER and return its window.
If BUFFER is already displayed in a visible or iconified frame,
raise that frame. Otherwise, display BUFFER in a new frame.
Optional argument ARGS is a list specifying additional
information.
If ARGS is an alist, use it as a list of frame parameters. If
these parameters contain (same-window . t), display BUFFER in
the selected window. If they contain (same-frame . t), display
BUFFER in a window of the selected frame.
If ARGS is a list whose car is a symbol, use (car ARGS) as a
function to do the work. Pass it BUFFER as first argument, and
pass the elements of (cdr ARGS) as the remaining arguments."
(declare (obsolete display-buffer-pop-up-frame "30.1"))
(if (and args (symbolp (car args)))
(apply (car args) buffer (cdr args))
(let ((window (get-buffer-window buffer 0)))
(or
;; If we have a window already, make it visible.
(when window
(let ((frame (window-frame window)))
(make-frame-visible frame)
(raise-frame frame)
(display-buffer-record-window 'reuse window buffer)
window))
;; Reuse the current window if the user requested it.
(when (cdr (assq 'same-window args))
(condition-case nil
(progn (switch-to-buffer buffer nil t) (selected-window))
(error nil)))
;; Stay on the same frame if requested.
(when (or (cdr (assq 'same-frame args)) (cdr (assq 'same-window args)))
(let* ((pop-up-windows t)
special-display-buffer-names special-display-regexps)
(display-buffer buffer '((pop-up-frames . nil)))))
;; If no window yet, make one in a new frame.
(let* ((frame
(with-current-buffer buffer
(make-frame (append args special-display-frame-alist))))
(window (frame-selected-window frame)))
(display-buffer-record-window 'frame window buffer)
(unless (eq buffer (window-buffer window))
(set-window-buffer window buffer)
(set-window-prev-buffers window nil))
(set-window-dedicated-p window t)
window)))))