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,12 +2457,12 @@ 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)
{
// 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())
{
scroll_cursor_top(1, FALSE);
if (curwin->w_topline <= old_topline
@@ -2474,6 +2474,11 @@ onepage(int dir, long count)
#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);
return retval;

View File

@@ -1,5 +1,7 @@
" Test for folding
source view_util.vim
func PrepIndent(arg)
return [a:arg] + repeat(["\t".a:arg], 5)
endfu
@@ -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

View File

@@ -789,6 +789,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
174,
/**/
173,
/**/