]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/window.el (internal--before-save-selected-window)
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 7 Oct 2012 15:54:30 +0000 (11:54 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 7 Oct 2012 15:54:30 +0000 (11:54 -0400)
(internal--after-save-selected-window): New functions extracted from
save-selected-window.  Make sure we return the `alist' we construct.
(save-selected-window): Use them.
* lisp/textmodes/tex-mode.el (tex-recenter-output-buffer):
Use with-selected-window.

lisp/ChangeLog
lisp/textmodes/tex-mode.el
lisp/window.el

index 132cea20bdcfb2d4225e9f04f5484c97335f0f5b..fe225a9ddd2553bff878ed2fb70b7263b69b5885 100644 (file)
@@ -1,5 +1,13 @@
 2012-10-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * window.el (internal--before-save-selected-window)
+       (internal--after-save-selected-window): New functions extracted from
+       save-selected-window.  Make sure we return the `alist' we construct.
+       (save-selected-window): Use them.
+
+       * textmodes/tex-mode.el (tex-recenter-output-buffer):
+       Use with-selected-window.
+
        * emacs-lisp/autoload.el (make-autoload): Add `cl-defmacro' to the
        forms that define macros (bug#12593).
 
index a324daa9283690c30f8151fd13c285082288e550..062f43be57b81169be0c21cf9ca73f08dafa6e8c 100644 (file)
@@ -2565,8 +2565,7 @@ line LINE of the window, or centered if LINE is nil."
     (if (null tex-shell)
        (message "No TeX output buffer")
       (setq window (display-buffer tex-shell))
-      (save-selected-window
-       (select-window window)
+      (with-selected-window window
        (bury-buffer tex-shell)
        (goto-char (point-max))
        (recenter (if linenum
index 41af7f9f44b5f25746d6be7d74db21002883d478..f9761366b62c452071622a030211515a5831bac7 100644 (file)
 
 ;;; Code:
 
+(defun internal--before-save-selected-window ()
+  (cons (selected-window)
+        ;; We save and restore all frames' selected windows, because
+        ;; `select-window' can change the frame-selected-window of
+        ;; whatever frame that window is in.  Each text terminal's
+        ;; top-frame is preserved by putting it last in the list.
+        (apply #'append
+               (mapcar (lambda (terminal)
+                         (let ((frames (frames-on-display-list terminal))
+                               (top-frame (tty-top-frame terminal))
+                               alist)
+                           (if top-frame
+                               (setq frames
+                                     (cons top-frame
+                                           (delq top-frame frames))))
+                           (dolist (f frames)
+                             (push (cons f (frame-selected-window f))
+                                   alist))
+                           alist))
+                       (terminal-list)))))
+
+(defun internal--after-save-selected-window (state)
+  (dolist (elt (cdr state))
+    (and (frame-live-p (car elt))
+         (window-live-p (cdr elt))
+         (set-frame-selected-window (car elt) (cdr elt) 'norecord)))
+  (when (window-live-p (car state))
+    (select-window (car state) 'norecord)))
+
 (defmacro save-selected-window (&rest body)
   "Execute BODY, then select the previously selected window.
 The value returned is the value of the last form in BODY.
@@ -44,34 +73,11 @@ 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)."
   (declare (indent 0) (debug t))
-  `(let ((save-selected-window-window (selected-window))
-        ;; We save and restore all frames' selected windows, because
-        ;; `select-window' can change the frame-selected-window of
-        ;; whatever frame that window is in.  Each text terminal's
-        ;; top-frame is preserved by putting it last in the list.
-        (save-selected-window-alist
-         (apply 'append
-                (mapcar (lambda (terminal)
-                          (let ((frames (frames-on-display-list terminal))
-                                (top-frame (tty-top-frame terminal))
-                                alist)
-                            (if top-frame
-                                (setq frames
-                                      (cons top-frame
-                                            (delq top-frame frames))))
-                            (dolist (f frames)
-                              (push (cons f (frame-selected-window f))
-                                    alist))))
-                        (terminal-list)))))
+  `(let ((save-selected-window--state (internal--before-save-selected-window)))
      (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) 'norecord)))
-        (when (window-live-p save-selected-window-window)
-          (select-window save-selected-window-window 'norecord))))))
+         (internal--after-save-selected-window save-selected-window--state)))))
 
 (defvar temp-buffer-window-setup-hook nil
   "Normal hook run by `with-temp-buffer-window' before buffer display.