]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1170: cursor off by one with block paste while 'virtualedit' "all" v8.2.1170
authorBram Moolenaar <Bram@vim.org>
Fri, 10 Jul 2020 18:24:07 +0000 (20:24 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 10 Jul 2020 18:24:07 +0000 (20:24 +0200)
Problem:    Cursor off by one with block paste while 'virtualedit' is "all".
Solution:   Adjust condition. (Hugo Gualandi, closes #6430)

src/register.c
src/testdir/test_registers.vim
src/version.c

index 9d4354aff2b87f4e2a90b5d305d6a40ba0cd21e6..47fcd73824891f876f12987974b73002d567f7d1 100644 (file)
@@ -1764,7 +1764,7 @@ do_put(
        {
            if (dir == FORWARD && c == NUL)
                ++col;
-           if (dir != FORWARD && c != NUL)
+           if (dir != FORWARD && c != NUL && curwin->w_cursor.coladd > 0)
                ++curwin->w_cursor.col;
            if (c == TAB)
            {
index d92ad977f1fe6084018abe5b873772dcfc31e641..242dfd4183e887875e56ad7fcf6c49672577b1ec 100644 (file)
@@ -659,4 +659,22 @@ func Test_clipboard_nul()
   bwipe!
 endfunc
 
+func Test_ve_blockpaste()
+  new
+  set ve=all
+  0put =['QWERTZ','ASDFGH']
+  call cursor(1,1)
+  exe ":norm! \<C-V>3ljdP"
+  call assert_equal(1, col('.'))
+  call assert_equal(getline(1, 2), ['QWERTZ', 'ASDFGH'])
+  call cursor(1,1)
+  exe ":norm! \<C-V>3ljd"
+  call cursor(1,1)
+  norm! $3lP
+  call assert_equal(5, col('.'))
+  call assert_equal(getline(1, 2), ['TZ  QWER', 'GH  ASDF'])
+  set ve&vim
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 88bd908c65fbd9747f7d174d168410ea42a2e7eb..73d456001471e75ce54464e33d469459262b0bfc 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1170,
 /**/
     1169,
 /**/