updated for version 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)
diff --git a/src/getchar.c b/src/getchar.c
index cc30f94..7455c77 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2206,10 +2206,16 @@
#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.