* Re: which-func causes wrong window selections
[not found] <v1tbs6sb325.fsf@miyazima.lti.cs.cmu.edu>
@ 2002-09-21 19:39 ` Richard Stallman
0 siblings, 0 replies; only message in thread
From: Richard Stallman @ 2002-09-21 19:39 UTC (permalink / raw)
Cc: emacs-devel
You have found a real doozie of a problem.
I think the right solution is that selecting a window with
select-window should not select its frame, and should not alter the
frame's selected window unless it is the selected frame.
Could people please think about this and see if they can spot
any bad consequences? I have a feeling this will break things
which we will need to fix. But at the same time I don't see any
other good solution.
I will implement it now so we can start to notice what breaks.
Meanwhile, we can still consider other solutions if someone can
propose another.
Envelope-to: emacs-pretest-bug@gnu.org
Delivery-date: Fri, 20 Sep 2002 20:27:17 -0400
To: emacs-pretest-bug@gnu.org
Subject: which-func causes wrong window selections
From: md5i@cs.cmu.edu
Date: Fri, 20 Sep 2002 20:26:42 -0400
Sender: md5i@cs.cmu.edu
Source-Info: Sender is really md5i+@miyazima.lti.cs.cmu.edu
X-Spam-Status: No, hits=2.0 required=5.0
tests=NO_REAL_NAME,DOUBLE_CAPSWORD,GAPPY_TEXT
version=2.31
X-Spam-Level: **
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
If you are using multiple windows in multiple frames, which-function-mode
can cause the selected window in the non-current frame to change.
Recipe:
emacs -q -no-site-file
C-x 4 b foo RET
C-x o
C-x 5 b bar RET
At this point in time, switching between frames maintains the
selected window in the first frame (containing "*scratch*").
M-x which-function-mode
Now, if you switch to the frame containing bar and wait there for a few
seconds, when you switch back to first frame, the window containing
"foo" is selected rather than "*scratch*".
Root cause:
`which-func-update' calls `which-func-update-1' on all visible
windows in window order. Although `which-func-update-1' wraps its
stuff in `save-selected-window', this is not enough to maintain
other frames' selected windows. Sequence goes like this:
Given:
2 frames, frame 1 has window A (selected) and B, and frame 2 has window C.
selected frame is frame 2, selected window is window C.
`save-selected-window' saves window C.
window A is selected by which-func-update-1.
select_window_1 in window.c sets frame 1's selected window to A.
sf = SELECTED_FRAME ();
if (XFRAME (WINDOW_FRAME (w)) != sf)
{
XFRAME (WINDOW_FRAME (w))->selected_window = window;
/* Use this rather than Fhandle_switch_frame
so that FRAME_FOCUS_FRAME is moved appropriately as we
move around in the state where a minibuffer in a separate
frame is active. */
Fselect_frame (WINDOW_FRAME (w), Qnil);
}
`save-selected-window' resores frame 2's selected window to C.
`save-selected-window' saves window C.
window B is selected by which-func-update-1.
select_window_1 in window.c sets frame 1's selected window to B.
`save-selected-window' resores frame 2's selected window to C.
`save-selected-window' saves window C.
window C is selected by which-func-update-1.
select_window_1 in window.c sets frame 2's selected window to C.
`save-selected-window' resores frame 2's selected window to C.
We end up with frame 1's selected window having changed to B.
In GNU Emacs 21.3.50.11 (i686-pc-linux-gnu, X toolkit)
of 2002-09-19 on miyazima.lti.cs.cmu.edu
configured using `configure --prefix=/opt/emacs21 --without-toolkit-scroll-bars --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --verbose'
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: en_US
locale-coding-system: iso-latin-1
default-enable-multibyte-characters: t
Recent input:
t - e n m <tab> <backspace> <backspace> m <tab> <return>
M-p C-k W h i c h - f u n C-a C-k w h i c h - f u n
c SPC c a u s e s SPC w r o n g SPC w i n d o w SPC
s e l e c t i o n s <return> C-x k y e s <return> C-n
C-n C-p C-p C-p C-e C-x 4 b * g u <tab> <return> <escape>
> M-x r e p o r t - e m <tab> <return>
Recent messages:
Type C-x 4 b RET to restore the other window. C-M-v to scroll the help.
Undo!
find-function-noselect: select-window is a primitive function
Mark set
Mark saved where search started
Mark set [4 times]
Don't touch it! It's the History Eraser Button, you fool!
Mark set
Loading emacsbug...done
Mark set
--
Michael Welsh Duggan
(md5i@cs.cmu.edu)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-09-21 19:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <v1tbs6sb325.fsf@miyazima.lti.cs.cmu.edu>
2002-09-21 19:39 ` which-func causes wrong window selections Richard Stallman
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.