From: Bram Moolenaar Date: Tue, 10 Jul 2018 13:07:15 +0000 (+0200) Subject: patch 8.1.0174: after paging up and down fold line is wrong X-Git-Tag: v8.1.0174 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=907dad72ef9d29422352fb74ba156e7085a3fc71;p=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) --- diff --git a/src/move.c b/src/move.c index a56003013..b2b84868a 100644 --- a/src/move.c +++ b/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); + (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); diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim index de6688365..df4b12c8c 100644 --- a/src/testdir/test_fold.vim +++ b/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 @@ -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("\", 'xt') + call assert_equal(expect, ScreenLines(1, len(expect))[0]) + call feedkeys("\", 'xt') + call assert_equal(expect, ScreenLines(1, len(expect))[0]) + call feedkeys("\\\", 'xt') + call assert_equal(expect, ScreenLines(1, len(expect))[0]) + + set fdm& + enew! +endfunc diff --git a/src/version.c b/src/version.c index de6f550dd..6b422e670 100644 --- a/src/version.c +++ b/src/version.c @@ -789,6 +789,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 174, /**/ 173, /**/