# HG changeset patch # User Richard M. Stallman # Date 1119708207 0 # Node ID 015a62a98a1c33a06f207a7b126d4b9db4f80381 # Parent b0c4ce512db495f2a5287e13c184d2f1421fa0df (save-selected-window): Use save-current-buffer. diff -r b0c4ce512db4 -r 015a62a98a1c lisp/window.el --- a/lisp/window.el Sat Jun 25 13:52:15 2005 +0000 +++ b/lisp/window.el Sat Jun 25 14:03:27 2005 +0000 @@ -40,11 +40,18 @@ (defmacro save-selected-window (&rest body) "Execute BODY, then select the window that was selected before BODY. -Also restore the selected window of each frame as it was at the start -of this construct. -However, if a window has become dead, don't get an error, -just refrain from reselecting it. -Return the value of the last form in BODY." +The value returned is the value of the last form in BODY. + +This macro saves and restores the current buffer, since otherwise +its normal operation could potentially make a different +buffer current. It does not alter the buffer list ordering, + +This macro saves and restores the selected window, as well as +the selected window in each frame. If the previously selected +window of some frame is no longer live at the end of BODY, that +frame's selected window is left alone. If the selected window is +no longer live, then whatever window is selected at the end of +BODY remains selected." `(let ((save-selected-window-window (selected-window)) ;; It is necessary to save all of these, because calling ;; select-window changes frame-selected-window for whatever @@ -52,14 +59,15 @@ (save-selected-window-alist (mapcar (lambda (frame) (list frame (frame-selected-window frame))) (frame-list)))) - (unwind-protect - (progn ,@body) - (dolist (elt save-selected-window-alist) - (and (frame-live-p (car elt)) - (window-live-p (cadr elt)) - (set-frame-selected-window (car elt) (cadr elt)))) - (if (window-live-p save-selected-window-window) - (select-window save-selected-window-window))))) + (save-current-buffer + (unwind-protect + (progn ,@body) + (dolist (elt save-selected-window-alist) + (and (frame-live-p (car elt)) + (window-live-p (cadr elt)) + (set-frame-selected-window (car elt) (cadr elt)))) + (if (window-live-p save-selected-window-window) + (select-window save-selected-window-window)))))) (defun window-body-height (&optional window) "Return number of lines in window WINDOW for actual buffer text.