Skip to content

Commit

Permalink
patch 8.1.0174: after paging up and down fold line is wrong
Browse files Browse the repository at this point in the history
Problem:    After paging up and down fold line is wrong.
Solution:   Correct the computation of w_topline and w_botline. (Hirohito
            Higashi)
  • Loading branch information
brammool committed Jul 10, 2018
1 parent 6259e57 commit 907dad7
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 11 deletions.
27 changes: 16 additions & 11 deletions src/move.c
Expand Up @@ -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);
(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);
Expand Down
26 changes: 26 additions & 0 deletions src/testdir/test_fold.vim
@@ -1,5 +1,7 @@
" Test for folding

source view_util.vim

func PrepIndent(arg)
return [a:arg] + repeat(["\t".a:arg], 5)
endfu
Expand Down Expand Up @@ -648,3 +650,27 @@ func Test_foldopen_exception()
endtry
call assert_match('E492:', a)
endfunc

func Test_fold_last_line_with_pagedown()
enew!
set fdm=manual

let expect = '+-- 11 lines: 9---'
let content = range(1,19)
call append(0, content)
normal dd9G
normal zfG
normal zt
call assert_equal('9', getline(foldclosed('.')))
call assert_equal('19', getline(foldclosedend('.')))
call assert_equal(expect, ScreenLines(1, len(expect))[0])
call feedkeys("\<C-F>", 'xt')
call assert_equal(expect, ScreenLines(1, len(expect))[0])
call feedkeys("\<C-F>", 'xt')
call assert_equal(expect, ScreenLines(1, len(expect))[0])
call feedkeys("\<C-B>\<C-F>\<C-F>", 'xt')
call assert_equal(expect, ScreenLines(1, len(expect))[0])

set fdm&
enew!
endfunc
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -789,6 +789,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
174,
/**/
173,
/**/
Expand Down

0 comments on commit 907dad7

Please sign in to comment.