]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.0867: using \{xxx} for encoding a modifier is not nice v8.2.0867
authorBram Moolenaar <Bram@vim.org>
Sun, 31 May 2020 20:06:51 +0000 (22:06 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 31 May 2020 20:06:51 +0000 (22:06 +0200)
Problem:    Using \{xxx} for encoding a modifier is not nice.
Solution:   Use \<*xxx> instead, since it's the same as \<xxx> but producing a
            different code.

runtime/doc/eval.txt
src/misc2.c
src/testdir/test_backspace_opt.vim
src/testdir/test_mapping.vim
src/testdir/test_messages.vim
src/typval.c
src/version.c
src/vim.h

index 75936679f950fa30921a3d8145ca1df61084e20c..fb5ef738c8526ce109c07145044506ad714e8a34 100644 (file)
@@ -1353,8 +1353,8 @@ A string constant accepts these special characters:
        To use the double quote character it must be escaped: "<M-\">".
        Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as
        mentioned above.
-\{xxx} like \<xxx> but prepends a modifier instead of including it in the
-       character.  E.g. "\<C-w>" is one character 0x17 while "\{C-w}" is four
+\<*xxx>        Like \<xxx> but prepends a modifier instead of including it in the
+       character.  E.g. "\<C-w>" is one character 0x17 while "\<*C-w>" is four
        bytes: 3 for the CTRL modifier and then character "W".
 
 Note that "\xff" is stored as the byte 255, which may be invalid in some
index 61c997d824595be22f83925ee54cbfd0d0d3ec40..02fd4187ca2ce16d3908f08c0ed98f3520ba06a4 100644 (file)
@@ -2772,13 +2772,14 @@ find_special_key(
     int                modifiers;
     int                bit;
     int                key;
-    int                endchar = (flags & FSK_CURLY) ? '}' : '>';
     uvarnumber_T       n;
     int                l;
 
     src = *srcp;
-    if (src[0] != ((flags & FSK_CURLY) ? '{' : '<'))
+    if (src[0] != '<')
        return 0;
+    if (src[1] == '*')     // <*xxx>: do not simplify
+       ++src;
 
     // Find end of modifier list
     last_dash = src;
@@ -2796,15 +2797,15 @@ find_special_key(
                // Anything accepted, like <C-?>.
                // <C-"> or <M-"> are not special in strings as " is
                // the string delimiter. With a backslash it works: <M-\">
-               if (!(in_string && bp[1] == '"') && bp[l + 1] == endchar)
+               if (!(in_string && bp[1] == '"') && bp[l + 1] == '>')
                    bp += l;
                else if (in_string && bp[1] == '\\' && bp[2] == '"'
-                                                          && bp[3] == endchar)
+                                                          && bp[3] == '>')
                    bp += 2;
            }
        }
        if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
-           bp += 3;    // skip t_xx, xx may be '-' or '>'/'}'
+           bp += 3;    // skip t_xx, xx may be '-' or '>'
        else if (STRNICMP(bp, "char-", 5) == 0)
        {
            vim_str2nr(bp + 5, NULL, &l, STR2NR_ALL, NULL, NULL, 0, TRUE);
@@ -2818,7 +2819,7 @@ find_special_key(
        }
     }
 
-    if (*bp == endchar)        // found matching '>' or '}'
+    if (*bp == '>')    // found matching '>'
     {
        end_of_name = bp + 1;
 
@@ -2864,7 +2865,7 @@ find_special_key(
                    l = mb_ptr2len(last_dash + off);
                else
                    l = 1;
-               if (modifiers != 0 && last_dash[l + off] == endchar)
+               if (modifiers != 0 && last_dash[l + off] == '>')
                    key = PTR2CHAR(last_dash + off);
                else
                {
index 503643a74bb53db72ae72adc3e397355ebef97bf..149d8a8d3a242c6366f6a1dcb0acc3ddd2b546e5 100644 (file)
@@ -86,7 +86,7 @@ func Test_backspace_ctrl_u()
 
   set cpo-=<
   inoremap <c-u> <left><c-u>
-  exe "normal Avim3\{C-U}\<Esc>\<CR>"
+  exe "normal Avim3\<*C-U>\<Esc>\<CR>"
   iunmap <c-u>
   exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>"
 
@@ -96,7 +96,7 @@ func Test_backspace_ctrl_u()
   exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>"
 
   inoremap <c-u> <left><c-u>
-  exe "normal A vim7\{C-U}\{C-U}\<Esc>\<CR>"
+  exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>"
 
   call assert_equal([
         \ "1 this shouldn't be deleted",
index 7eb6e34a2b45dc442c653456ab4b2c68b19dc143..328e1cae3ef18922c45f9b2b40f53d7fe6b8f40d 100644 (file)
@@ -76,7 +76,7 @@ func Test_map_ctrl_c_insert()
   inoremap <c-c> <ctrl-c>
   cnoremap <c-c> dummy
   cunmap <c-c>
-  call feedkeys("GoTEST2: CTRL-C |\{C-C}A|\<Esc>", "xt")
+  call feedkeys("GoTEST2: CTRL-C |\<*C-C>A|\<Esc>", "xt")
   call assert_equal('TEST2: CTRL-C |<ctrl-c>A|', getline('$'))
   unmap! <c-c>
   set nomodified
@@ -85,7 +85,7 @@ endfunc
 func Test_map_ctrl_c_visual()
   " mapping of ctrl-c in Visual mode
   vnoremap <c-c> :<C-u>$put ='vmap works'
-  call feedkeys("GV\{C-C}\<CR>", "xt")
+  call feedkeys("GV\<*C-C>\<CR>", "xt")
   call assert_equal('vmap works', getline('$'))
   vunmap <c-c>
   set nomodified
@@ -235,7 +235,7 @@ endfunc
 
 func Test_map_meta_quotes()
   imap <M-"> foo
-  call feedkeys("Go-\{M-\"}-\<Esc>", "xt")
+  call feedkeys("Go-\<*M-\">-\<Esc>", "xt")
   call assert_equal("-foo-", getline('$'))
   set nomodified
   iunmap <M-">
index 5d6959b89f2cfcb81be8b9be1b4735122d6b3059..f26b8c042bb5f05f5e93e579f83a324a414f5c06 100644 (file)
@@ -306,7 +306,7 @@ endfunc
 func Test_mapping_at_hit_return_prompt()
   nnoremap <C-B> :echo "hit ctrl-b"<CR>
   call feedkeys(":ls\<CR>", "xt")
-  call feedkeys("\{C-B}", "xt")
+  call feedkeys("\<*C-B>", "xt")
   call assert_match('hit ctrl-b', Screenline(&lines - 1))
   nunmap <C-B>
 endfunc
index 95b27929b631d2ecd063e7c5441bac96874a4399..23530a5dc54b5169babe3721026a17106b54793e 100644 (file)
@@ -1285,16 +1285,13 @@ get_string_tv(char_u **arg, typval_T *rettv, int evaluate)
                          ++name;
                          break;
 
-                         // Special key, e.g.: "\<C-W>" or "\{C-W}"
+                         // Special key, e.g.: "\<C-W>"
                case '<':
-               case '{':
                          {
                              int flags = FSK_KEYCODE | FSK_IN_STRING;
 
-                             if (*p == '<')
+                             if (p[1] != '*')
                                  flags |= FSK_SIMPLIFY;
-                             else
-                                 flags |= FSK_CURLY;
                              extra = trans_special(&p, name, flags, NULL);
                              if (extra != 0)
                              {
index b9906b3fceb5421e6b5b25ebc22670e4d6a61faf..4b09557705676a0bee27634c1600b066ae7665e2 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    867,
 /**/
     866,
 /**/
index 4fc982ab6688b43a8a1c7306b4e7eb764dbd0dbb..251e190c20a78d46a2fa542b402d5af136571358 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -2666,6 +2666,5 @@ long elapsed(DWORD start_tick);
 #define FSK_KEEP_X_KEY 0x02    // don't translate xHome to Home key
 #define FSK_IN_STRING  0x04    // TRUE in string, double quote is escaped
 #define FSK_SIMPLIFY   0x08    // simplify <C-H> and <A-x>
-#define FSK_CURLY      0x10    // {C-x} instead of <C-x>
 
 #endif // VIM__H