aboutsummaryrefslogtreecommitdiff
path: root/src/getchar.c
diff options
context:
space:
mode:
authoroni-link <knil.ino@gmail.com>2014-04-10 19:08:28 +0200
committerThiago de Arruda <tpadilha84@gmail.com>2014-04-14 09:47:59 -0300
commit30cd02301e5a55215a82cb2007a2fd631ae6fc33 (patch)
treeda38edeefc87893ccaae5b1017ebf887a46c1567 /src/getchar.c
parent4fb45579b5110add5bdeab930d19d8b1cadd1490 (diff)
downloadrneovim-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/getchar.c')
-rw-r--r--src/getchar.c9
1 files changed, 6 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.