summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-02-02 22:21:29 +0100
committerBram Moolenaar <Bram@vim.org>2017-02-02 22:21:29 +0100
commitfd8983b09c64d9bfa8a4bdc16d72c55fbb22b4dc (patch)
tree1f3d14352db76c73da522a541affc15ca51b15a7
parent7a073549a3b1e72037a4e98ceb406d057ac9ba50 (diff)
downloadvim-git-fd8983b09c64d9bfa8a4bdc16d72c55fbb22b4dc.tar.gz
patch 8.0.0296: bracketed paste can only append, not insertv8.0.0296
Problem: Bracketed paste can only append, not insert. Solution: When the cursor is in the first column insert the text.
-rw-r--r--runtime/doc/term.txt9
-rw-r--r--src/normal.c7
-rw-r--r--src/testdir/test_paste.vim26
-rw-r--r--src/version.c2
4 files changed, 37 insertions, 7 deletions
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index b46b39985..0bfe4eb0b 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -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
diff --git a/src/normal.c b/src/normal.c
index 7bae34ed2..3012bf3b7 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -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 */
diff --git a/src/testdir/test_paste.vim b/src/testdir/test_paste.vim
index 996177142..f5deb7d6b 100644
--- a/src/testdir/test_paste.vim
+++ b/src/testdir/test_paste.vim
@@ -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()
diff --git a/src/version.c b/src/version.c
index 4dc4cd81d..d7d3948e6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 296,
+/**/
295,
/**/
294,