summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim F. Storm <storm@cua.dk>2006-04-19 23:20:21 +0000
committerKim F. Storm <storm@cua.dk>2006-04-19 23:20:21 +0000
commite221c49a0a06c92f653f5040fdafeadb51d2a54a (patch)
tree54a12dc44b1df51ff47ba593baa01b9080393dfe
parent7f32b80b1110fab9b5010502ebb28e30a757e446 (diff)
downloademacs-e221c49a0a06c92f653f5040fdafeadb51d2a54a.tar.gz
emacs-e221c49a0a06c92f653f5040fdafeadb51d2a54a.tar.bz2
emacs-e221c49a0a06c92f653f5040fdafeadb51d2a54a.zip
(redisplay_window): If current window start is not at the
beginning of a line, select a new window start if buffer is modified and window start is in the modified region, but the first change is before window start.
-rw-r--r--src/xdisp.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 075e05b0e13..db987ad5a90 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12860,6 +12860,33 @@ redisplay_window (window, just_this_one_p)
|| (XFASTINT (w->last_modified) >= MODIFF
&& XFASTINT (w->last_overlay_modified) >= OVERLAY_MODIFF)))
{
+
+ /* If first window line is a continuation line, and window start
+ is inside the modified region, but the first change is before
+ current window start, we must select a new window start.*/
+ if (NILP (w->start_at_line_beg))
+ {
+ /* 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 (MODIFF > SAVE_MODIFF
+ /* This seems to happen sometimes after saving a buffer. */
+ || BEG_UNCHANGED + END_UNCHANGED > Z_BYTE)
+ {
+ if (GPT - BEG < BEG_UNCHANGED)
+ BEG_UNCHANGED = GPT - BEG;
+ if (Z - GPT < END_UNCHANGED)
+ END_UNCHANGED = Z - GPT;
+ }
+
+ if (CHARPOS (startp) > BEG + BEG_UNCHANGED
+ && CHARPOS (startp) <= Z - END_UNCHANGED)
+ {
+ centering_position = 0;
+ goto recenter;
+ }
+ }
+
#if GLYPH_DEBUG
debug_method_add (w, "same window start");
#endif