changeset 10664:94db9c08e206 v8.0.0222

patch 8.0.0222: blockwise put on multi-byte character misplaced commit https://github.com/vim/vim/commit/c81299684b2b9045e56525d3da3f45e8440fbf0d Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 22 20:04:51 2017 +0100 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.
author Christian Brabandt <cb@256bit.org>
date Sun, 22 Jan 2017 20:15:04 +0100
parents 3a7291d9fd8a
children ec5868458234
files src/Makefile src/ops.c src/testdir/test_alot.vim src/testdir/test_put.vim src/version.c
diffstat 5 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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 \
--- 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)
--- 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
new file mode 100644
--- /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
--- 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,