diff src/getchar.c @ 5718:f5120cbf16b9 v7.4.204

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)
author Bram Moolenaar <bram@vim.org>
date Wed, 12 Mar 2014 20:17:51 +0100
parents cb5683bcde03
children 50dbef5e774a
line wrap: on
line diff
--- 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.