From: Kim F. Storm Date: Wed, 19 Apr 2006 23:20:21 +0000 (+0000) Subject: (redisplay_window): If current window start is not at the X-Git-Tag: emacs-pretest-22.0.90~3048 X-Git-Url: https://code.delx.au/gnu-emacs/commitdiff_plain/e221c49a0a06c92f653f5040fdafeadb51d2a54a (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. --- diff --git a/src/xdisp.c b/src/xdisp.c index 075e05b0e1..db987ad5a9 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