diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-01-22 20:04:51 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-01-22 20:04:51 +0100 |
commit | c81299684b2b9045e56525d3da3f45e8440fbf0d (patch) | |
tree | 198a55cd72839c2de1dd0a468d11e228ba8c83ee | |
parent | 6a8ede99dd76a7de92ce9f40df6198428a530dd0 (diff) | |
download | vim-c81299684b2b9045e56525d3da3f45e8440fbf0d.zip |
patch 8.0.0222: blockwise put on multi-byte character misplaced
Problem: When a multi-byte character ends in a zero byte, putting blockwise
text puts it before the character instead of after it.
Solution: Use int instead of char for the character under the cursor.
(Luchr, closes #1403) Add a test.
-rw-r--r-- | src/Makefile | 1 | ||||
-rw-r--r-- | src/ops.c | 2 | ||||
-rw-r--r-- | src/testdir/test_alot.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_put.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 17 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile index 0dcf10960..8de7104d5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2150,6 +2150,7 @@ test_arglist \ test_perl \ test_popup \ test_profile \ + test_put \ test_quickfix \ test_regexp_latin \ test_regexp_utf8 \ @@ -3550,7 +3550,7 @@ do_put( */ if (y_type == MBLOCK) { - char c = gchar_cursor(); + int c = gchar_cursor(); colnr_T endcol2 = 0; if (dir == FORWARD && c != NUL) diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim index 9a7c35dcd..2b163ae5c 100644 --- a/src/testdir/test_alot.vim +++ b/src/testdir/test_alot.vim @@ -31,6 +31,7 @@ source test_mapping.vim source test_messages.vim source test_partial.vim source test_popup.vim +source test_put.vim source test_reltime.vim source test_searchpos.vim source test_set.vim diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim new file mode 100644 index 000000000..612bdabb6 --- /dev/null +++ b/src/testdir/test_put.vim @@ -0,0 +1,12 @@ + +func Test_put_block() + if !has('multi_byte') + return + endif + new + call feedkeys("i\<C-V>u2500\<CR>x\<ESC>", 'x') + call feedkeys("\<C-V>y", 'x') + call feedkeys("gg0p", 'x') + call assert_equal("\u2500x", getline(1)) + bwipe! +endfunc diff --git a/src/version.c b/src/version.c index 5cca0342e..cae4e7dd4 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 */ /**/ + 222, +/**/ 221, /**/ 220, |