Mercurial > emacs
changeset 45584:5fd12f9027a3
(Fset_window_configuration): Correct the handling
of point in current buffer, to work with multiple windows.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 30 May 2002 17:04:59 +0000 |
parents | d7967cbc28b1 |
children | 13b4751a1413 |
files | src/window.c |
diffstat | 1 files changed, 8 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/window.c Thu May 30 17:03:50 2002 +0000 +++ b/src/window.c Thu May 30 17:04:59 2002 +0000 @@ -4938,7 +4938,6 @@ Lisp_Object new_current_buffer; Lisp_Object frame; FRAME_PTR f; - int old_point = -1; while (!WINDOW_CONFIGURATIONP (configuration)) wrong_type_argument (Qwindow_configuration_p, configuration); @@ -4949,11 +4948,6 @@ new_current_buffer = data->current_buffer; if (NILP (XBUFFER (new_current_buffer)->name)) new_current_buffer = Qnil; - else - { - if (XBUFFER (new_current_buffer) == current_buffer) - old_point = PT; - } frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame; f = XFRAME (frame); @@ -5105,8 +5099,8 @@ p->mark, w->buffer); /* As documented in Fcurrent_window_configuration, don't - save the location of point in the buffer which was current - when the window configuration was recorded. */ + restore the location of point in the buffer which was + current when the window configuration was recorded. */ if (!EQ (p->buffer, new_current_buffer) && XBUFFER (p->buffer) == current_buffer) Fgoto_char (w->pointm); @@ -5144,6 +5138,11 @@ That swapping out has already been done, near the beginning of this function. */ selected_window = Qnil; + if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer)) + set_marker_restricted (XWINDOW (data->current_window)->pointm, + make_number (BUF_PT (XBUFFER (XWINDOW (data->current_window)->buffer))), + XWINDOW (data->current_window)->buffer); + Fselect_window (data->current_window); XBUFFER (XWINDOW (selected_window)->buffer)->last_selected_window = selected_window; @@ -5189,11 +5188,6 @@ else if (EQ (leaf_windows[i]->buffer, new_current_buffer)) ++n; } - - /* If more than one window shows the new and old current buffer, - don't try to preserve point in that buffer. */ - if (old_point > 0 && n > 1) - old_point = -1; adjust_glyphs (f); @@ -5213,15 +5207,7 @@ } if (!NILP (new_current_buffer)) - { - Fset_buffer (new_current_buffer); - - /* If the buffer that is current now is the same - that was current before setting the window configuration, - don't alter its PT. */ - if (old_point >= 0) - SET_PT (old_point); - } + Fset_buffer (new_current_buffer); /* Restore the minimum heights recorded in the configuration. */ window_min_height = XINT (data->min_height);