diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-07 22:09:46 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-04-07 22:09:46 +0100 |
commit | bfc7cbd1d44e53e844a079d8ad16ae990dad664d (patch) | |
tree | 48b6f03687d9f05e58fd1378dac657c506e79ffc | |
parent | b6ebe5af74a965d703eb8ee66a07c97b0bbe6e58 (diff) | |
download | vim-git-bfc7cbd1d44e53e844a079d8ad16ae990dad664d.tar.gz |
patch 9.0.1442: mapset() does not restore non-script contextv9.0.1442
Problem: mapset() does not restore non-script context.
Solution: Also accept negative sid. (closes #12132)
-rw-r--r-- | src/map.c | 6 | ||||
-rw-r--r-- | src/testdir/test_map_functions.vim | 23 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 28 insertions, 3 deletions
@@ -227,7 +227,7 @@ map_add( int is_abbr, #ifdef FEAT_EVAL int expr, - scid_T sid, // -1 to use current_sctx + scid_T sid, // 0 to use current_sctx int scriptversion, linenr_T lnum, #endif @@ -266,7 +266,7 @@ map_add( mp->m_simplified = simplified; #ifdef FEAT_EVAL mp->m_expr = expr; - if (sid > 0) + if (sid != 0) { mp->m_script_ctx.sc_sid = sid; mp->m_script_ctx.sc_lnum = lnum; @@ -924,7 +924,7 @@ do_map( if (map_add(map_table, abbr_table, keys, rhs, orig_rhs, noremap, nowait, silent, mode, abbrev, #ifdef FEAT_EVAL - expr, /* sid */ -1, /* scriptversion */ 0, /* lnum */ 0, + expr, /* sid */ 0, /* scriptversion */ 0, /* lnum */ 0, #endif keyround1_simplified) == FAIL) { diff --git a/src/testdir/test_map_functions.vim b/src/testdir/test_map_functions.vim index a750cd79c..d76c79cb8 100644 --- a/src/testdir/test_map_functions.vim +++ b/src/testdir/test_map_functions.vim @@ -1,6 +1,8 @@ " Tests for maparg(), mapcheck(), mapset(), maplist() " Also test utf8 map with a 0x80 byte. +source shared.vim + func s:SID() return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$')) endfunc @@ -490,7 +492,28 @@ func Test_map_restore() call Check_ctrlb_map(dsimp, 0) nunmap <C-B> +endfunc +" Test restoring the script context of a mapping +func Test_map_restore_sid() + let after =<< trim [CODE] + call assert_equal("\tLast set from --cmd argument", + \ execute('verbose nmap ,n')->trim()->split("\n")[-1]) + let d = maparg(',n', 'n', 0, 1) + nunmap ,n + call assert_equal('No mapping found', + \ execute('verbose nmap ,n')->trim()->split("\n")[-1]) + call mapset('n', 0, d) + call assert_equal("\tLast set from --cmd argument", + \ execute('verbose nmap ,n')->trim()->split("\n")[-1]) + call writefile(v:errors, 'Xresult') + qall! + [CODE] + + if RunVim([], after, '--clean --cmd "nmap ,n <Nop>"') + call assert_equal([], readfile('Xresult')) + endif + call delete('Xresult') endfunc def Test_maplist() diff --git a/src/version.c b/src/version.c index 856eb4666..192d58278 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1442, +/**/ 1441, /**/ 1440, |