From 09e30f88cd4b47704005c41f0486a628b0b8d774 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Oct 2023 20:41:06 +0200 Subject: [PATCH] fix(keys): fixed buffer-local mappings --- lua/lazy/core/handler/keys.lua | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 5db4f0f7..35d7fb06 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -72,7 +72,7 @@ function M:_add(keys) local plugins = self.active[keys.id] -- always delete the mapping immediately to prevent recursive mappings - self:_del(keys, buf) + self:_del(keys) self.active[keys.id] = nil if plugins then @@ -81,6 +81,11 @@ function M:_add(keys) Util.track() end + -- Create the real buffer-local mapping + if keys.ft then + self:_set(keys, buf) + end + local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) -- insert instead of append the lhs vim.api.nvim_feedkeys(feed, "i", false) @@ -93,6 +98,7 @@ function M:_add(keys) }) end + -- buffer-local mappings if keys.ft then vim.api.nvim_create_autocmd("FileType", { pattern = keys.ft, @@ -102,9 +108,7 @@ function M:_add(keys) else -- Only create the mapping if its managed by lazy -- otherwise the plugin is supposed to manage it - if keys[2] then - self:_del(keys, event.buf) - end + self:_set(keys, event.buf) end end, }) @@ -113,10 +117,22 @@ function M:_add(keys) end end +-- Delete a mapping and create the real global +-- mapping when needed +---@param keys LazyKeys +function M:_del(keys) + pcall(vim.keymap.del, keys.mode, keys[1]) + -- make sure to create global mappings when needed + -- buffer-local mappings are managed by lazy + if not keys.ft then + self:_set(keys) + end +end + +-- Create a mapping if it is managed by lazy ---@param keys LazyKeys ---@param buf number? -function M:_del(keys, buf) - pcall(vim.keymap.del, keys.mode, keys[1], { buffer = buf }) +function M:_set(keys, buf) if keys[2] then local opts = M.opts(keys) opts.buffer = buf