# HG changeset patch # User Bram Moolenaar # Date 1648223103 -3600 # Node ID bdd6df4832ba28f2f5ddecf8b1a3f5a24d01ad81 # Parent 25015ad202cc90e41d4427b0f36fc791417a8556 patch 8.2.4626: Visual area not updated when removing sign in Visual mode Commit: https://github.com/vim/vim/commit/abb6fbd14d985b9b36a4e336d6edaf9853888ac1 Author: Bram Moolenaar Date: Fri Mar 25 15:42:27 2022 +0000 patch 8.2.4626: Visual area not updated when removing sign in Visual mode Problem: Visual area not fully updated when removing sign in Visual mode while scrolling. Solution: Adjust check for topline. (closes #10017) diff --git a/src/drawscreen.c b/src/drawscreen.c --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -1730,7 +1730,7 @@ win_update(win_T *wp) if (mod_top != 0 && wp->w_topline == mod_top && (!wp->w_lines[0].wl_valid - || wp->w_topline <= wp->w_lines[0].wl_lnum)) + || 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. diff --git a/src/testdir/dumps/Test_display_scroll_update_visual.dump b/src/testdir/dumps/Test_display_scroll_update_visual.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_display_scroll_update_visual.dump @@ -0,0 +1,8 @@ +| +0#0000e05#a8a8a8255@1>f+0#0000000#ffffff0|o+0&#e0e0e08@1| | +0&#ffffff0@53 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +| +0#0000e05#a8a8a8255@1|f+0#0000000#ffffff0|o@1| @54 +|-+2&&@1| |V|I|S|U|A|L| |L|I|N|E| |-@1| +0&&@14|2| @8|2|,|1| @10|3@1|%| diff --git a/src/testdir/test_display.vim b/src/testdir/test_display.vim --- a/src/testdir/test_display.vim +++ b/src/testdir/test_display.vim @@ -256,6 +256,27 @@ func Test_display_scroll_at_topline() call StopVimInTerminal(buf) endfunc +func Test_display_scroll_update_visual() + CheckScreendump + + let lines =<< trim END + set scrolloff=0 + call setline(1, repeat(['foo'], 10)) + call sign_define('foo', { 'text': '>' }) + call sign_place(1, 'bar', 'foo', bufnr(), { 'lnum': 2 }) + call sign_place(2, 'bar', 'foo', bufnr(), { 'lnum': 1 }) + autocmd CursorMoved * if getcurpos()[1] == 2 | call sign_unplace('bar', { 'id': 1 }) | endif + END + call writefile(lines, 'XupdateVisual.vim') + + let buf = RunVimInTerminal('-S XupdateVisual.vim', #{rows: 8, cols: 60}) + call term_sendkeys(buf, "VG7kk") + call VerifyScreenDump(buf, 'Test_display_scroll_update_visual', {}) + + call StopVimInTerminal(buf) + call delete('XupdateVisual.vim') +endfunc + " Test for 'eob' (EndOfBuffer) item in 'fillchars' func Test_eob_fillchars() " default value diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4626, +/**/ 4625, /**/ 4624,