diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2020-10-07 19:52:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-07 19:52:40 -0400 |
commit | 3ea5df0f045b416c827e8fa841d01333fa0146e6 (patch) | |
tree | 4d6ad982e8715fc5ed1d3bdb7e98f123d5f433e1 /src | |
parent | 8ba5f4d19c6a2fa0de07a82867c52e68f5a757b7 (diff) | |
parent | a893593a9f54a0fbe84b467d43f11a841ecae2ee (diff) | |
download | rneovim-3ea5df0f045b416c827e8fa841d01333fa0146e6.tar.gz rneovim-3ea5df0f045b416c827e8fa841d01333fa0146e6.tar.bz2 rneovim-3ea5df0f045b416c827e8fa841d01333fa0146e6.zip |
Merge pull request #13029 from aufarg/vim-8.2.1345
[RDY] vim-patch:8.2.{1345,1488}
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/screen.c | 11 | ||||
-rw-r--r-- | src/nvim/testdir/test_display.vim | 37 |
2 files changed, 43 insertions, 5 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 3503348049..7c42f29a90 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -899,11 +899,12 @@ static void win_update(win_T *wp) || type == INVERTED || type == INVERTED_ALL) && !wp->w_botfill && !wp->w_old_botfill ) { - if (mod_top != 0 && wp->w_topline == mod_top) { - /* - * w_topline is the first changed line, the scrolling will be done - * further down. - */ + if (mod_top != 0 + && wp->w_topline == mod_top + && (!wp->w_lines[0].wl_valid + || wp->w_topline <= wp->w_lines[0].wl_lnum)) { + // w_topline is the first changed line and window is not scrolled, + // the scrolling from changed lines will be done further down. } else if (wp->w_lines[0].wl_valid && (wp->w_topline < wp->w_lines[0].wl_lnum || (wp->w_topline == wp->w_lines[0].wl_lnum diff --git a/src/nvim/testdir/test_display.vim b/src/nvim/testdir/test_display.vim index 429253a863..e853b046dc 100644 --- a/src/nvim/testdir/test_display.vim +++ b/src/nvim/testdir/test_display.vim @@ -184,3 +184,40 @@ func Test_scroll_CursorLineNr_update() call StopVimInTerminal(buf) call delete(filename) endfunc + +" Test for scrolling that modifies buffer during visual block +func Test_visual_block_scroll() + " See test/functional/legacy/visual_mode_spec.lua + CheckScreendump + + let lines =<< trim END + source $VIMRUNTIME/plugin/matchparen.vim + set scrolloff=1 + call setline(1, ['a', 'b', 'c', 'd', 'e', '', '{', '}', '{', 'f', 'g', '}']) + call cursor(5, 1) + END + + let filename = 'Xvisualblockmodifiedscroll' + call writefile(lines, filename) + + let buf = RunVimInTerminal('-S '.filename, #{rows: 7}) + call term_sendkeys(buf, "V\<C-D>\<C-D>") + + call VerifyScreenDump(buf, 'Test_display_visual_block_scroll', {}) + + call StopVimInTerminal(buf) + call delete(filename) +endfunc + +func Test_display_scroll_at_topline() + " See test/functional/legacy/display_spec.lua + CheckScreendump + + let buf = RunVimInTerminal('', #{cols: 20}) + call term_sendkeys(buf, ":call setline(1, repeat('a', 21))\<CR>") + call term_wait(buf) + call term_sendkeys(buf, "O\<Esc>") + call VerifyScreenDump(buf, 'Test_display_scroll_at_topline', #{rows: 4}) + + call StopVimInTerminal(buf) +endfunc |