From d414938163bb2dc3ba081b4067c75caff01aef7e Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sat, 23 Dec 2023 15:07:25 +0800 Subject: [PATCH] fix(mappings): fix mapset() not replacing map with backslash (cherry picked from commit 5ac9b4cddf2d43aed55e5d50b09bd4d45c2dc459) --- src/nvim/mapping.c | 2 +- test/functional/vimscript/map_functions_spec.lua | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/nvim/mapping.c b/src/nvim/mapping.c index 9bc0238672..8af4796a61 100644 --- a/src/nvim/mapping.c +++ b/src/nvim/mapping.c @@ -2253,7 +2253,7 @@ void f_mapset(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) // Delete any existing mapping for this lhs and mode. MapArguments unmap_args = MAP_ARGUMENTS_INIT; - set_maparg_lhs_rhs(lhs, strlen(lhs), "", 0, LUA_NOREF, 0, &unmap_args); + set_maparg_lhs_rhs(lhs, strlen(lhs), "", 0, LUA_NOREF, CPO_TO_CPO_FLAGS, &unmap_args); unmap_args.buffer = buffer; buf_do_map(MAPTYPE_UNMAP, &unmap_args, mode, is_abbr, curbuf); xfree(unmap_args.rhs); diff --git a/test/functional/vimscript/map_functions_spec.lua b/test/functional/vimscript/map_functions_spec.lua index ba1b4d7a76..ec7a21f35b 100644 --- a/test/functional/vimscript/map_functions_spec.lua +++ b/test/functional/vimscript/map_functions_spec.lua @@ -174,6 +174,16 @@ end) describe('mapset()', function() before_each(clear) + it('can restore mapping with backslash in lhs', function() + meths.set_keymap('n', '\\ab', 'a', {}) + eq('\nn \\ab a', exec_capture("nmap \\ab")) + local mapargs = funcs.maparg('\\ab', 'n', false, true) + meths.set_keymap('n', '\\ab', 'b', {}) + eq('\nn \\ab b', exec_capture("nmap \\ab")) + funcs.mapset('n', false, mapargs) + eq('\nn \\ab a', exec_capture("nmap \\ab")) + end) + it('can restore mapping description from the dict returned by maparg()', function() meths.set_keymap('n', 'lhs', 'rhs', {desc = 'map description'}) eq('\nn lhs rhs\n map description', exec_capture("nmap lhs"))