From abb6fbd14d985b9b36a4e336d6edaf9853888ac1 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 25 Mar 2022 15:42:27 +0000 Subject: 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) --- src/drawscreen.c | 2 +- .../dumps/Test_display_scroll_update_visual.dump | 8 ++++++++ src/testdir/test_display.vim | 21 +++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/testdir/dumps/Test_display_scroll_update_visual.dump diff --git a/src/drawscreen.c b/src/drawscreen.c index a902397cd7..12eed8c476 100644 --- 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 index 0000000000..c174390d7b --- /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 index a2e6fafd88..a000521d0c 100644 --- 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 index 748a12f398..c13d03f2cc 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4626, /**/ 4625, /**/ -- cgit v1.2.3