Skip to content

Commit 3f60f2d

Browse files
committed
fix(keys): key handlers were not working after reload
1 parent b5d6afc commit 3f60f2d

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

lua/lazy/core/handler/init.lua

+14-7
Original file line numberDiff line numberDiff line change
@@ -67,25 +67,32 @@ function M:_add(value) end
6767
---@protected
6868
function M:_del(value) end
6969

70+
---@return string
71+
function M:key(value)
72+
return value
73+
end
74+
7075
---@param plugin LazyPlugin
7176
function M:add(plugin)
7277
for _, value in ipairs(plugin[self.type] or {}) do
73-
if not self.active[value] then
74-
self.active[value] = {}
78+
local key = self:key(value)
79+
if not self.active[key] then
80+
self.active[key] = {}
7581
self:_add(value)
7682
end
77-
self.active[value][plugin.name] = plugin.name
83+
self.active[key][plugin.name] = plugin.name
7884
end
7985
end
8086

8187
---@param plugin LazyPlugin
8288
function M:del(plugin)
8389
for _, value in ipairs(plugin[self.type] or {}) do
84-
if self.active[value] and self.active[value][plugin.name] then
85-
self.active[value][plugin.name] = nil
86-
if vim.tbl_isempty(self.active[value]) then
90+
local key = self:key(value)
91+
if self.active[key] and self.active[key][plugin.name] then
92+
self.active[key][plugin.name] = nil
93+
if vim.tbl_isempty(self.active[key]) then
8794
self:_del(value)
88-
self.active[value] = nil
95+
self.active[key] = nil
8996
end
9097
end
9198
end

lua/lazy/core/handler/keys.lua

+21-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ end
2929
---@param value string|LazyKeys
3030
function M.parse(value)
3131
local ret = vim.deepcopy(value)
32-
ret = (type(ret) == "string" and { ret } or ret) --[[@as LazyKeys]]
32+
ret = type(ret) == "string" and { ret } or ret --[[@as LazyKeys]]
3333
ret.mode = ret.mode or "n"
3434
return ret
3535
end
@@ -44,14 +44,33 @@ function M.opts(keys)
4444
return opts
4545
end
4646

47+
---@return string
48+
function M:key(value)
49+
if type(value) == "string" then
50+
return value
51+
end
52+
local mode = value.mode or { "n" }
53+
if type(mode) == "string" then
54+
mode = { mode }
55+
end
56+
---@type string
57+
local ret = value[1]
58+
if #mode > 0 then
59+
ret = table.concat(mode, ",") .. ": " .. ret
60+
end
61+
return ret
62+
end
63+
4764
---@param value string|LazyKeys
4865
function M:_add(value)
4966
local keys = M.parse(value)
5067
local lhs = keys[1]
5168
local opts = M.opts(keys)
69+
opts.noremap = true
5270
vim.keymap.set(keys.mode, lhs, function()
71+
pcall(vim.keymap.del, keys.mode, lhs)
5372
Util.track({ keys = lhs })
54-
Loader.load(self.active[value], { keys = lhs })
73+
Loader.load(self.active[self:key(value)], { keys = lhs })
5574
M.retrigger(lhs)
5675
Util.track()
5776
end, opts)

0 commit comments

Comments
 (0)