fix(win): duplicate keymap should take mode into account. Closes #559

This commit is contained in:
Folke Lemaitre 2025-01-16 22:01:56 +01:00
parent f7d967c515
commit 097e68fc72
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040

View file

@ -272,16 +272,23 @@ function M.new(opts)
end
---@cast spec snacks.win.Keys
local lhs = vim.fn.keytrans(Snacks.util.keycode(spec[1] or ""))
if done[lhs] then
Snacks.notify.warn(
("# Duplicate key mapping for `%s` (check case):\n```lua\n%s\n```\n```lua\n%s\n```"):format(
lhs,
vim.inspect(done[lhs]),
vim.inspect(spec)
local mode = type(spec.mode) == "table" and spec.mode or { spec.mode or "n" }
---@cast mode string[]
mode = #mode == 0 and { "n" } or mode
for _, m in ipairs(mode) do
local k = m .. ":" .. lhs
if done[k] then
Snacks.notify.warn(
("# Duplicate key mapping for `%s` mode=%s (check case):\n```lua\n%s\n```\n```lua\n%s\n```"):format(
lhs,
m,
vim.inspect(done[k]),
vim.inspect(spec)
)
)
)
end
done[k] = spec
end
done[lhs] = spec
table.insert(self.keys, spec)
end
end