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
local function setup_explorer_keymaps()
-- 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, { buffer = true })
end
-- Set our mappings with high priority
for _, mapping in ipairs(M.snacks_keymaps) do
if mapping.lhs == '<leader>e' or mapping.lhs == '<leader>o' then
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, {
desc = mapping.opts.desc .. ' (high priority)',
for _, mapping in ipairs(M.snacks_keymaps or {}) do
if mapping.lhs == '<leader>e' or mapping.lhs == '<leader>E' then
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, vim.tbl_extend('force', mapping.opts, {
replace_keycodes = false,
nowait = true,
silent = true,
})
}))
end
end
end
-- 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,
callback = setup_explorer_keymaps,
})
-- Also set up the keymaps immediately
setup_explorer_keymaps()
-- Apply core keymaps
-- Set up core keymaps
for _, mapping in ipairs(core_keymaps) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply telescope keymaps
for _, mapping in ipairs(M.telescope_keymaps) do
-- Set up LSP keymaps on attach
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)
end
-- Apply diagnostic keymaps
for _, mapping in ipairs(M.diagnostic_keymaps) do
for _, mapping in ipairs(M.diagnostic_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply buffer keymaps
for _, mapping in ipairs(M.buffer_keymaps) do
for _, mapping in ipairs(M.buffer_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply dadbod keymaps
M.setup_dadbod_keymaps()
-- Apply session keymaps
M.setup_session_keymaps()
-- Apply scratch keymaps
for _, mapping in ipairs(M.scratch_keymaps) do
for _, mapping in ipairs(M.snacks_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply git signs keymaps
M.setup_gitsigns_keymaps()
for _, mapping in ipairs(M.gitsigns_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Apply leap keymaps
M.setup_leap_keymaps()
for _, mapping in ipairs(M.dadbod_keymaps or {}) do
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.snacks_keymaps) do
if mapping.lhs ~= '<leader>.' and mapping.lhs ~= '<leader>S' and
mapping.lhs ~= '<leader>e' and mapping.lhs ~= '<leader>o' then
for _, mapping in ipairs(M.session_keymaps or {}) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
end
end
-- Initialize keymaps
-- Initialize all keymaps
init_keymaps()
-- Debug command to check mappings
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 the module
return M