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.
This commit is contained in:
Eli Zaretskii 2010-06-20 21:04:30 +03:00
parent 8adb4c33da
commit 70c4cfbb3b
2 changed files with 26 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2010-06-20 Eli Zaretskii <eliz@gnu.org>
* 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 <eliz@gnu.org>
* xdisp.c (try_scrolling): Compute the limit for searching point

View file

@ -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))