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);