summaryrefslogtreecommitdiff
path: root/lisp/window.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2002-12-23 17:57:12 +0000
committerRichard M. Stallman <rms@gnu.org>2002-12-23 17:57:12 +0000
commite3ed3e36ad9df8d85f13c0f282b56e0718365d21 (patch)
treea2235e4f2fb69014693260c89b00fc0e3b16102a /lisp/window.el
parent913d548a1f55e18eb188c474fe61bde45fc3c80c (diff)
downloademacs-e3ed3e36ad9df8d85f13c0f282b56e0718365d21.tar.gz
(save-selected-window): Save and restore selected windows of all frames.
Diffstat (limited to 'lisp/window.el')
-rw-r--r--lisp/window.el15
1 files changed, 12 insertions, 3 deletions
diff --git a/lisp/window.el b/lisp/window.el
index 98d5f9963f1..bacd9161ea5 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -31,11 +31,20 @@
(defmacro save-selected-window (&rest body)
"Execute BODY, then select the window that was selected before BODY.
-However, if that window has become dead, don't get an error,
-just refrain from switching to it."
- `(let ((save-selected-window-window (selected-window)))
+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."
+ `(let ((save-selected-window-window (selected-window))
+ (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)))))