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:
27
src/move.c
27
src/move.c
@@ -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);
|
||||
|
Reference in New Issue
Block a user