chore: remove old keymap function

This commit is contained in:
2024-09-08 13:44:18 -04:00
parent 03ddd8b2c1
commit 2bf3b86ef9
-145
View File
@@ -741,151 +741,6 @@ function M.add_keymap(
end
end
---@function Add a new keymap with optional which-key integration
---@param lhs string|table The keybind or a table containing multiple keymaps
---@param rhs string|function|nil The function to execute when the keybind is pressed
---@param desc string|nil The description of the keybind
---@param mode string|table|nil The mode(s) in which the keybind should be added
---@param icon string|nil The icon to associate with the which-key entry (optional)
---@param group string|nil The which-key group to add the keybind to (optional)
---@param bufnr number|nil The buffer number to add the keymap to (optional, for buffer-specific mappings)
---@return boolean success True if all keymaps were successfully added, false otherwise
function M.add_km(lhs, rhs, desc, mode, icon, group, bufnr)
local function is_mode(value)
-- Identify common vim modes; this can be expanded based on requirements
local common_modes =
{ n = true, i = true, v = true, x = true, s = true, o = true, c = true }
if type(value) == "string" and #value == 1 then
return common_modes[value] ~= nil
elseif type(value) == "table" then
for _, v in ipairs(value) do
if not common_modes[v] then
return false
end
end
return true
end
return false
end
local function correct_swapped_params()
-- Try to correct common mistakes where rhs and mode might be swapped
if type(rhs) == "string" and is_mode(rhs) then
if type(mode) == "string" or type(mode) == "function" then
-- Swap them if it looks like rhs is mode and mode is rhs
---@diagnostic disable-next-line: cast-local-type
rhs, mode = mode, rhs
elseif type(mode) == "table" and is_mode(mode) then
-- Swap if rhs is mode and mode is list of modes
---@diagnostic disable-next-line: cast-local-type
rhs, mode = mode, rhs
end
elseif
type(rhs) == "function"
and type(mode) == "string"
and not is_mode(mode)
then
-- This checks if mode is actually an rhs-like string or command
rhs, mode = mode, rhs
end
end
-- Attempt to correct any common parameter swapping issues
correct_swapped_params()
-- Helper function to set keymaps using native functions
local function set_keymap(
keymap_lhs,
keymap_rhs,
keymap_desc,
keymap_mode,
keymap_bufnr
)
if keymap_bufnr then
vim.api.nvim_buf_set_keymap(
keymap_bufnr,
keymap_mode,
keymap_lhs,
keymap_rhs,
{ desc = keymap_desc }
)
else
vim.keymap.set(
keymap_mode,
keymap_lhs,
keymap_rhs,
{ desc = keymap_desc }
)
end
end
-- Determine if which-key is available and should be used
local use_which_key = M.is_installed
and M.is_installed("which-key.nvim")
and not bufnr
-- Process a single keymap entry
---@function Helper function to process a single keymap
---@param keymap table The table containing a keymap
---@return boolean success True if the keymap was processed successfully, false otherwise
local function process_keymap(keymap)
local keymap_lhs = type(keymap) == "table" and keymap.lhs or lhs
local keymap_rhs = type(keymap) == "table" and (keymap.rhs or rhs) or rhs
local keymap_desc = type(keymap) == "table" and (keymap.desc or desc)
or desc
local keymap_mode = type(keymap) == "table" and (keymap.mode or mode)
or mode
or "n"
local keymap_icon = type(keymap) == "table" and (keymap.icon or icon)
or icon
local keymap_group = type(keymap) == "table" and (keymap.group or group)
or group
-- Use which-key if possible; fallback to native keymap functions if not
if use_which_key then
require("which-key").add({
[keymap_lhs] = {
keymap_rhs,
keymap_desc,
mode = keymap_mode,
icon = keymap_icon,
group = keymap_group,
},
})
else
-- Attempt to fall back to the native keymap functions
local success, err_msg = pcall(
set_keymap,
keymap_lhs,
keymap_rhs,
keymap_desc,
keymap_mode,
bufnr
)
if not success then
-- Notify the user about the failed mapping
M.notify(("Failed to map %s: %s"):format(keymap_lhs, err_msg), "WARN")
return false
end
end
return true
end
-- Handle the scenario where lhs is a table containing multiple keymaps
if type(lhs) == "table" then
for _, keymap in ipairs(lhs) do
if not process_keymap(keymap) then
return false
end
end
return true
else
-- Handle a single keymap entry
return process_keymap({})
end
end
---@function Helper function to remove keymaps
---@param lhs string The keybind
---@param mode string|nil The mode in which the keybind should be removed (optional)