]> code.delx.au - gnu-emacs/commitdiff
(with-selected-window): Undo previous change.
authorRichard M. Stallman <rms@gnu.org>
Sat, 29 May 2004 15:23:42 +0000 (15:23 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 29 May 2004 15:23:42 +0000 (15:23 +0000)
lisp/subr.el

index b9e14ade288008ac4156f553fab59045cd8cfb27..9b378c5f06b6fb28c5f559b80c2da61395233e87 100644 (file)
@@ -1796,10 +1796,21 @@ The value returned is the value of the last form in BODY.
 This does not alter the buffer list ordering.
 See also `with-temp-buffer'."
   (declare (indent 1) (debug t))
-  `(let ((save-selected-window-window (selected-window)))
+  ;; Most of this code is a copy of save-selected-window.
+  `(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) (list frame (frame-selected-window frame)))
+                 (frame-list))))
      (unwind-protect
         (progn (select-window ,window 'norecord)
                ,@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 'norecord)))))