]> granicus.if.org Git - vim/commitdiff
patch 9.0.0341: mapset() does not restore <Nop> mapping properly v9.0.0341
authorzeertzjq <zeertzjq@outlook.com>
Wed, 31 Aug 2022 15:40:17 +0000 (16:40 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 31 Aug 2022 15:40:17 +0000 (16:40 +0100)
Problem:    mapset() does not restore <Nop> mapping properly.
Solution:   Use an empty string for <Nop>. (closes #11022)

src/map.c
src/testdir/test_map_functions.vim
src/version.c

index f870b96831109cd43e1ea5547580898d6173f10a..140cbc84f8399feeacf2ebd441ebcb51152535e4 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -2658,7 +2658,10 @@ f_mapset(typval_T *argvars, typval_T *rettv UNUSED)
        return;
     }
     orig_rhs = rhs;
-    rhs = replace_termcodes(rhs, &arg_buf,
+    if (STRICMP(rhs, "<nop>") == 0)    // "<Nop>" means nothing
+       rhs = (char_u *)"";
+    else
+       rhs = replace_termcodes(rhs, &arg_buf,
                                        REPTERM_DO_LT | REPTERM_SPECIAL, NULL);
 
     noremap = dict_get_number(d, "noremap") ? REMAP_NONE: 0;
index 79321a02f45e07e30a435c30384f661278b597ea..5caf668c21568096bbc521489036bd4b50d0ba3a 100644 (file)
@@ -183,11 +183,11 @@ func Test_range_map()
   call assert_equal("abcd", getline(1))
 endfunc
 
-func One_mapset_test(keys)
-  exe 'nnoremap ' .. a:keys .. ' original<CR>'
+func One_mapset_test(keys, rhs)
+  exe 'nnoremap ' .. a:keys .. ' ' .. a:rhs
   let orig = maparg(a:keys, 'n', 0, 1)
   call assert_equal(a:keys, orig.lhs)
-  call assert_equal('original<CR>', orig.rhs)
+  call assert_equal(a:rhs, orig.rhs)
   call assert_equal('n', orig.mode)
 
   exe 'nunmap ' .. a:keys
@@ -197,15 +197,16 @@ func One_mapset_test(keys)
   call mapset('n', 0, orig)
   let d = maparg(a:keys, 'n', 0, 1)
   call assert_equal(a:keys, d.lhs)
-  call assert_equal('original<CR>', d.rhs)
+  call assert_equal(a:rhs, d.rhs)
   call assert_equal('n', d.mode)
 
   exe 'nunmap ' .. a:keys
 endfunc
 
 func Test_mapset()
-  call One_mapset_test('K')
-  call One_mapset_test('<F3>')
+  call One_mapset_test('K', 'original<CR>')
+  call One_mapset_test('<F3>', 'original<CR>')
+  call One_mapset_test('<F3>', '<lt>Nop>')
 
   " Check <> key conversion
   new
@@ -228,6 +229,26 @@ func Test_mapset()
 
   iunmap K
 
+  " Test that <Nop> is restored properly
+  inoremap K <Nop>
+  call feedkeys("SK\<Esc>", 'xt')
+  call assert_equal('', getline(1))
+
+  let orig = maparg('K', 'i', 0, 1)
+  call assert_equal('K', orig.lhs)
+  call assert_equal('<Nop>', orig.rhs)
+  call assert_equal('i', orig.mode)
+
+  inoremap K foo
+  call feedkeys("SK\<Esc>", 'xt')
+  call assert_equal('foo', getline(1))
+
+  call mapset('i', 0, orig)
+  call feedkeys("SK\<Esc>", 'xt')
+  call assert_equal('', getline(1))
+
+  iunmap K
+
   " Test literal <CR> using a backslash
   let cpo_save = &cpo
   set cpo-=B
index d88688277e2f19cf2d7cddda810806f4b5c6defd..2db1aa65cb21b567027221c29b9ff8ca6126db77 100644 (file)
@@ -707,6 +707,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    341,
 /**/
     340,
 /**/