summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-01-22 20:04:51 +0100
committerBram Moolenaar <Bram@vim.org>2017-01-22 20:04:51 +0100
commitc81299684b2b9045e56525d3da3f45e8440fbf0d (patch)
tree198a55cd72839c2de1dd0a468d11e228ba8c83ee
parent6a8ede99dd76a7de92ce9f40df6198428a530dd0 (diff)
downloadvim-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/Makefile1
-rw-r--r--src/ops.c2
-rw-r--r--src/testdir/test_alot.vim1
-rw-r--r--src/testdir/test_put.vim12
-rw-r--r--src/version.c2
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 \
diff --git a/src/ops.c b/src/ops.c
index 0853fd0d0..4d01ef1c6 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -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,