summaryrefslogtreecommitdiff
path: root/lua/utils/keymap.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/utils/keymap.lua')
-rw-r--r--lua/utils/keymap.lua31
1 files changed, 31 insertions, 0 deletions
diff --git a/lua/utils/keymap.lua b/lua/utils/keymap.lua
new file mode 100644
index 00000000..121a4888
--- /dev/null
+++ b/lua/utils/keymap.lua
@@ -0,0 +1,31 @@
+local M = {}
+
+local mode_adapters = {
+ insert_mode = "i",
+ normal_mode = "n",
+ term_mode = "t",
+ visual_mode = "v",
+ visual_block_mode = "x",
+}
+
+-- Load key mappings for a given mode
+-- @param mode The keymap mode, can be one of the keys of mode_adapters
+-- @param keymaps The list of key mappings
+-- @param opts The mapping options
+M.load_mode = function(mode, keymaps, opts)
+ mode = mode_adapters[mode] and mode_adapters[mode] or mode
+ for _, keymap in ipairs(keymaps) do
+ vim.api.nvim_set_keymap(mode, keymap[1], keymap[2], opts)
+ end
+end
+
+-- Load key mappings for all provided modes
+-- @param keymaps A list of key mappings for each mode
+-- @param opts The mapping options for each mode
+M.load = function(keymaps, opts)
+ for mode, mapping in pairs(keymaps) do
+ M.load_mode(mode, mapping, opts[mode])
+ end
+end
+
+return M