summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorStephen Leake <stephen_leake@stephe-leake.org>2015-07-29 18:30:36 -0500
committerStephen Leake <stephen_leake@stephe-leake.org>2015-07-29 18:30:36 -0500
commit72fea2fac543558cd2c4bd55e6f714f9f43efbc3 (patch)
tree9527af5fcfb321feec01771a2d9149a88261bffc /lisp/window.el
parent11d40d38c809df93956b4dbad7a3be0722d066ff (diff)
Add display-buffer action display-buffer-use-some-frame
* lisp/window.el (display-buffer-use-some-frame): new
Diffstat (limited to 'lisp/window.el')
-rw-r--r--lisp/window.el33
1 files changed, 33 insertions, 0 deletions
diff --git a/lisp/window.el b/lisp/window.el
index f15dd9b7355..986c55380d0 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -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