(window_scroll_pixel_based): When scrolling backwards,
handle partial visible line at end of window even when we hit PT.
This commit is contained in:
parent
81c85b536e
commit
aed328bfc3
1 changed files with 16 additions and 9 deletions
25
src/window.c
25
src/window.c
|
@ -4763,6 +4763,7 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
else if (n < 0)
|
||||
{
|
||||
int charpos, bytepos;
|
||||
int partial_p;
|
||||
|
||||
/* Save our position, for the preserve_y case. */
|
||||
charpos = IT_CHARPOS (it);
|
||||
|
@ -4774,7 +4775,20 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
it.last_visible_y - this_scroll_margin - 1, -1,
|
||||
MOVE_TO_POS | MOVE_TO_Y);
|
||||
|
||||
if (IT_CHARPOS (it) == PT)
|
||||
/* Save our position, in case it's correct. */
|
||||
charpos = IT_CHARPOS (it);
|
||||
bytepos = IT_BYTEPOS (it);
|
||||
|
||||
/* See if point is on a partially visible line at the end. */
|
||||
if (it.what == IT_EOB)
|
||||
partial_p = it.current_y + it.ascent + it.descent > it.last_visible_y;
|
||||
else
|
||||
{
|
||||
move_it_by_lines (&it, 1, 1);
|
||||
partial_p = it.current_y > it.last_visible_y;
|
||||
}
|
||||
|
||||
if (charpos == PT && !partial_p)
|
||||
/* We found PT before we found the display margin, so PT is ok. */
|
||||
;
|
||||
else if (preserve_y >= 0)
|
||||
|
@ -4795,14 +4809,7 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Save our position, in case it's correct. */
|
||||
charpos = IT_CHARPOS (it);
|
||||
bytepos = IT_BYTEPOS (it);
|
||||
|
||||
/* See if point is on a partially visible line at the end. */
|
||||
move_it_by_lines (&it, 1, 1);
|
||||
|
||||
if (it.current_y > it.last_visible_y)
|
||||
if (partial_p)
|
||||
/* The last line was only partially visible, so back up two
|
||||
lines to make sure we're on a fully visible line. */
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue