To: vim_dev@googlegroups.com Subject: Patch 7.4.204 Fcc: outbox From: Bram Moolenaar <Bram@moolenaar.net> 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 ! * <M-a> 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 ! * <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. *** ../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<C-V> is<F4>foo :vnoremap <script> <buffer> <expr> <silent> bar isbar *************** *** 17,22 **** --- 20,39 ---- :map abc y<S-char-114>y :call append('$', maparg('abc')) :" + Go:" + :" Outside of the range, minimum + :inoremap <Char-0x1040> a + :call feedkeys("a\u1040\<Esc>") + :" Inside of the range, minimum + :inoremap <Char-0x103f> b + :call feedkeys("a\u103f\<Esc>") + :" Inside of the range, maximum + :inoremap <Char-0xf03f> c + :call feedkeys("a\uf03f\<Esc>") + :" Outside of the range, maximum + :inoremap <Char-0xf040> d + :call feedkeys("a\uf040\<Esc>") + :" :/^eof/+1,$w! test.out :qa! ENDTEST *** ../vim-7.4.203/src/testdir/test75.ok 2013-06-29 13:50:08.000000000 +0200 --- src/testdir/test75.ok 2014-03-12 20:02:49.780968367 +0100 *************** *** 4,6 **** --- 4,7 ---- {'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1} xrx yRy + abcd *** ../vim-7.4.203/src/version.c 2014-03-12 19:41:37.100948866 +0100 --- src/version.c 2014-03-12 20:06:43.684971951 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 204, /**/ -- If you only have a hammer, you tend to see every problem as a nail. If you only have MS-Windows, you tend to solve every problem by rebooting. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///