From ec18ebcb417bb9f2afc81d247db6993eaa48701f Mon Sep 17 00:00:00 2001 From: tstsrt <41282711+tstsrt@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:30:00 +0000 Subject: fix(api): nvim_set_keymap() throws error even in pcall() #33228 Problem: When `nvim_set_keymap` tries to overwrite a `` mapping, it throws an error even when called in `pcall`. Solution: src/nvim/mapping.c:buf_do_map no longer calls `semsg`. Its callers now decide whether to ignore the error, or use `semsg` (not caught)/`api_set_error` (caught by `pcall`). --- test/functional/api/keymap_spec.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'test/functional/api/keymap_spec.lua') diff --git a/test/functional/api/keymap_spec.lua b/test/functional/api/keymap_spec.lua index acaccee4e5..2c44905274 100644 --- a/test/functional/api/keymap_spec.lua +++ b/test/functional/api/keymap_spec.lua @@ -1465,4 +1465,24 @@ describe('nvim_buf_set_keymap, nvim_buf_del_keymap', function() eq(1, exec_lua [[return GlobalCount]]) eq('\nNo mapping found', n.exec_capture('nmap ')) end) + + it('does not overwrite in mappings', function() + api.nvim_buf_set_keymap(0, 'i', 'lhs', 'rhs', {}) + eq( + 'E227: Mapping already exists for lhs', + pcall_err(api.nvim_buf_set_keymap, 0, 'i', 'lhs', 'rhs', { unique = true }) + ) + + api.nvim_buf_set_keymap(0, 'ia', 'lhs2', 'rhs2', {}) + eq( + 'E226: Abbreviation already exists for lhs2', + pcall_err(api.nvim_buf_set_keymap, 0, 'ia', 'lhs2', 'rhs2', { unique = true }) + ) + + api.nvim_set_keymap('n', 'lhs', 'rhs', {}) + eq( + 'E225: Global mapping already exists for lhs', + pcall_err(api.nvim_buf_set_keymap, 0, 'n', 'lhs', 'rhs', { unique = true }) + ) + end) end) -- cgit