[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
with-selected-window (was: Problems with compile-mode)
From: |
Stefan Monnier |
Subject: |
with-selected-window (was: Problems with compile-mode) |
Date: |
01 Jun 2004 00:34:34 -0400 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3.50 |
> I added a comment already. The scenario is that you do
> with-selected-window specifying a window on some other frame.
> On exit from with-selected-window, the frame-selected-window of that frame
> is now the window you selected, which could (for all we know)
> be different from what it was before.
So would it be OK to only save&restore the other frame's
frame-selected-window rather than the one of every single frame?
I.e. like the patch below,
Stefan
* auto-adding address@hidden/emacs--monnier--0--patch-48 to greedy revision
library /part/00/Tmp/monnier/archlib
* found immediate ancestor revision in library
(address@hidden/emacs--monnier--0--patch-47)
* patching for this revision (address@hidden/emacs--monnier--0--patch-48)
--- orig/lisp/subr.el
+++ mod/lisp/subr.el
@@ -1854,19 +1854,21 @@
(declare (indent 1) (debug t))
;; 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))))
+ ;; Selecting a window on another frame changes not only the
+ ;; selected-window but also the frame-selected-window of the
+ ;; destination frame. So we need to save&restore it.
+ (save-selected-window-other-frame
+ (unless (eq (selected-frame) (window-frame window))
+ (frame-selected-window (window-frame window)))))
(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))))
+ ;; First reset frame-selected-window.
+ (if (window-live-p save-selected-window-other-frame)
+ ;; We don't use set-frame-selected-window because it does not
+ ;; pass the `norecord' argument.
+ (select-window save-selected-window-other-frame 'norecord))
+ ;; Then reset the actual selected-window.
(if (window-live-p save-selected-window-window)
(select-window save-selected-window-window 'norecord)))))
- with-selected-window (was: Problems with compile-mode),
Stefan Monnier <=