summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2007-05-24 23:21:32 +0000
committerChong Yidong <cyd@stupidchicken.com>2007-05-24 23:21:32 +0000
commitf4fae9a0934d5669a6fd8d8da5b7dc91c2bda693 (patch)
treec903981933c75442923a8b6e3ab2abec1636d36e
parentef92b69b3dcdd127ec05855de257d3c89c40b7da (diff)
downloademacs-f4fae9a0934d5669a6fd8d8da5b7dc91c2bda693.tar.gz
(redisplay_window): If first window line is a continuation line,
recompute the new window start instead of recentering.
-rw-r--r--src/xdisp.c42
1 files changed, 10 insertions, 32 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 82f24551f19..a50018f1596 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12968,6 +12968,8 @@ redisplay_window (window, just_this_one_p)
w->force_start = Qt;
}
+ force_start:
+
/* Handle case where place to start displaying has been specified,
unless the specified location is outside the accessible range. */
if (!NILP (w->force_start)
@@ -13147,39 +13149,15 @@ redisplay_window (window, just_this_one_p)
than a simple mouse-click. */
if (NILP (w->start_at_line_beg)
&& NILP (do_mouse_tracking)
- && CHARPOS (startp) > BEGV)
+ && CHARPOS (startp) > BEGV
+ && CHARPOS (startp) > BEG + save_beg_unchanged
+ && CHARPOS (startp) <= Z - save_end_unchanged)
{
-#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
- || BEG_UNCHANGED + END_UNCHANGED > Z_BYTE)
- {
- if (GPT - BEG < BEG_UNCHANGED)
- BEG_UNCHANGED = GPT - BEG;
- if (Z - GPT < END_UNCHANGED)
- END_UNCHANGED = Z - GPT;
- }
-#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
- we just recenter. */
- goto recenter;
- }
+ w->force_start = Qt;
+ if (XMARKER (w->start)->buffer == current_buffer)
+ compute_window_start_on_continuation_line (w);
+ SET_TEXT_POS_FROM_MARKER (startp, w->start);
+ goto force_start;
}
#if GLYPH_DEBUG