summaryrefslogtreecommitdiffstats
path: root/src/getchar.c
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
commit1d9ff43f585da9dc51c65a8c64bc19b281cc73f6 (patch)
tree671ee5940a6d3c93e4b31df569b6889c81b629cc /src/getchar.c
parent8eded09bf7a1c4f7994db7ef66780a32334c2538 (diff)
updated for version 7.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)
Diffstat (limited to 'src/getchar.c')
-rw-r--r--src/getchar.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/getchar.c b/src/getchar.c
index cc30f9412c..7455c778d8 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.