aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2012-10-07 11:54:30 -0400
committerStefan Monnier2012-10-07 11:54:30 -0400
commit662a9d0e1ca5f7e2de9aa2d4d59a038aa93ab146 (patch)
tree412e909910b398eb2dc87b9d6795ec0b44a70360
parent13af0d109fc8d2595c0f9f103993e27690f616a3 (diff)
downloademacs-662a9d0e1ca5f7e2de9aa2d4d59a038aa93ab146.tar.gz
emacs-662a9d0e1ca5f7e2de9aa2d4d59a038aa93ab146.zip
* lisp/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. * lisp/textmodes/tex-mode.el (tex-recenter-output-buffer): Use with-selected-window.
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/textmodes/tex-mode.el3
-rw-r--r--lisp/window.el56
3 files changed, 40 insertions, 27 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 132cea20bdc..fe225a9ddd2 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,13 @@
12012-10-07 Stefan Monnier <monnier@iro.umontreal.ca> 12012-10-07 Stefan Monnier <monnier@iro.umontreal.ca>
2 2
3 * window.el (internal--before-save-selected-window)
4 (internal--after-save-selected-window): New functions extracted from
5 save-selected-window. Make sure we return the `alist' we construct.
6 (save-selected-window): Use them.
7
8 * textmodes/tex-mode.el (tex-recenter-output-buffer):
9 Use with-selected-window.
10
3 * emacs-lisp/autoload.el (make-autoload): Add `cl-defmacro' to the 11 * emacs-lisp/autoload.el (make-autoload): Add `cl-defmacro' to the
4 forms that define macros (bug#12593). 12 forms that define macros (bug#12593).
5 13
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index a324daa9283..062f43be57b 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -2565,8 +2565,7 @@ line LINE of the window, or centered if LINE is nil."
2565 (if (null tex-shell) 2565 (if (null tex-shell)
2566 (message "No TeX output buffer") 2566 (message "No TeX output buffer")
2567 (setq window (display-buffer tex-shell)) 2567 (setq window (display-buffer tex-shell))
2568 (save-selected-window 2568 (with-selected-window window
2569 (select-window window)
2570 (bury-buffer tex-shell) 2569 (bury-buffer tex-shell)
2571 (goto-char (point-max)) 2570 (goto-char (point-max))
2572 (recenter (if linenum 2571 (recenter (if linenum
diff --git a/lisp/window.el b/lisp/window.el
index 41af7f9f44b..f9761366b62 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -28,6 +28,35 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(defun internal--before-save-selected-window ()
32 (cons (selected-window)
33 ;; We save and restore all frames' selected windows, because
34 ;; `select-window' can change the frame-selected-window of
35 ;; whatever frame that window is in. Each text terminal's
36 ;; top-frame is preserved by putting it last in the list.
37 (apply #'append
38 (mapcar (lambda (terminal)
39 (let ((frames (frames-on-display-list terminal))
40 (top-frame (tty-top-frame terminal))
41 alist)
42 (if top-frame
43 (setq frames
44 (cons top-frame
45 (delq top-frame frames))))
46 (dolist (f frames)
47 (push (cons f (frame-selected-window f))
48 alist))
49 alist))
50 (terminal-list)))))
51
52(defun internal--after-save-selected-window (state)
53 (dolist (elt (cdr state))
54 (and (frame-live-p (car elt))
55 (window-live-p (cdr elt))
56 (set-frame-selected-window (car elt) (cdr elt) 'norecord)))
57 (when (window-live-p (car state))
58 (select-window (car state) 'norecord)))
59
31(defmacro save-selected-window (&rest body) 60(defmacro save-selected-window (&rest body)
32 "Execute BODY, then select the previously selected window. 61 "Execute BODY, then select the previously selected window.
33The value returned is the value of the last form in BODY. 62The 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
44order of recently selected windows and the buffer list ordering 73order of recently selected windows and the buffer list ordering
45are not altered by this macro (unless they are altered in BODY)." 74are not altered by this macro (unless they are altered in BODY)."
46 (declare (indent 0) (debug t)) 75 (declare (indent 0) (debug t))
47 `(let ((save-selected-window-window (selected-window)) 76 `(let ((save-selected-window--state (internal--before-save-selected-window)))
48 ;; We save and restore all frames' selected windows, because
49 ;; `select-window' can change the frame-selected-window of
50 ;; whatever frame that window is in. Each text terminal's
51 ;; top-frame is preserved by putting it last in the list.
52 (save-selected-window-alist
53 (apply 'append
54 (mapcar (lambda (terminal)
55 (let ((frames (frames-on-display-list terminal))
56 (top-frame (tty-top-frame terminal))
57 alist)
58 (if top-frame
59 (setq frames
60 (cons top-frame
61 (delq top-frame frames))))
62 (dolist (f frames)
63 (push (cons f (frame-selected-window f))
64 alist))))
65 (terminal-list)))))
66 (save-current-buffer 77 (save-current-buffer
67 (unwind-protect 78 (unwind-protect
68 (progn ,@body) 79 (progn ,@body)
69 (dolist (elt save-selected-window-alist) 80 (internal--after-save-selected-window save-selected-window--state)))))
70 (and (frame-live-p (car elt))
71 (window-live-p (cdr elt))
72 (set-frame-selected-window (car elt) (cdr elt) 'norecord)))
73 (when (window-live-p save-selected-window-window)
74 (select-window save-selected-window-window 'norecord))))))
75 81
76(defvar temp-buffer-window-setup-hook nil 82(defvar temp-buffer-window-setup-hook nil
77 "Normal hook run by `with-temp-buffer-window' before buffer display. 83 "Normal hook run by `with-temp-buffer-window' before buffer display.