From 70c4cfbb3b0400b895b9520444908441551c7ef0 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 20 Jun 2010 21:04:30 +0300 Subject: [PATCH] Avoid recentering when lines differ in their height. xdisp.c (try_scrolling): When scroll-conservatively is set to most-positive-fixnum, be extra accurate when scrolling window start, to avoid missing the cursor line. --- src/ChangeLog | 6 ++++++ src/xdisp.c | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7d875bf5bda..7405d92e0e6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2010-06-20 Eli Zaretskii + + * xdisp.c (try_scrolling): When scroll-conservatively is set to + most-positive-fixnum, be extra accurate when scrolling window + start, to avoid missing the cursor line. + 2010-06-19 Eli Zaretskii * xdisp.c (try_scrolling): Compute the limit for searching point diff --git a/src/xdisp.c b/src/xdisp.c index d533346c3b6..795e13e6f1a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13486,7 +13486,26 @@ try_scrolling (window, just_this_one_p, scroll_conservatively, return SCROLLING_FAILED; start_display (&it, w, startp); - move_it_vertically (&it, amount_to_scroll); + if (scroll_max < INT_MAX) + move_it_vertically (&it, amount_to_scroll); + else + { + /* Extra precision for users who set scroll-conservatively + to most-positive-fixnum: make sure the amount we scroll + the window start is never less than amount_to_scroll, + which was computed as distance from window bottom to + point. This matters when lines at window top and lines + below window bottom have different height. */ + struct it it1 = it; + /* We use a temporary it1 because line_bottom_y can modify + its argument, if it moves one line down; see there. */ + int start_y = line_bottom_y (&it1); + + do { + move_it_by_lines (&it, 1, 1); + it1 = it; + } while (line_bottom_y (&it1) - start_y < amount_to_scroll); + } /* If STARTP is unchanged, move it down another screen line. */ if (CHARPOS (it.current.pos) == CHARPOS (startp)) -- 2.39.2