1
0
forked from aniani/vim

patch 8.1.0174: after paging up and down fold line is wrong

Problem:    After paging up and down fold line is wrong.
Solution:   Correct the computation of w_topline and w_botline. (Hirohito
            Higashi)
This commit is contained in:
Bram Moolenaar
2018-07-10 15:07:15 +02:00
parent 6259e5769d
commit 907dad72ef
3 changed files with 44 additions and 11 deletions

View File

@@ -2457,22 +2457,27 @@ onepage(int dir, long count)
beginline(BL_SOL | BL_FIX);
curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL);
/*
* Avoid the screen jumping up and down when 'scrolloff' is non-zero.
* But make sure we scroll at least one line (happens with mix of long
* wrapping lines and non-wrapping line).
*/
if (retval == OK && dir == FORWARD && check_top_offset())
if (retval == OK && dir == FORWARD)
{
scroll_cursor_top(1, FALSE);
if (curwin->w_topline <= old_topline
&& old_topline < curbuf->b_ml.ml_line_count)
// Avoid the screen jumping up and down when 'scrolloff' is non-zero.
// But make sure we scroll at least one line (happens with mix of long
// wrapping lines and non-wrapping line).
if (check_top_offset())
{
curwin->w_topline = old_topline + 1;
scroll_cursor_top(1, FALSE);
if (curwin->w_topline <= old_topline
&& old_topline < curbuf->b_ml.ml_line_count)
{
curwin->w_topline = old_topline + 1;
#ifdef FEAT_FOLDING
(void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
#endif
}
}
#ifdef FEAT_FOLDING
else if (curwin->w_botline > curbuf->b_ml.ml_line_count)
(void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
#endif
}
}
redraw_later(VALID);