summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-04-07 22:09:46 +0100
committerBram Moolenaar <Bram@vim.org>2023-04-07 22:09:46 +0100
commitbfc7cbd1d44e53e844a079d8ad16ae990dad664d (patch)
tree48b6f03687d9f05e58fd1378dac657c506e79ffc
parentb6ebe5af74a965d703eb8ee66a07c97b0bbe6e58 (diff)
downloadvim-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.c6
-rw-r--r--src/testdir/test_map_functions.vim23
-rw-r--r--src/version.c2
3 files changed, 28 insertions, 3 deletions
diff --git a/src/map.c b/src/map.c
index 7c952865e..d56895b81 100644
--- a/src/map.c
+++ b/src/map.c
@@ -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,