]> granicus.if.org Git - vim/commitdiff
patch 8.2.1345: Redraw error when using visual block and scroll v8.2.1345
authorBram Moolenaar <Bram@vim.org>
Sat, 1 Aug 2020 17:14:13 +0000 (19:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 1 Aug 2020 17:14:13 +0000 (19:14 +0200)
Problem:    Redraw error when using visual block and scroll.
Solution:   Add check for w_topline. ( closes #6597)

src/drawscreen.c
src/testdir/dumps/Test_display_visual_block_scroll.dump [new file with mode: 0644]
src/testdir/test_display.vim
src/version.c

index faecaa44bf856e6eafa49c0063ce37c04284d978..7afcf0975427c0796eb7d9e84b7cfab9be66c44b 100644 (file)
@@ -1659,10 +1659,13 @@ win_update(win_T *wp)
 #endif
            )
     {
-       if (mod_top != 0 && wp->w_topline == mod_top)
+       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, the scrolling will be done
-           // further down.
+           // 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
diff --git a/src/testdir/dumps/Test_display_visual_block_scroll.dump b/src/testdir/dumps/Test_display_visual_block_scroll.dump
new file mode 100644 (file)
index 0000000..afb52fb
--- /dev/null
@@ -0,0 +1,7 @@
+|{+0&#e0e0e08| | +0&#ffffff0@72
+|}+0&#e0e0e08| | +0&#ffffff0@72
+|{+0&#e0e0e08| | +0&#ffffff0@72
+|f+0&#e0e0e08| | +0&#ffffff0@72
+>g| +0&#e0e0e08| +0&#ffffff0@72
+|}| @73
+|-+2&&@1| |V|I|S|U|A|L| |L|I|N|E| |-@1| +0&&@29|7| @8|1@1|,|1| @9|B|o|t| 
index ed111a585e32f51b724e3cda1995449af4098f13..1e2ed455f0b4c1367d13dba53f39bffd31d193fb 100644 (file)
@@ -220,3 +220,26 @@ func Test_unprintable_fileformats()
   call delete('Xmac.txt')
   call delete(filename)
 endfunc
+
+" Test for scrolling that modifies buffer during visual block
+func Test_visual_block_scroll()
+  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
index c6b6e8fd0236d029d8cfe7299494cf74468f592a..fb8a37ce5cb40952980755d0037cf4c7eef63379 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1345,
 /**/
     1344,
 /**/