From 30cd02301e5a55215a82cb2007a2fd631ae6fc33 Mon Sep 17 00:00:00 2001 From: oni-link Date: Thu, 10 Apr 2014 19:08:28 +0200 Subject: [PATCH] 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 --- src/getchar.c | 9 ++++++--- src/testdir/test75.in | 17 +++++++++++++++++ src/testdir/test75.ok | 1 + src/version.c | 1 + 4 files changed, 25 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 - * and then changing 'encoding'. */ - if (has_mbyte && MB_BYTE2LEN(c1) - > (*mb_ptr2len)(mp->m_keys)) + * 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. diff --git a/src/testdir/test75.in b/src/testdir/test75.in index 4bd8279a36..b7f2783f54 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