From dc3bbd31a9d6c36944b7f26127d9d46b21a70c2f Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Fri, 1 Apr 2022 08:38:58 +0100 Subject: [PATCH 1/2] fix(api): delete all autocmds with the same ID --- src/nvim/autocmd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index c0a22d058c..bcac7fbc4a 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -2353,17 +2353,20 @@ int autocmd_delete_event(int group, event_T event, char_u *pat) bool autocmd_delete_id(int64_t id) { assert(id > 0); + bool success = false; + + // Note that since multiple AutoCmd objects can have the same ID, we need to do a full scan. FOR_ALL_AUEVENTS(event) { FOR_ALL_AUPATS_IN_EVENT(event, ap) { for (AutoCmd *ac = ap->cmds; ac != NULL; ac = ac->next) { if (ac->id == id) { aucmd_del(ac); - return true; + success = true; } } } } - return false; + return success; } // =========================================================================== From 3cc29b7f0d6e1661f39d28716c6a63603a93c11c Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Fri, 1 Apr 2022 09:09:30 +0100 Subject: [PATCH 2/2] fix(keymap): don't coerce false to '' --- runtime/doc/lua.txt | 2 +- runtime/lua/vim/keymap.lua | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index d13e883c28..25c5dd326e 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2025,7 +2025,7 @@ set({mode}, {lhs}, {rhs}, {opts}) *vim.keymap.set()* {rhs} string|function Right-hand side |{rhs}| of the mapping. Can also be a Lua function. If a Lua function and `opts.expr == true`, returning `nil` - or `false` is equivalent to an empty string. + is equivalent to an empty string. {opts} table A table of |:map-arguments| such as "silent". In addition to the options listed in |nvim_set_keymap()|, this table also accepts the diff --git a/runtime/lua/vim/keymap.lua b/runtime/lua/vim/keymap.lua index c193a13a7b..0986d21196 100644 --- a/runtime/lua/vim/keymap.lua +++ b/runtime/lua/vim/keymap.lua @@ -35,8 +35,8 @@ local keymap = {} --- Can also be list of modes to create mapping on multiple modes. ---@param lhs string Left-hand side |{lhs}| of the mapping. ---@param rhs string|function Right-hand side |{rhs}| of the mapping. Can also be a Lua function. ---- If a Lua function and `opts.expr == true`, returning `nil` or `false` ---- is equivalent to an empty string. +--- If a Lua function and `opts.expr == true`, returning `nil` is +--- equivalent to an empty string. -- ---@param opts table A table of |:map-arguments| such as "silent". In addition to the options --- listed in |nvim_set_keymap()|, this table also accepts the following keys: @@ -62,7 +62,7 @@ function keymap.set(mode, lhs, rhs, opts) local user_rhs = rhs rhs = function () local res = user_rhs() - if not res then + if res == nil then -- TODO(lewis6991): Handle this in C? return '' elseif opts.replace_keycodes ~= false then