fix(keymaps): handle nil tables and cleanup initialization

- Add nil checks for all keymap tables
- Fix explorer keymap setup
- Remove unnecessary debug code
- Simplify keymap initialization
- Fix incorrect keymap references
This commit is contained in:
Adam Poniatowski 2025-02-23 14:27:50 +01:00
parent 1245a40fbc
commit 4a7be70200
1 changed files with 30 additions and 75 deletions

View File

@ -198,119 +198,74 @@ local function init_keymaps()
-- Function to set up snacks explorer keymaps -- Function to set up snacks explorer keymaps
local function setup_explorer_keymaps() local function setup_explorer_keymaps()
-- First remove any existing mappings -- First remove any existing mappings
for _, key in ipairs({ '<leader>e', '<leader>o' }) do for _, key in ipairs({ '<leader>e', '<leader>E' }) do
pcall(vim.keymap.del, 'n', key) pcall(vim.keymap.del, 'n', key)
pcall(vim.keymap.del, 'n', key, { buffer = true }) pcall(vim.keymap.del, 'n', key, { buffer = true })
end end
-- Set our mappings with high priority -- Set our mappings with high priority
for _, mapping in ipairs(M.snacks_keymaps) do for _, mapping in ipairs(M.snacks_keymaps or {}) do
if mapping.lhs == '<leader>e' or mapping.lhs == '<leader>o' then if mapping.lhs == '<leader>e' or mapping.lhs == '<leader>E' then
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, { vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, vim.tbl_extend('force', mapping.opts, {
desc = mapping.opts.desc .. ' (high priority)',
replace_keycodes = false, replace_keycodes = false,
nowait = true, nowait = true,
silent = true, silent = true,
}) }))
end end
end end
end end
-- Set up autocmds to maintain our keymaps -- Set up autocmds to maintain our keymaps
vim.api.nvim_create_autocmd({ 'VimEnter', 'BufEnter', 'FileType' }, { vim.api.nvim_create_autocmd({ 'VimEnter', 'BufEnter' }, {
group = keymap_group, group = keymap_group,
callback = setup_explorer_keymaps, callback = setup_explorer_keymaps,
}) })
-- Also set up the keymaps immediately -- Set up core keymaps
setup_explorer_keymaps()
-- Apply core keymaps
for _, mapping in ipairs(core_keymaps) do for _, mapping in ipairs(core_keymaps) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
-- Apply telescope keymaps -- Set up LSP keymaps on attach
for _, mapping in ipairs(M.telescope_keymaps) do vim.api.nvim_create_autocmd('LspAttach', {
group = keymap_group,
callback = function(args)
M.setup_lsp_keymaps(args.buf)
end,
})
-- Set up other plugin keymaps
for _, mapping in ipairs(M.telescope_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
-- Apply diagnostic keymaps for _, mapping in ipairs(M.diagnostic_keymaps or {}) do
for _, mapping in ipairs(M.diagnostic_keymaps) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
-- Apply buffer keymaps for _, mapping in ipairs(M.buffer_keymaps or {}) do
for _, mapping in ipairs(M.buffer_keymaps) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
-- Apply dadbod keymaps for _, mapping in ipairs(M.snacks_keymaps or {}) do
M.setup_dadbod_keymaps()
-- Apply session keymaps
M.setup_session_keymaps()
-- Apply scratch keymaps
for _, mapping in ipairs(M.scratch_keymaps) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
-- Apply git signs keymaps for _, mapping in ipairs(M.gitsigns_keymaps or {}) do
M.setup_gitsigns_keymaps() vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply leap keymaps for _, mapping in ipairs(M.dadbod_keymaps or {}) do
M.setup_leap_keymaps() vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply all other snacks keymaps (except scratch which is handled above) for _, mapping in ipairs(M.session_keymaps or {}) do
for _, mapping in ipairs(M.snacks_keymaps) do
if mapping.lhs ~= '<leader>.' and mapping.lhs ~= '<leader>S' and
mapping.lhs ~= '<leader>e' and mapping.lhs ~= '<leader>o' then
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts) vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end end
end end
end
-- Initialize keymaps -- Initialize all keymaps
init_keymaps() init_keymaps()
-- Debug command to check mappings -- Return the module
vim.api.nvim_create_user_command('CheckMappings', function()
print("Current buffer:", vim.api.nvim_get_current_buf())
print("\nGlobal mappings for <leader>e:")
local global_maps = vim.api.nvim_get_keymap('n')
for _, map in ipairs(global_maps) do
if map.lhs == '<leader>e' then
print(vim.inspect(map))
end
end
print("\nBuffer-local mappings for <leader>e:")
local buf_maps = vim.api.nvim_buf_get_keymap(0, 'n')
for _, map in ipairs(buf_maps) do
if map.lhs == '<leader>e' then
print(vim.inspect(map))
end
end
-- Test explorer function
print("\nTesting explorer function:")
local success, picker = pcall(require, "snacks.picker")
if success then
print("Picker module loaded")
if type(picker.explorer) == "function" then
print("Explorer function exists")
success, err = pcall(picker.explorer)
if not success then
print("Error calling explorer:", err)
end
else
print("Explorer is not a function:", type(picker.explorer))
end
else
print("Error loading picker:", picker)
end
end, {})
return M return M