From: Martin Rudalics Date: Tue, 4 Nov 2008 06:53:44 +0000 (+0000) Subject: (save-selected-window): Make it behave like X-Git-Tag: emacs-pretest-23.0.90~1991 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ee434cb1a65ad5a283153f2f454a99acf5d63380;p=emacs.git (save-selected-window): Make it behave like save-selected-window-norecord. (save-selected-window-norecord): Remove, since functionality fully taken over by save-selected-window. (walk-windows, set-window-text-height, fit-window-to-buffer): Use save-selected-window instead of save-selected-window-norecord. --- diff --git a/etc/NEWS b/etc/NEWS index 0a637a011ab..13a36ed373d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1252,12 +1252,9 @@ to override the default splitting mechanism of display-buffer. *** If pop-up-frames has the value `graphic-only', display-buffer only makes a separate frame on graphic displays. -** Ordering of recently selected windows and buffer list - *** select-frame and set-frame-selected-window have new optional -argument NORECORD. - -*** New macro save-selected-window-norecord +argument NORECORD. If non-nil, this will avoid messing with the order +of recently selected windows and the buffer list. ** Window parameters can now be defined. These are analogous to frame parameters, but are associated with diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f78edfdf3b6..977346f731f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2008-11-04 Martin Rudalics + + * window.el (save-selected-window): Make it behave like + save-selected-window-norecord. + (save-selected-window-norecord): Remove, since functionality + fully taken over by save-selected-window. + (walk-windows, set-window-text-height, fit-window-to-buffer): + Use save-selected-window instead of save-selected-window-norecord. + 2008-11-03 Alan Mackenzie * progmodes/cc-engine.el (c-forward-label): Fix for QT macros. diff --git a/lisp/window.el b/lisp/window.el index ee56075bd64..56565a615e1 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -39,40 +39,20 @@ unless you explicitly change the size, or Emacs has no other choice.") (make-variable-buffer-local 'window-size-fixed) (defmacro save-selected-window (&rest body) - "Execute BODY, then select the window that was selected before BODY. + "Execute BODY, then select the previously selected window. The value returned is the value of the last form in BODY. +This macro saves and restores the selected window, as well as the +selected window in each frame. If the previously selected window +is no longer live, then whatever window is selected at the end of +BODY remains selected. 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. + 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 - ;; frame that window is in. - (save-selected-window-alist - (mapcar (lambda (frame) (cons frame (frame-selected-window frame))) - (frame-list)))) - (save-current-buffer - (unwind-protect - (progn ,@body) - (dolist (elt save-selected-window-alist) - (and (frame-live-p (car elt)) - (window-live-p (cdr elt)) - (set-frame-selected-window (car elt) (cdr elt)))) - (if (window-live-p save-selected-window-window) - (select-window save-selected-window-window)))))) - -(defmacro save-selected-window-norecord (&rest body) - "Execute BODY, then select, but do not record previously selected window. -This macro is like `save-selected-window' but changes neither the -order of recently selected windows nor the buffer list." +its normal operation could make a different buffer current. The +order of recently selected windows and the buffer list ordering +are not altered by this macro (unless they are altered in BODY)." `(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 @@ -192,9 +172,9 @@ windows nor the buffer list." (when (window-minibuffer-p (selected-window)) (setq minibuf t)) ;; Make sure to not mess up the order of recently selected - ;; windows. Use `save-selected-window-norecord' and `select-window' + ;; windows. Use `save-selected-window' and `select-window' ;; with second argument non-nil for this purpose. - (save-selected-window-norecord + (save-selected-window (when (framep all-frames) (select-window (frame-first-window all-frames) 'norecord)) (let* (walk-windows-already-seen @@ -1232,7 +1212,7 @@ where some error may be present." ;; the modeline. (let ((window-min-height (min 2 height))) ; One text line plus a modeline. (if (and window (not (eq window (selected-window)))) - (save-selected-window-norecord + (save-selected-window (select-window window 'norecord) (enlarge-window delta)) (enlarge-window delta)))))) @@ -1350,7 +1330,7 @@ Always return nil." (and (eobp) (bolp) (not (bobp)))) (set-window-point window (1- (window-point window)))) - (save-selected-window-norecord + (save-selected-window (select-window window 'norecord) ;; Adjust WINDOW to the nominally correct size (which may actually