summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2014-03-12 20:17:51 +0100
committerBram Moolenaar <bram@vim.org>2014-03-12 20:17:51 +0100
commitf3d6fc2cb154c498a4c31315428fdae292e1adeb (patch)
tree1577af5f93443bdaa99ab995f59568a74bba0a44
parent138944dd21f8d9379206e907acd3442e17c25531 (diff)
downloadvim-f3d6fc2cb154c498a4c31315428fdae292e1adeb.tar.gz
updated for version 7.4.204v7.4.204v7-4-204
Problem: A mapping where the second byte is 0x80 doesn't work. Solution: Unescape before checking for incomplete multi-byte char. (Nobuhiro Takasaki)
-rw-r--r--src/getchar.c14
-rw-r--r--src/testdir/test75.in17
-rw-r--r--src/testdir/test75.ok1
-rw-r--r--src/version.c2
4 files changed, 30 insertions, 4 deletions
diff --git a/src/getchar.c b/src/getchar.c
index cc30f941..7455c778 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2206,10 +2206,16 @@ vgetorpeek(advance)
#ifdef FEAT_MBYTE
/* Don't allow mapping the first byte(s) of a
* multi-byte char. Happens when mapping
- * <M-a> and then changing 'encoding'. */
- if (has_mbyte && MB_BYTE2LEN(c1)
- > (*mb_ptr2len)(mp->m_keys))
- mlen = 0;
+ * <M-a> and then changing 'encoding'. Beware
+ * that 0x80 is escaped. */
+ {
+ char_u *p1 = mp->m_keys;
+ char_u *p2 = mb_unescape(&p1);
+
+ if (has_mbyte && p2 != NULL
+ && MB_BYTE2LEN(c1) > MB_PTR2LEN(p2))
+ mlen = 0;
+ }
#endif
/*
* Check an entry whether it matches.
diff --git a/src/testdir/test75.in b/src/testdir/test75.in
index 4bd8279a..b7f2783f 100644
--- a/src/testdir/test75.in
+++ b/src/testdir/test75.in
@@ -1,8 +1,11 @@
Tests for maparg().
+Also test utf8 map with a 0x80 byte.
STARTTEST
:so small.vim
+:so mbyte.vim
:set cpo-=<
+:set encoding=utf8
:" Test maparg() with a string result
:map foo<C-V> is<F4>foo
:vnoremap <script> <buffer> <expr> <silent> bar isbar
@@ -17,6 +20,20 @@ STARTTEST
:map abc y<S-char-114>y
:call append('$', maparg('abc'))
:"
+Go:"
+:" Outside of the range, minimum
+:inoremap <Char-0x1040> a
+:call feedkeys("a\u1040\<Esc>")
+:" Inside of the range, minimum
+:inoremap <Char-0x103f> b
+:call feedkeys("a\u103f\<Esc>")
+:" Inside of the range, maximum
+:inoremap <Char-0xf03f> c
+:call feedkeys("a\uf03f\<Esc>")
+:" Outside of the range, maximum
+:inoremap <Char-0xf040> d
+:call feedkeys("a\uf040\<Esc>")
+:"
:/^eof/+1,$w! test.out
:qa!
ENDTEST
diff --git a/src/testdir/test75.ok b/src/testdir/test75.ok
index d8f9a2aa..a2c5c5ac 100644
--- a/src/testdir/test75.ok
+++ b/src/testdir/test75.ok
@@ -4,3 +4,4 @@ is<F4>foo
{'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
xrx
yRy
+abcd
diff --git a/src/version.c b/src/version.c
index 112e168e..5a50c2e9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 204,
+/**/
203,
/**/
202,