From: Martin Rudalics Date: Thu, 11 Sep 2008 06:39:30 +0000 (+0000) Subject: (pop-to-buffer): If the window for buffer-or-name is X-Git-Tag: emacs-pretest-23.0.90~2923 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a4f41c95a90568777801885afa32232ec277820d;p=emacs.git (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) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0726591ef58..838c9302e6c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2008-09-11 Martin Rudalics + + * 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 * ido.el (ido-mode): Initialize with custom-initialize-default. diff --git a/lisp/window.el b/lisp/window.el index 6c3a8cfce04..8f208208744 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -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.