diff --git a/.github/workflows/lint_code.yml b/.github/workflows/lint_code.yml index 2eff9436d..ebf3a1a94 100644 --- a/.github/workflows/lint_code.yml +++ b/.github/workflows/lint_code.yml @@ -7,4 +7,4 @@ jobs: - uses: actions/checkout@v3 - uses: lunarmodules/luacheck@v1 with: - args: . --std luajit --globals vim _toggle_lazygit _command_panel --max-line-length 150 --no-config + args: . --std luajit --globals vim _toggle_lazygit _command_panel _lspkeymap_loaded_bufnr --max-line-length 150 --no-config diff --git a/lua/core/event.lua b/lua/core/event.lua index b1d8dd9ca..e88d74e85 100644 --- a/lua/core/event.lua +++ b/lua/core/event.lua @@ -14,10 +14,14 @@ function autocmd.nvim_create_augroups(definitions) end local mapping = require("keymap.completion") +_G._lspkeymap_loaded_bufnr = {} vim.api.nvim_create_autocmd("LspAttach", { - group = vim.api.nvim_create_augroup("UserLspConfig", {}), + group = vim.api.nvim_create_augroup("LspKeymapLoader", { clear = true }), callback = function(event) - mapping.lsp(event.buf) + if not _lspkeymap_loaded_bufnr[event.buf] then + mapping.lsp(event.buf) + _lspkeymap_loaded_bufnr[event.buf] = true + end end, }) diff --git a/lua/modules/configs/tool/dap/dap-keymap.lua b/lua/modules/configs/tool/dap/dap-keymap.lua index 4505e1217..495ef5cb2 100644 --- a/lua/modules/configs/tool/dap/dap-keymap.lua +++ b/lua/modules/configs/tool/dap/dap-keymap.lua @@ -5,6 +5,14 @@ local map_cr = bind.map_cr local map_cmd = bind.map_cmd local did_load_debug_mappings = false +local keymap_info_debug = { + n = { K = false }, + v = { K = false }, +} +local keymap_info_original = { + n = { K = true }, + v = { K = false }, +} local debug_keymap = { ["nv|K"] = map_cmd("lua require('dapui').eval()") :with_noremap() @@ -16,16 +24,53 @@ local original_keymap = { ["v|K"] = map_cmd(":m '<-2gv=gv"), } +local function del_keymap(mappings, keymap_info) + for key in pairs(mappings) do + local modes, keymap = key:match("([^|]*)|?(.*)") + for _, mode in ipairs(vim.split(modes, "")) do + if vim.fn.maparg(keymap, mode, false) ~= "" then + if keymap_info[mode][keymap] == true then + vim.api.nvim_buf_del_keymap(0, mode, keymap) + else + vim.api.nvim_del_keymap(mode, keymap) + end + end + end + end +end + +local function load_keymap(mappings, keymap_info) + for key, value in pairs(mappings) do + local modes, keymap = key:match("([^|]*)|?(.*)") + if type(value) == "table" then + for _, mode in ipairs(vim.split(modes, "")) do + local rhs = value.cmd + local options = value.options + if keymap_info[mode][keymap] == true then + for buf in pairs(_G._lspkeymap_loaded_bufnr) do + -- Restore lsp keymaps + vim.api.nvim_buf_set_keymap(buf, mode, keymap, rhs, options) + end + else + vim.api.nvim_set_keymap(mode, keymap, rhs, options) + end + end + end + end +end + function M.load() if not did_load_debug_mappings then - bind.nvim_load_mapping(debug_keymap) + del_keymap(original_keymap, keymap_info_original) + load_keymap(debug_keymap, keymap_info_debug) did_load_debug_mappings = true end end function M.restore() if did_load_debug_mappings then - bind.nvim_load_mapping(original_keymap) + del_keymap(debug_keymap, keymap_info_debug) + load_keymap(original_keymap, keymap_info_original) did_load_debug_mappings = false end end