Commit f22611c2 authored by Chong Yidong's avatar Chong Yidong
Browse files

(redisplay_window): When deciding whether or not to recenter, don't

use the reset values of BEG_UNCHANGED and END_UNCHANGED.
parent bc4aed8f
...@@ -12777,6 +12777,8 @@ redisplay_window (window, just_this_one_p) ...@@ -12777,6 +12777,8 @@ redisplay_window (window, just_this_one_p)
int rc; int rc;
int centering_position = -1; int centering_position = -1;
int last_line_misfit = 0; int last_line_misfit = 0;
int save_beg_unchanged = BEG_UNCHANGED;
int save_end_unchanged = END_UNCHANGED;
   
SET_TEXT_POS (lpoint, PT, PT_BYTE); SET_TEXT_POS (lpoint, PT, PT_BYTE);
opoint = lpoint; opoint = lpoint;
...@@ -13145,11 +13147,20 @@ redisplay_window (window, just_this_one_p) ...@@ -13145,11 +13147,20 @@ redisplay_window (window, just_this_one_p)
&& NILP (do_mouse_tracking) && NILP (do_mouse_tracking)
&& CHARPOS (startp) > BEGV) && CHARPOS (startp) > BEGV)
{ {
/* Make sure beg_unchanged and end_unchanged are up to date. #if 0
Do it only if buffer has really changed. This may or may /* The following code tried to make BEG_UNCHANGED and
not have been done by try_window_id (see which) already. */ 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 if (MODIFF > SAVE_MODIFF
/* This seems to happen sometimes after saving a buffer. */
|| BEG_UNCHANGED + END_UNCHANGED > Z_BYTE) || BEG_UNCHANGED + END_UNCHANGED > Z_BYTE)
{ {
if (GPT - BEG < BEG_UNCHANGED) if (GPT - BEG < BEG_UNCHANGED)
...@@ -13157,9 +13168,10 @@ redisplay_window (window, just_this_one_p) ...@@ -13157,9 +13168,10 @@ redisplay_window (window, just_this_one_p)
if (Z - GPT < END_UNCHANGED) if (Z - GPT < END_UNCHANGED)
END_UNCHANGED = Z - GPT; END_UNCHANGED = Z - GPT;
} }
#endif
   
if (CHARPOS (startp) > BEG + BEG_UNCHANGED if (CHARPOS (startp) > BEG + save_beg_unchanged
&& CHARPOS (startp) <= Z - END_UNCHANGED) && CHARPOS (startp) <= Z - save_end_unchanged)
{ {
/* There doesn't seems to be a simple way to find a new /* There doesn't seems to be a simple way to find a new
window start that is near the old window start, so window start that is near the old window start, so
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment