# HG changeset patch # User Christian Brabandt # Date 1485280806 -3600 # Node ID d564e73ff9ee694ebbfdf150f32d4c7af0695d20 # Parent 77215f362b1079dccbd9f88f926f5cb93c2e394a patch 8.0.0231: bracketed paste mode is not tested commit https://github.com/vim/vim/commit/076e502199b19e6141e4c1e659ff3f21b71934e1 Author: Bram Moolenaar Date: Tue Jan 24 18:58:30 2017 +0100 patch 8.0.0231: bracketed paste mode is not tested Problem: There are no tests for bracketed paste mode. Solution: Add a test. Fix repeating with "normal .". diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -2147,6 +2147,7 @@ test_arglist \ test_options \ test_packadd \ test_partial \ + test_paste \ test_perl \ test_popup \ test_profile \ @@ -2161,9 +2162,9 @@ test_arglist \ test_searchpos \ test_set \ test_signs \ + test_smartindent \ test_sort \ test_source_utf8 \ - test_smartindent \ test_startup \ test_startup_utf8 \ test_stat \ diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -463,7 +463,10 @@ edit( else #endif { - AppendCharToRedobuff(cmdchar); + if (cmdchar == K_PS) + AppendCharToRedobuff('a'); + else + AppendCharToRedobuff(cmdchar); if (cmdchar == 'g') /* "gI" command */ AppendCharToRedobuff('I'); else if (cmdchar == 'r') /* "r" command */ @@ -9502,8 +9505,10 @@ bracketed_paste(paste_mode_T mode, int d if (idx == 1 && (c == CAR || c == K_KENTER || c == NL)) ins_eol(c); else + { ins_char_bytes(buf, idx); - AppendToRedobuffLit(buf, idx); + AppendToRedobuffLit(buf, idx); + } } break; diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -173,6 +173,7 @@ NEW_TESTS = test_arglist.res \ test_nested_function.res \ test_netbeans.res \ test_normal.res \ + test_paste.res \ test_packadd.res \ test_perl.res \ test_profile.res \ diff --git a/src/testdir/test_paste.vim b/src/testdir/test_paste.vim new file mode 100644 --- /dev/null +++ b/src/testdir/test_paste.vim @@ -0,0 +1,41 @@ +" Tests for bracketed paste. + +" Bracketed paste only works with "xterm". +set term=xterm + +func Test_paste_normal_mode() + new + call setline(1, ['a', 'b', 'c']) + 2 + call feedkeys("\[200~foo\bar\[201~", 'xt') + call assert_equal('bfoo', getline(2)) + call assert_equal('bar', getline(3)) + call assert_equal('c', getline(4)) + + normal . + call assert_equal('barfoo', getline(3)) + call assert_equal('bar', getline(4)) + call assert_equal('c', getline(5)) + bwipe! +endfunc + +func Test_paste_insert_mode() + new + call setline(1, ['a', 'b', 'c']) + 2 + call feedkeys("i\[200~foo\bar\[201~ done\", 'xt') + call assert_equal('foo', getline(2)) + call assert_equal('bar doneb', getline(3)) + call assert_equal('c', getline(4)) + + normal . + call assert_equal('bar donfoo', getline(3)) + call assert_equal('bar doneeb', getline(4)) + call assert_equal('c', getline(5)) + bwipe! +endfunc + +func Test_paste_cmdline() + call feedkeys(":a\[200~foo\bar\[201~b\\"\", 'xt') + call assert_equal("\"afoo\barb", getreg(':')) +endfunc diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 231, +/**/ 230, /**/ 229,