To: vim_dev@googlegroups.com Subject: Patch 8.2.4867 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4867 Problem: Listing of mapping with K_SPECIAL is wrong. Solution: Adjust escaping of special characters. (closes #10351) Files: src/map.c, src/message.c, src/testdir/test_mapping.vim *** ../vim-8.2.4866/src/map.c 2022-05-04 15:40:16.032317666 +0100 --- src/map.c 2022-05-04 18:44:26.443261501 +0100 *************** *** 189,205 **** if (*mp->m_str == NUL) msg_puts_attr("", HL_ATTR(HLF_8)); else ! { ! // Remove escaping of CSI, because "m_str" is in a format to be used ! // as typeahead. ! char_u *s = vim_strsave(mp->m_str); ! if (s != NULL) ! { ! vim_unescape_csi(s); ! msg_outtrans_special(s, FALSE, 0); ! vim_free(s); ! } ! } #ifdef FEAT_EVAL if (p_verbose > 0) last_set_msg(mp->m_script_ctx); --- 189,195 ---- if (*mp->m_str == NUL) msg_puts_attr("", HL_ATTR(HLF_8)); else ! msg_outtrans_special(mp->m_str, FALSE, 0); #ifdef FEAT_EVAL if (p_verbose > 0) last_set_msg(mp->m_script_ctx); *** ../vim-8.2.4866/src/message.c 2022-03-22 20:42:09.174172862 +0000 --- src/message.c 2022-05-04 18:44:26.443261501 +0100 *************** *** 1800,1818 **** if (has_mbyte && !IS_SPECIAL(c)) { ! int len = (*mb_ptr2len)(str); ! // For multi-byte characters check for an illegal byte. ! if (MB_BYTE2LEN(*str) > len) { ! transchar_nonprint(curbuf, buf, c); ! *sp = str + 1; ! return buf; } // Since 'special' is TRUE the multi-byte character 'c' will be // processed by get_special_key_name() ! c = (*mb_ptr2char)(str); ! *sp = str + len; } else *sp = str + 1; --- 1800,1828 ---- if (has_mbyte && !IS_SPECIAL(c)) { ! char_u *p; ! *sp = str; ! // Try to un-escape a multi-byte character after modifiers. ! p = mb_unescape(sp); ! ! if (p == NULL) { ! int len = (*mb_ptr2len)(str); ! ! // Check for an illegal byte. ! if (MB_BYTE2LEN(*str) > len) ! { ! transchar_nonprint(curbuf, buf, c); ! *sp = str + 1; ! return buf; ! } ! *sp = str + len; ! p = str; } // Since 'special' is TRUE the multi-byte character 'c' will be // processed by get_special_key_name() ! c = (*mb_ptr2char)(p); } else *sp = str + 1; *** ../vim-8.2.4866/src/testdir/test_mapping.vim 2022-05-02 22:53:41.384211031 +0100 --- src/testdir/test_mapping.vim 2022-05-04 18:44:26.443261501 +0100 *************** *** 482,487 **** --- 482,507 ---- call assert_match("\tLast set from .*/test_mapping.vim line \\d\\+$", \ execute('verbose map ,n')->trim()->split("\n")[1]) + " character with K_SPECIAL byte in rhs + nmap foo … + call assert_equal(['n foo …'], + \ execute('nmap foo')->trim()->split("\n")) + + " modified character with K_SPECIAL byte in rhs + nmap foo + call assert_equal(['n foo '], + \ execute('nmap foo')->trim()->split("\n")) + + " character with K_SPECIAL byte in lhs + nmap … foo + call assert_equal(['n … foo'], + \ execute('nmap …')->trim()->split("\n")) + + " modified character with K_SPECIAL byte in lhs + nmap foo + call assert_equal(['n foo'], + \ execute('nmap ')->trim()->split("\n")) + " map to CTRL-V exe "nmap ,k \" call assert_equal(['n ,k '], *** ../vim-8.2.4866/src/version.c 2022-05-04 18:12:51.217336786 +0100 --- src/version.c 2022-05-04 18:45:36.807158600 +0100 *************** *** 748,749 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 4867, /**/ -- From "know your smileys": C=}>;*{)) Drunk, devilish chef with a toupee in an updraft, a mustache, and a double chin /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///