forked from aniani/vim
patch 8.0.0296: bracketed paste can only append, not insert
Problem: Bracketed paste can only append, not insert. Solution: When the cursor is in the first column insert the text.
This commit is contained in:
@@ -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
|
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
|
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
|
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
|
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
|
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
|
you will get the raw text. In other situations Vim will only get the first
|
||||||
|
@@ -9079,8 +9079,13 @@ nv_edit(cmdarg_T *cap)
|
|||||||
beginline(BL_WHITE|BL_FIX);
|
beginline(BL_WHITE|BL_FIX);
|
||||||
break;
|
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 'a': /* "a"ppend is like "i"nsert on the next character. */
|
||||||
case K_PS: /* bracketed paste works like "a"ppend */
|
|
||||||
#ifdef FEAT_VIRTUALEDIT
|
#ifdef FEAT_VIRTUALEDIT
|
||||||
/* increment coladd when in virtual space, increment the
|
/* increment coladd when in virtual space, increment the
|
||||||
* column otherwise, also to append after an unprintable char */
|
* column otherwise, also to append after an unprintable char */
|
||||||
|
@@ -8,18 +8,36 @@ set term=xterm
|
|||||||
|
|
||||||
func Test_paste_normal_mode()
|
func Test_paste_normal_mode()
|
||||||
new
|
new
|
||||||
|
" In first column text is inserted
|
||||||
call setline(1, ['a', 'b', 'c'])
|
call setline(1, ['a', 'b', 'c'])
|
||||||
2
|
call cursor(2, 1)
|
||||||
call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
|
call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
|
||||||
call assert_equal('bfoo', getline(2))
|
call assert_equal('foo', getline(2))
|
||||||
call assert_equal('bar', getline(3))
|
call assert_equal('barb', getline(3))
|
||||||
call assert_equal('c', getline(4))
|
call assert_equal('c', getline(4))
|
||||||
|
|
||||||
|
" When repeating text is appended
|
||||||
normal .
|
normal .
|
||||||
call assert_equal('barfoo', getline(3))
|
call assert_equal('barfoo', getline(3))
|
||||||
call assert_equal('bar', getline(4))
|
call assert_equal('barb', getline(4))
|
||||||
call assert_equal('c', getline(5))
|
call assert_equal('c', getline(5))
|
||||||
bwipe!
|
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
|
endfunc
|
||||||
|
|
||||||
func Test_paste_insert_mode()
|
func Test_paste_insert_mode()
|
||||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
296,
|
||||||
/**/
|
/**/
|
||||||
295,
|
295,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user