diff options
author | oni-link <knil.ino@gmail.com> | 2014-04-10 19:08:28 +0200 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-04-14 09:47:59 -0300 |
commit | 30cd02301e5a55215a82cb2007a2fd631ae6fc33 (patch) | |
tree | da38edeefc87893ccaae5b1017ebf887a46c1567 /src | |
parent | 4fb45579b5110add5bdeab930d19d8b1cadd1490 (diff) | |
download | rneovim-30cd02301e5a55215a82cb2007a2fd631ae6fc33.tar.gz rneovim-30cd02301e5a55215a82cb2007a2fd631ae6fc33.tar.bz2 rneovim-30cd02301e5a55215a82cb2007a2fd631ae6fc33.zip |
vim-patch:7.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)
https://code.google.com/p/vim/source/detail?r=f5120cbf16b9a9c6e0fbb599a6524e05ecf11393
Diffstat (limited to 'src')
-rw-r--r-- | src/getchar.c | 9 | ||||
-rw-r--r-- | src/testdir/test75.in | 17 | ||||
-rw-r--r-- | src/testdir/test75.ok | 1 | ||||
-rw-r--r-- | src/version.c | 1 |
4 files changed, 25 insertions, 3 deletions
diff --git a/src/getchar.c b/src/getchar.c index 736d72aa6b..9776c9bada 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -1854,9 +1854,12 @@ static int vgetorpeek(int advance) /* 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)) + * <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; /* * Check an entry whether it matches. diff --git a/src/testdir/test75.in b/src/testdir/test75.in index 4bd8279a36..b7f2783f54 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 d8f9a2aada..a2c5c5ac3d 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 9de20667dd..c602d192c5 100644 --- a/src/version.c +++ b/src/version.c @@ -202,6 +202,7 @@ static char *(features[]) = { static int included_patches[] = { // Add new patch number below this line + 204, 203, //202, //201, |