]> git.eshelyaron.com Git - emacs.git/commitdiff
(pop-to-buffer): If the window for buffer-or-name is
authorMartin Rudalics <rudalics@gmx.at>
Thu, 11 Sep 2008 06:39:30 +0000 (06:39 +0000)
committerMartin Rudalics <rudalics@gmx.at>
Thu, 11 Sep 2008 06:39:30 +0000 (06:39 +0000)
not on the selected frame, raise that window's frame and give it
input focus.  (Bug#745)

lisp/ChangeLog
lisp/window.el

index 0726591ef58b531c10e8b05fd17798c23ca607f4..838c9302e6ce3769059e9b966062c5522107f430 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-11  Martin Rudalics  <rudalics@gmx.at>
+
+       * window.el (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)
+
 2008-09-11  Glenn Morris  <rgm@gnu.org>
 
        * ido.el (ido-mode): Initialize with custom-initialize-default.
index 6c3a8cfce04344dc2e1a03d7cf80653571e1b6da..8f208208744b9fe2c67937c166ce9ae6910de346 100644 (file)
@@ -1029,6 +1029,9 @@ insist on finding another window even if the specified buffer is
 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 @@ at the front of the list of recently selected ones."
            (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.