To: vim_dev@googlegroups.com Subject: Patch 7.4.204 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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) Files: src/getchar.c, src/testdir/test75.in, src/testdir/test75.ok *** ../vim-7.4.203/src/getchar.c 2014-02-15 16:17:02.213903042 +0100 --- src/getchar.c 2014-03-12 20:06:17.944971557 +0100 *************** *** 2206,2215 **** #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; #endif /* * Check an entry whether it matches. --- 2206,2221 ---- #ifdef FEAT_MBYTE /* Don't allow mapping the first byte(s) of a * multi-byte char. Happens when mapping ! * 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. *** ../vim-7.4.203/src/testdir/test75.in 2013-11-02 04:19:10.000000000 +0100 --- src/testdir/test75.in 2014-03-12 20:02:45.932968308 +0100 *************** *** 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