Mercurial > vim
changeset 32222:44ba07fe943e v9.0.1442
patch 9.0.1442: mapset() does not restore non-script context
Commit: https://github.com/vim/vim/commit/bfc7cbd1d44e53e844a079d8ad16ae990dad664d
Author: zeertzjq <zeertzjq@outlook.com>
Date: Fri Apr 7 22:09:46 2023 +0100
patch 9.0.1442: mapset() does not restore non-script context
Problem: mapset() does not restore non-script context.
Solution: Also accept negative sid. (closes https://github.com/vim/vim/issues/12132)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 07 Apr 2023 23:15:04 +0200 |
parents | 622cba617159 |
children | b7a5c9aea5ac |
files | src/map.c src/testdir/test_map_functions.vim src/version.c |
diffstat | 3 files changed, 28 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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) {
--- 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()