]> granicus.if.org Git - vim/commitdiff
patch 8.0.0296: bracketed paste can only append, not insert v8.0.0296
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Feb 2017 21:21:29 +0000 (22:21 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Feb 2017 21:21:29 +0000 (22:21 +0100)
Problem:    Bracketed paste can only append, not insert.
Solution:   When the cursor is in the first column insert the text.

runtime/doc/term.txt
src/normal.c
src/testdir/test_paste.vim
src/version.c

index b46b3998519beb420e6a27983c88816eaf665de7..0bfe4eb0bf04acac9afdfb9c2674ce0d71a4663c 100644 (file)
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 8.0.  Last change: 2017 Jan 27
+*term.txt*      For Vim version 8.0.  Last change: 2017 Feb 02
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -95,7 +95,12 @@ terminal when entering "raw" mode and 't_BD' when leaving "raw" mode.  The
 terminal is then expected to put 't_PS' before pasted text and 't_PE' after
 pasted text.  This way Vim can separate text that is pasted from characters
 that are typed.  The pasted text is handled like when the middle mouse button
-is used.
+is used, it is inserted literally and not interpreted as commands.
+
+When the cursor is in the first column, the pasted text will be inserted
+before it.  Otherwise the pasted text is appended after the cursor position.
+This means one cannot paste after the first column.  Unfortunately Vim does
+not have a way to tell where the mouse pointer was.
 
 Note that in some situations Vim will not recognize the bracketed paste and
 you will get the raw text.  In other situations Vim will only get the first
index 7bae34ed2fa322cc728821a4e3123b69dca5eea4..3012bf3b72f4614bcf44425beaada833f7b9c5a9 100644 (file)
@@ -9079,8 +9079,13 @@ nv_edit(cmdarg_T *cap)
                    beginline(BL_WHITE|BL_FIX);
                break;
 
+           case K_PS:  /* Bracketed paste works like "a"ppend, unless the
+                          cursor is in the first column, then it inserts. */
+               if (curwin->w_cursor.col == 0)
+                   break;
+               /*FALLTHROUGH*/
+
            case 'a':   /* "a"ppend is like "i"nsert on the next character. */
-           case K_PS:  /* bracketed paste works like "a"ppend */
 #ifdef FEAT_VIRTUALEDIT
                /* increment coladd when in virtual space, increment the
                 * column otherwise, also to append after an unprintable char */
index 996177142129727fd823485c89895850beeaeb1e..f5deb7d6bcb1068349db936a285acc1e46104ea0 100644 (file)
@@ -8,18 +8,36 @@ set term=xterm
 
 func Test_paste_normal_mode()
   new
+  " In first column text is inserted
   call setline(1, ['a', 'b', 'c'])
-  2
+  call cursor(2, 1)
   call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
-  call assert_equal('bfoo', getline(2))
-  call assert_equal('bar', getline(3))
+  call assert_equal('foo', getline(2))
+  call assert_equal('barb', getline(3))
   call assert_equal('c', getline(4))
 
+  " When repeating text is appended
   normal .
   call assert_equal('barfoo', getline(3))
-  call assert_equal('bar', getline(4))
+  call assert_equal('barb', getline(4))
   call assert_equal('c', getline(5))
   bwipe!
+
+  " In second column text is appended
+  call setline(1, ['a', 'bbb', 'c'])
+  call cursor(2, 2)
+  call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
+  call assert_equal('bbfoo', getline(2))
+  call assert_equal('barb', getline(3))
+  call assert_equal('c', getline(4))
+
+  " In last column text is appended
+  call setline(1, ['a', 'bbb', 'c'])
+  call cursor(2, 3)
+  call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
+  call assert_equal('bbbfoo', getline(2))
+  call assert_equal('bar', getline(3))
+  call assert_equal('c', getline(4))
 endfunc
 
 func Test_paste_insert_mode()
index 4dc4cd81da4b54a091adc5d4785b6d01ff8676a2..d7d3948e6863284dfb4b14b0a680aab8f8e65dbb 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    296,
 /**/
     295,
 /**/