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); beginline(BL_SOL | BL_FIX);
curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL); curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL);
/* 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 // Avoid the screen jumping up and down when 'scrolloff' is non-zero.
* wrapping lines and non-wrapping line). // 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 (check_top_offset())
{ {
scroll_cursor_top(1, FALSE); scroll_cursor_top(1, FALSE);
if (curwin->w_topline <= old_topline if (curwin->w_topline <= old_topline
@@ -2474,6 +2474,11 @@ onepage(int dir, long count)
#endif #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); redraw_later(VALID);
return retval; return retval;

View File

@@ -1,5 +1,7 @@
" Test for folding " Test for folding
source view_util.vim
func PrepIndent(arg) func PrepIndent(arg)
return [a:arg] + repeat(["\t".a:arg], 5) return [a:arg] + repeat(["\t".a:arg], 5)
endfu endfu
@@ -648,3 +650,27 @@ func Test_foldopen_exception()
endtry endtry
call assert_match('E492:', a) call assert_match('E492:', a)
endfunc 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[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
174,
/**/ /**/
173, 173,
/**/ /**/