changeset 77251:e694d8ea818a

(redisplay_window): When deciding whether or not to recenter, don't use the reset values of BEG_UNCHANGED and END_UNCHANGED.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 15 Apr 2007 21:50:27 +0000
parents 50dd7a1e31f6
children 7b2f7d5c9b0b
files src/xdisp.c
diffstat 1 files changed, 19 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Sun Apr 15 21:50:18 2007 +0000
+++ b/src/xdisp.c	Sun Apr 15 21:50:27 2007 +0000
@@ -12777,6 +12777,8 @@
   int rc;
   int centering_position = -1;
   int last_line_misfit = 0;
+  int save_beg_unchanged = BEG_UNCHANGED;
+  int save_end_unchanged = END_UNCHANGED;
 
   SET_TEXT_POS (lpoint, PT, PT_BYTE);
   opoint = lpoint;
@@ -13145,11 +13147,20 @@
 	  && NILP (do_mouse_tracking)
 	  && CHARPOS (startp) > BEGV)
 	{
-	  /* Make sure beg_unchanged and end_unchanged are up to date.
-	     Do it only if buffer has really changed.  This may or may
-	     not have been done by try_window_id (see which) already. */
+#if 0
+	  /* The following code tried to make BEG_UNCHANGED and
+	     END_UNCHANGED up to date (similar to try_window_id).
+	     Is it important to do so?
+
+	     The trouble is that it's a little too strict when it
+	     comes to overlays: modify_overlay can call
+	     BUF_COMPUTE_UNCHANGED, which alters BUF_BEG_UNCHANGED and
+	     BUF_END_UNCHANGED directly without moving the gap.
+
+	     This can result in spurious recentering when overlays are
+	     altered in the buffer.  So unless it's proven necessary,
+	     let's leave this commented out for now. -- cyd.  */
 	  if (MODIFF > SAVE_MODIFF
-	      /* This seems to happen sometimes after saving a buffer.  */
 	      || BEG_UNCHANGED + END_UNCHANGED > Z_BYTE)
 	    {
 	      if (GPT - BEG < BEG_UNCHANGED)
@@ -13157,9 +13168,10 @@
 	      if (Z - GPT < END_UNCHANGED)
 		END_UNCHANGED = Z - GPT;
 	    }
-
-	  if (CHARPOS (startp) > BEG + BEG_UNCHANGED
-	      && CHARPOS (startp) <= Z - END_UNCHANGED)
+#endif
+
+	  if (CHARPOS (startp) > BEG + save_beg_unchanged
+	      && CHARPOS (startp) <= Z - save_end_unchanged)
 	    {
 	      /* There doesn't seems to be a simple way to find a new
 		 window start that is near the old window start, so