From: Bram Moolenaar Date: Wed, 12 Mar 2014 19:17:51 +0000 (+0100) Subject: updated for version 7.4.204 X-Git-Tag: v7.4.204 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d9ff43f585da9dc51c65a8c64bc19b281cc73f6;p=vim 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 cc30f9412..7455c778d 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 - * and then changing 'encoding'. */ - if (has_mbyte && MB_BYTE2LEN(c1) - > (*mb_ptr2len)(mp->m_keys)) - mlen = 0; + * 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. diff --git a/src/testdir/test75.in b/src/testdir/test75.in index 4bd8279a3..b7f2783f5 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 isfoo :vnoremap