From b127042b11623acb0f4d5c87f97a97f8764894f5 Mon Sep 17 00:00:00 2001 From: Sumi-Sumi Date: Mon, 31 Jul 2023 17:33:15 +0900 Subject: [PATCH] feat(keymap): Adding user overrides for keymap --- lua/core/mapping.lua | 1 + lua/keymap/bind.lua | 18 ++++++++++++++++++ lua/keymap/completion.lua | 11 +++++------ lua/keymap/editor.lua | 2 +- lua/keymap/init.lua | 18 +++++++++++------- lua/keymap/lang.lua | 2 +- lua/keymap/tool.lua | 2 +- lua/keymap/ui.lua | 12 +++++------- 8 files changed, 43 insertions(+), 23 deletions(-) diff --git a/lua/core/mapping.lua b/lua/core/mapping.lua index 2103b0f64..5dbfe7d9c 100644 --- a/lua/core/mapping.lua +++ b/lua/core/mapping.lua @@ -55,4 +55,5 @@ local core_map = { ["v|>"] = map_cmd(">gv"):with_desc("edit: Increase indent"), } +core_map = bind.override_mapping("core", core_map) bind.nvim_load_mapping(core_map) diff --git a/lua/keymap/bind.lua b/lua/keymap/bind.lua index a5c4b8dc6..1712d0546 100644 --- a/lua/keymap/bind.lua +++ b/lua/keymap/bind.lua @@ -147,6 +147,24 @@ function bind.escape_termcode(cmd_string) return vim.api.nvim_replace_termcodes(cmd_string, true, true, true) end +---@param orig table +function bind.override_mapping(name, orig) + local ok, custom = pcall(require, "user.keymap." .. name) + if ok then + if type(custom) == "table" then + for k, v in pairs(custom) do + if v == "" then + orig[k], custom[k] = nil, nil + end + end + orig = vim.tbl_extend("force", orig, custom) + elseif type(custom) == "function" then + orig = custom() + end + end + return orig +end + ---@param mapping table function bind.nvim_load_mapping(mapping) for key, value in pairs(mapping) do diff --git a/lua/keymap/completion.lua b/lua/keymap/completion.lua index 1b17e58b4..b8288a8a5 100644 --- a/lua/keymap/completion.lua +++ b/lua/keymap/completion.lua @@ -2,15 +2,13 @@ local bind = require("keymap.bind") local map_cr = bind.map_cr local map_cmd = bind.map_cmd local map_callback = bind.map_callback +local M = {} -local plug_map = { +M["plug_map"] = { ["n|"] = map_cmd("FormatToggle"):with_noremap():with_desc("Formater: Toggle format on save"), } -bind.nvim_load_mapping(plug_map) -local mapping = {} - -function mapping.lsp(buf) +M["lsp"] = function(buf) local map = { -- LSP-related keymaps, work only when event = { "InsertEnter", "LspStart" } ["n|li"] = map_cr("LspInfo"):with_buffer(buf):with_desc("lsp: Info"), @@ -34,7 +32,8 @@ function mapping.lsp(buf) ["n|ci"] = map_cr("Lspsaga incoming_calls"):with_buffer(buf):with_desc("lsp: Show incoming calls"), ["n|co"] = map_cr("Lspsaga outgoing_calls"):with_buffer(buf):with_desc("lsp: Show outgoing calls"), } + map = bind.override_mapping("lsp", map) bind.nvim_load_mapping(map) end -return mapping +return M diff --git a/lua/keymap/editor.lua b/lua/keymap/editor.lua index 58e0ac8d6..1654b790e 100644 --- a/lua/keymap/editor.lua +++ b/lua/keymap/editor.lua @@ -89,4 +89,4 @@ local plug_map = { ["n|"] = map_cu("SudaWrite"):with_silent():with_noremap():with_desc("editn: Save file using sudo"), } -bind.nvim_load_mapping(plug_map) +return plug_map diff --git a/lua/keymap/init.lua b/lua/keymap/init.lua index 412ef59ca..f3d9fc5b9 100644 --- a/lua/keymap/init.lua +++ b/lua/keymap/init.lua @@ -19,11 +19,15 @@ local plug_map = { ["n|px"] = map_cr("Lazy clean"):with_silent():with_noremap():with_nowait():with_desc("package: Clean"), } -bind.nvim_load_mapping(plug_map) - -- Plugin keymaps -require("keymap.completion") -require("keymap.editor") -require("keymap.lang") -require("keymap.tool") -require("keymap.ui") +plug_map = vim.tbl_deep_extend( + "force", + plug_map, + require("keymap.completion").plug_map, + require("keymap.editor"), + require("keymap.lang"), + require("keymap.tool"), + require("keymap.ui").plug_map +) +plug_map = bind.override_mapping("init", plug_map) +bind.nvim_load_mapping(plug_map) diff --git a/lua/keymap/lang.lua b/lua/keymap/lang.lua index 46ec703ff..e07906a7a 100644 --- a/lua/keymap/lang.lua +++ b/lua/keymap/lang.lua @@ -9,4 +9,4 @@ local plug_map = { ["n|"] = map_cr("MarkdownPreviewToggle"):with_noremap():with_silent():with_desc("tool: Preview markdown"), } -bind.nvim_load_mapping(plug_map) +return plug_map diff --git a/lua/keymap/tool.lua b/lua/keymap/tool.lua index b16a779f3..0df4158cf 100644 --- a/lua/keymap/tool.lua +++ b/lua/keymap/tool.lua @@ -199,4 +199,4 @@ local plug_map = { :with_desc("debug: Open REPL"), } -bind.nvim_load_mapping(plug_map) +return plug_map diff --git a/lua/keymap/ui.lua b/lua/keymap/ui.lua index d52e6b289..0b31a07fc 100644 --- a/lua/keymap/ui.lua +++ b/lua/keymap/ui.lua @@ -3,8 +3,9 @@ local map_cr = bind.map_cr -- local map_cu = bind.map_cu -- local map_cmd = bind.map_cmd -- local map_callback = bind.map_callback +local M = {} -local plug_map = { +M["plug_map"] = { -- Plugin: bufferline ["n|"] = map_cr("BufferLineCycleNext"):with_noremap():with_silent():with_desc("buffer: Switch to next"), ["n|"] = map_cr("BufferLineCyclePrev"):with_noremap():with_silent():with_desc("buffer: Switch to prev"), @@ -23,11 +24,7 @@ local plug_map = { ["n|"] = map_cr("BufferLineGoToBuffer 9"):with_noremap():with_silent():with_desc("buffer: Goto buffer 9"), } -bind.nvim_load_mapping(plug_map) - -local mapping = {} - -function mapping.gitsigns(buf) +M["gitsigns"] = function(buf) local actions = require("gitsigns.actions") local map = { ["n|]g"] = bind.map_callback(function() @@ -99,7 +96,8 @@ function mapping.gitsigns(buf) actions.text_object() end):with_buffer(buf), } + map = bind.override_mapping("gitsings", map) bind.nvim_load_mapping(map) end -return mapping +return M