Mercurial > vim
changeset 27239:bd072d44eb2c v8.2.4148
patch 8.2.4148: deleting any mapping may cause <ScritpCmd> to fail
Commit: https://github.com/vim/vim/commit/f61c89d2e698e287a9d04c0a29f4ecc0130c2ea2
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 19 22:51:48 2022 +0000
patch 8.2.4148: deleting any mapping may cause <ScritpCmd> to fail
Problem: Deleting any mapping may cause <ScritpCmd> to not set the script
context.
Solution: Only reset last_used_map if it is the deleted mapping.
(closes #9568)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 20 Jan 2022 00:00:07 +0100 |
parents | 78460f6857a0 |
children | 13164090c14f |
files | src/getchar.c src/map.c src/proto/getchar.pro src/testdir/test_mapping.vim src/version.c |
diffstat | 5 files changed, 23 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/getchar.c +++ b/src/getchar.c @@ -3836,8 +3836,9 @@ do_cmdkey_command(int key UNUSED, int fl #if defined(FEAT_EVAL) || defined(PROTO) void -reset_last_used_map(void) +reset_last_used_map(mapblock_T *mp) { - last_used_map = NULL; + if (last_used_map == mp) + last_used_map = NULL; } #endif
--- a/src/map.c +++ b/src/map.c @@ -86,7 +86,7 @@ map_free(mapblock_T **mpp) *mpp = mp->m_next; vim_free(mp); #ifdef FEAT_EVAL - reset_last_used_map(); + reset_last_used_map(mp); #endif }
--- a/src/proto/getchar.pro +++ b/src/proto/getchar.pro @@ -53,5 +53,5 @@ void vungetc(int c); int fix_input_buffer(char_u *buf, int len); int input_available(void); int do_cmdkey_command(int key, int flags); -void reset_last_used_map(void); +void reset_last_used_map(mapblock_T *mp); /* vim: set ft=c : */
--- a/src/testdir/test_mapping.vim +++ b/src/testdir/test_mapping.vim @@ -1439,6 +1439,22 @@ func Test_map_script_cmd_finds_func() unlet g:func_called endfunc +func Test_map_script_cmd_survives_unmap() + let lines =<< trim END + vim9script + var n = 123 + nnoremap <F4> <ScriptCmd><CR> + autocmd CmdlineEnter * silent! nunmap <F4> + nnoremap <F3> :<ScriptCmd>eval setbufvar(bufnr(), "result", n)<CR> + feedkeys("\<F3>\<CR>", 'xct') + assert_equal(123, b:result) + END + call CheckScriptSuccess(lines) + + nunmap <F3> + unlet b:result +endfunc + " Test for using <script> with a map to remap characters in rhs func Test_script_local_remap() new