diff options
author | Stefan Monnier <[email protected]> | 2005-04-12 22:52:52 +0000 |
---|---|---|
committer | Stefan Monnier <[email protected]> | 2005-04-12 22:52:52 +0000 |
commit | 203eb0aa1d75155378080885ad4a1123fe355ba8 (patch) | |
tree | 599b6e2c1fd13d5eb6e67026942b93c4e9e599a3 /src/window.c | |
parent | dc56fc01ff1ff4950432c445ac0325920a70d6e4 (diff) |
(Fset_window_configuration): Be careful when you choose
among several possible points for the new_current_buffer.
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/window.c b/src/window.c index 988b663cbb..1070f8cf37 100644 --- a/src/window.c +++ b/src/window.c @@ -1,7 +1,7 @@ /* Window creation, deletion and examination for GNU Emacs. Does not include redisplay. - Copyright (C) 1985,86,87, 1993,94,95,96,97,98, 2000,01,02,03,04 - Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000, + 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -5594,7 +5594,20 @@ the return value is nil. Otherwise the value is t. */) if (XBUFFER (new_current_buffer) == current_buffer) old_point = PT; else - old_point = BUF_PT (XBUFFER (new_current_buffer)); + /* BUF_PT (XBUFFER (new_current_buffer)) gives us the position of + point in new_current_buffer as of the last time this buffer was + used. This can be non-deterministic since it can be changed by + things like jit-lock by mere temporary selection of some random + window that happens to show this buffer. + So if possible we want this arbitrary choice of "which point" to + be the one from the to-be-selected-window so as to prevent this + window's cursor from being copied from another window. */ + if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer) + /* If current_window = selected_window, its point is in BUF_PT. */ + && !EQ (selected_window, data->current_window)) + old_point = XMARKER (XWINDOW (data->current_window)->pointm)->charpos; + else + old_point = BUF_PT (XBUFFER (new_current_buffer)); } frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame; |