Add display-buffer action display-buffer-use-some-frame

* lisp/window.el (display-buffer-use-some-frame): new
This commit is contained in:
Stephen Leake 2015-07-29 18:30:36 -05:00
parent 11d40d38c8
commit 72fea2fac5

View file

@ -6488,6 +6488,39 @@ its documentation for additional customization information."
;;; `display-buffer' action functions:
(defun display-buffer-use-some-frame (buffer alist)
"Display BUFFER in an existing frame other than the current frame.
If successful, return the window used; otherwise return nil.
If ALIST has a non-nil `inhibit-switch-frame' entry, avoid
raising the frame.
If ALIST has a non-nil `pop-up-frame-parameters' entry, the
corresponding value is an alist of frame parameters to give the
new frame.
If ALIST has a non-nil `frame-predicate' entry, the corresponding
value is a function taking one argument (a frame), returning
non-nil if the frame is a candidate."
(let* ((predicate (or (cdr (assoc 'frame-predicate alist))
(lambda (frame)
(and
(not (eq frame (selected-frame)))
(not (window-dedicated-p
(or
(get-lru-window frame)
(frame-first-window frame)))))
)))
(frame (car (filtered-frame-list predicate)))
(window (and frame (get-lru-window frame))))
(when window
(prog1
(window--display-buffer
buffer window 'frame alist display-buffer-mark-dedicated)
(unless (cdr (assq 'inhibit-switch-frame alist))
(window--maybe-raise-frame frame))))
))
(defun display-buffer-same-window (buffer alist)
"Display BUFFER in the selected window.
This fails if ALIST has a non-nil `inhibit-same-window' entry, or