aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick <patrick@bitscope.com>2016-07-12 11:27:56 +1000
committerJustin M. Keyes <justinkz@gmail.com>2016-07-18 11:39:40 -0400
commit8c1fb99d2d4058d2cc1decbfed89b1f73b38cef6 (patch)
tree007c237b4a9c0a2b0dd602f184bf835481668b0b
parent7563972fd9d89fcce4bab183694ab16efef122c0 (diff)
downloadrneovim-8c1fb99d2d4058d2cc1decbfed89b1f73b38cef6.tar.gz
rneovim-8c1fb99d2d4058d2cc1decbfed89b1f73b38cef6.tar.bz2
rneovim-8c1fb99d2d4058d2cc1decbfed89b1f73b38cef6.zip
vim-patch:7.4.1491 #5048
Problem: Visual-block shift breaks multi-byte characters. Solution: Compute column differently. (Yasuhiro Matsumoto) Add a test. https://github.com/vim/vim/commit/20b4f463f4ab50fa9bcc9838aa94101fa5698125
-rw-r--r--src/nvim/ops.c14
-rw-r--r--src/nvim/testdir/Makefile1
-rw-r--r--src/nvim/testdir/test_visual.vim18
-rw-r--r--src/nvim/version.c2
4 files changed, 30 insertions, 5 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 25b3b85497..e8a79fa820 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -339,10 +339,16 @@ static void shift_block(oparg_T *oap, int amount)
total += bd.pre_whitesp; /* all virtual WS up to & incl a split TAB */
ws_vcol = bd.start_vcol - bd.pre_whitesp;
if (bd.startspaces) {
- if (has_mbyte)
- bd.textstart += (*mb_ptr2len)(bd.textstart);
- else
- ++bd.textstart;
+ if (has_mbyte) {
+ if ((*mb_ptr2len)(bd.textstart) == 1) {
+ bd.textstart++;
+ } else {
+ ws_vcol = 0;
+ bd.startspaces = 0;
+ }
+ } else {
+ bd.textstart++;
+ }
}
for (; ascii_iswhite(*bd.textstart); ) {
// TODO: is passing bd.textstart for start of the line OK?
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 30f5170565..fb0079111c 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -39,6 +39,7 @@ NEW_TESTS = \
test_syntax.res \
test_timers.res \
test_viml.res \
+ test_visual.res \
test_alot.res
SCRIPTS_GUI := test16.out
diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim
new file mode 100644
index 0000000000..83bae967e2
--- /dev/null
+++ b/src/nvim/testdir/test_visual.vim
@@ -0,0 +1,18 @@
+" Tests for Visual mode
+if !has('multi_byte')
+ finish
+endif
+scriptencoding utf-8
+
+if !has('visual')
+ finish
+endif
+
+func Test_block_shift_multibyte()
+ split
+ call setline(1, ['xヹxxx', 'ヹxxx'])
+ exe "normal 1G0l\<C-V>jl>"
+ call assert_equal('x ヹxxx', getline(1))
+ call assert_equal(' ヹxxx', getline(2))
+ q!
+endfunc
diff --git a/src/nvim/version.c b/src/nvim/version.c
index d99f4dc6ba..527ef3b9ad 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -208,7 +208,7 @@ static int included_patches[] = {
// 1494,
// 1493 NA
1492,
- // 1491,
+ 1491,
// 1490 NA
// 1489 NA
// 1488 NA