changeset 98141:2184b626a9cc

(pop-to-buffer): If the window for buffer-or-name is not on the selected frame, raise that window's frame and give it input focus. (Bug#745)
author Martin Rudalics <rudalics@gmx.at>
date Thu, 11 Sep 2008 06:35:55 +0000
parents 29a6b28b1b89
children a8c93fb9322c
files lisp/window.el
diffstat 1 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/window.el	Thu Sep 11 06:18:24 2008 +0000
+++ b/lisp/window.el	Thu Sep 11 06:35:55 2008 +0000
@@ -1029,6 +1029,9 @@
 already visible in the selected window, and ignore
 `same-window-regexps' and `same-window-buffer-names'.
 
+If the window to show BUFFER-OR-NAME is not on the selected
+frame, raise that window's frame and give it input focus.
+
 This function returns the buffer it switched to.  This uses the
 function `display-buffer' as a subroutine; see the documentation
 of `display-buffer' for additional customization information.
@@ -1043,9 +1046,21 @@
            (or (get-buffer buffer-or-name)
                (let ((buf (get-buffer-create buffer-or-name)))
                  (set-buffer-major-mode buf)
-                 buf)))))
+                 buf))))
+	(old-window (selected-window))
+	(old-frame (selected-frame))
+	new-window new-frame)
     (set-buffer buffer)
-    (select-window (display-buffer buffer other-window) norecord)
+    (setq new-window (display-buffer buffer other-window) norecord)
+    (unless (eq new-window old-window)
+      ;; `display-buffer' has chosen another window.
+      (setq new-frame (window-frame new-window))
+      (unless (eq new-frame old-frame)
+	;; `display-buffer' has chosen another frame, make sure it gets
+	;; input focus and is risen.
+	(select-frame-set-input-focus new-frame))
+      ;; Make sure the window chosen by `display-buffer' gets selected.
+      (select-window new-window))
     buffer))
 
 ;; I think this should be the default; I think people will prefer it--rms.