diff options
-rw-r--r-- | src/nvim/move.c | 4 | ||||
-rw-r--r-- | test/functional/legacy/scroll_opt_spec.lua | 102 | ||||
-rw-r--r-- | test/old/testdir/test_scroll_opt.vim | 33 |
3 files changed, 102 insertions, 37 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c index c9b7ba4ae0..9e8abbcd96 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -415,6 +415,8 @@ void update_topline(win_T *wp) // When 'smoothscroll' is not set, should reset w_skipcol. if (!wp->w_p_sms) { reset_skipcol(wp); + } else if (wp->w_skipcol != 0) { + redraw_later(wp, UPD_SOME_VALID); } // May need to set w_skipcol when cursor in w_topline. @@ -659,7 +661,7 @@ static void curs_rows(win_T *wp) i--; // hold at inserted lines } } - if (valid && (lnum != wp->w_topline || !win_may_fill(wp))) { + if (valid && (lnum != wp->w_topline || (wp->w_skipcol == 0 && !win_may_fill(wp)))) { lnum = wp->w_lines[i].wl_lastlnum + 1; // Cursor inside folded lines, don't count this row if (lnum > wp->w_cursor.lnum) { diff --git a/test/functional/legacy/scroll_opt_spec.lua b/test/functional/legacy/scroll_opt_spec.lua index 056262939b..cd4c2fda8b 100644 --- a/test/functional/legacy/scroll_opt_spec.lua +++ b/test/functional/legacy/scroll_opt_spec.lua @@ -422,42 +422,15 @@ describe('smoothscroll', function() | ]]) feed('j') - screen:expect([[ - Line with some text with some text with | - some text with some text with some text | - with some text with some text | - ^Line with some text with some text with | - some text with some text with some text | - with some text with some text | - @ | - | - ]]) + screen:expect_unchanged() -- moving cursor down - whole bottom line shows feed('<C-E>j') - screen:expect([[ - <<<h some text with some text | - Line with some text with some text with | - some text with some text with some text | - with some text with some text | - ^Line with some text with some text with | - some text with some text with some text | - with some text with some text | - | - ]]) + screen:expect_unchanged() feed('G') - -- FIXME: different from vim onwards, this had in incorrect cursor position - -- in vim but we show an eob line. - screen:expect([[ - <<<h some text with some text | - Line with some text with some text with | - some text with some text with some text | - with some text with some text | - Line with some text with some text with | - some text with some text with some text | - ^with some text with some text | - | - ]]) - -- moving cursor up right after the >>> marker - no need to show whole line + screen:expect_unchanged() + feed('4<C-Y>G') + screen:expect_unchanged() + -- moving cursor up right after the <<< marker - no need to show whole line feed('2gj3l2k') screen:expect([[ <<<^h some text with some text | @@ -469,7 +442,7 @@ describe('smoothscroll', function() with some text with some text | | ]]) - -- moving cursor up where the >>> marker is - whole top line shows + -- moving cursor up where the <<< marker is - whole top line shows feed('2j02k') screen:expect([[ ^Line with some text with some text with | @@ -805,6 +778,67 @@ describe('smoothscroll', function() ]]) end) + -- oldtest: Test_smoothscroll_incsearch() + it("does not reset skipcol when doing incremental search on the same word", function() + screen:try_resize(40, 8) + screen:set_default_attr_ids({ + [1] = {foreground = Screen.colors.Brown}, + [2] = {foreground = Screen.colors.Blue1, bold = true}, + [3] = {background = Screen.colors.Yellow1}, + [4] = {reverse = true}, + }) + exec([[ + set smoothscroll number scrolloff=0 incsearch + call setline(1, repeat([''], 20)) + call setline(11, repeat('a', 100)) + call setline(14, 'bbbb') + ]]) + feed('/b') + screen:expect([[ + {2:<<<}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | + {1: 12 } | + {1: 13 } | + {1: 14 }{4:b}{3:bbb} | + {1: 15 } | + {1: 16 } | + {1: 17 } | + /b^ | + ]]) + feed('b') + screen:expect([[ + {2:<<<}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | + {1: 12 } | + {1: 13 } | + {1: 14 }{4:bb}{3:bb} | + {1: 15 } | + {1: 16 } | + {1: 17 } | + /bb^ | + ]]) + feed('b') + screen:expect([[ + {2:<<<}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | + {1: 12 } | + {1: 13 } | + {1: 14 }{4:bbb}b | + {1: 15 } | + {1: 16 } | + {1: 17 } | + /bbb^ | + ]]) + feed('b') + screen:expect([[ + {2:<<<}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | + {1: 12 } | + {1: 13 } | + {1: 14 }{4:bbbb} | + {1: 15 } | + {1: 16 } | + {1: 17 } | + /bbbb^ | + ]]) + end) + it("works with virt_lines above and below", function() screen:try_resize(55, 7) exec([=[ diff --git a/test/old/testdir/test_scroll_opt.vim b/test/old/testdir/test_scroll_opt.vim index 74c2de81aa..5ac80764b5 100644 --- a/test/old/testdir/test_scroll_opt.vim +++ b/test/old/testdir/test_scroll_opt.vim @@ -257,11 +257,14 @@ func Test_smoothscroll_wrap_scrolloff_zero() call term_sendkeys(buf, "G") call VerifyScreenDump(buf, 'Test_smooth_wrap_4', {}) - " moving cursor up right after the >>> marker - no need to show whole line + call term_sendkeys(buf, "4\<C-Y>G") + call VerifyScreenDump(buf, 'Test_smooth_wrap_4', {}) + + " moving cursor up right after the <<< marker - no need to show whole line call term_sendkeys(buf, "2gj3l2k") call VerifyScreenDump(buf, 'Test_smooth_wrap_5', {}) - " moving cursor up where the >>> marker is - whole top line shows + " moving cursor up where the <<< marker is - whole top line shows call term_sendkeys(buf, "2j02k") call VerifyScreenDump(buf, 'Test_smooth_wrap_6', {}) @@ -705,4 +708,30 @@ func Test_smoothscroll_eob() call StopVimInTerminal(buf) endfunc +" skipcol should not reset when doing incremental search on the same word +func Test_smoothscroll_incsearch() + CheckScreendump + + let lines =<< trim END + set smoothscroll number scrolloff=0 incsearch + call setline(1, repeat([''], 20)) + call setline(11, repeat('a', 100)) + call setline(14, 'bbbb') + END + call writefile(lines, 'XSmoothIncsearch', 'D') + let buf = RunVimInTerminal('-S XSmoothIncsearch', #{rows: 8, cols:40}) + + call term_sendkeys(buf, "/b") + call VerifyScreenDump(buf, 'Test_smooth_incsearch_1', {}) + call term_sendkeys(buf, "b") + call VerifyScreenDump(buf, 'Test_smooth_incsearch_2', {}) + call term_sendkeys(buf, "b") + call VerifyScreenDump(buf, 'Test_smooth_incsearch_3', {}) + call term_sendkeys(buf, "b") + call VerifyScreenDump(buf, 'Test_smooth_incsearch_4', {}) + call term_sendkeys(buf, "\<CR>") + + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab |