From: Stephen Leake Date: Wed, 29 Jul 2015 23:30:36 +0000 (-0500) Subject: Add display-buffer action display-buffer-use-some-frame X-Git-Tag: emacs-25.0.90~1415 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=72fea2fac543558cd2c4bd55e6f714f9f43efbc3;p=emacs.git Add display-buffer action display-buffer-use-some-frame * lisp/window.el (display-buffer-use-some-frame): new --- 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