]> granicus.if.org Git - vim/commitdiff
patch 8.2.2728: special key names don't work if 'isident' is cleared v8.2.2728
authorBram Moolenaar <Bram@vim.org>
Tue, 6 Apr 2021 18:21:59 +0000 (20:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 6 Apr 2021 18:21:59 +0000 (20:21 +0200)
Problem:    Special key names don't work if 'isident' is cleared.
Solution:   Add vim_isNormalIDc() and use it for special key names.
            (closes #2389)

src/charset.c
src/misc2.c
src/proto/charset.pro
src/testdir/test_mapping.vim
src/version.c

index db0c146f88c83e06b0551195ed50c974bc317b13..10aa2e8e52541dce34df70577cbe5d0ff36256c3 100644 (file)
@@ -834,6 +834,16 @@ vim_isIDc(int c)
     return (c > 0 && c < 0x100 && (g_chartab[c] & CT_ID_CHAR));
 }
 
+/*
+ * Like vim_isIDc() but not using the 'isident' option: letters, numbers and
+ * underscore.
+ */
+    int
+vim_isNormalIDc(int c)
+{
+    return ASCII_ISALNUM(c) || c == '_';
+}
+
 /*
  * return TRUE if 'c' is a keyword character: Letters and characters from
  * 'iskeyword' option for the current buffer.
index 90b8b5893d3bd89dbbae1b5997d6bfb286a2fbfc..08e6ed93684708990f6ec36a5c61173a8f4604a8 100644 (file)
@@ -2826,7 +2826,7 @@ find_special_key(
 
     // Find end of modifier list
     last_dash = src;
-    for (bp = src + 1; *bp == '-' || vim_isIDc(*bp); bp++)
+    for (bp = src + 1; *bp == '-' || vim_isNormalIDc(*bp); bp++)
     {
        if (*bp == '-')
        {
@@ -3121,10 +3121,10 @@ get_special_key_code(char_u *name)
        for (i = 0; key_names_table[i].name != NULL; i++)
        {
            table_name = key_names_table[i].name;
-           for (j = 0; vim_isIDc(name[j]) && table_name[j] != NUL; j++)
+           for (j = 0; vim_isNormalIDc(name[j]) && table_name[j] != NUL; j++)
                if (TOLOWER_ASC(table_name[j]) != TOLOWER_ASC(name[j]))
                    break;
-           if (!vim_isIDc(name[j]) && table_name[j] == NUL)
+           if (!vim_isNormalIDc(name[j]) && table_name[j] == NUL)
                return key_names_table[i].key;
        }
     return 0;
index d364b8e49d60371d1795c46108ff3b796f798392..883f39300dbc57a07b264c080b278ad4443ad386 100644 (file)
@@ -19,6 +19,7 @@ int linetabsize(char_u *s);
 int linetabsize_col(int startcol, char_u *s);
 int win_linetabsize(win_T *wp, char_u *line, colnr_T len);
 int vim_isIDc(int c);
+int vim_isNormalIDc(int c);
 int vim_iswordc(int c);
 int vim_iswordc_buf(int c, buf_T *buf);
 int vim_iswordp(char_u *p);
index d7e4caa9112a148123096865299117a904197205..c93562b0714a89d3ccb56a5fdba59c5d773a693f 100644 (file)
@@ -445,9 +445,12 @@ func Test_list_mappings()
   " Remove default mappings
   imapclear
 
-  inoremap <C-M> CtrlM
+  " reset 'isident' to check it isn't used
+  set isident=
+  inoremap <C-m> CtrlM
   inoremap <A-S> AltS
   inoremap <S-/> ShiftSlash
+  set isident&
   call assert_equal([
        \ 'i  <S-/>       * ShiftSlash',
        \ 'i  <M-S>       * AltS',
index 0abdbe50c1fef2cf2cf11753955333a300ee1724..f041987844313f7c8b86b65107d399361c164335 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2728,
 /**/
     2727,
 /**/