summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.lua6
-rw-r--r--lua/keymappings.lua44
-rw-r--r--lua/utils/init.lua26
-rw-r--r--lua/utils/keymap.lua31
4 files changed, 48 insertions, 59 deletions
diff --git a/init.lua b/init.lua
index 719b384c..92ec3d4b 100644
--- a/init.lua
+++ b/init.lua
@@ -22,8 +22,10 @@ end
require("settings").load_commands()
autocmds.define_augroups(lvim.autocommands)
-require "keymappings"
--- require("lsp").setup_default_bindings()
+local keymap = require "utils.keymap"
+local default_keymaps = require "keymappings"
+keymap.load(default_keymaps.keymaps, default_keymaps.opts)
+keymap.load(lvim.keys, default_keymaps.opts)
local plugins = require "plugins"
local plugin_loader = require("plugin-loader").init()
diff --git a/lua/keymappings.lua b/lua/keymappings.lua
index 9c0ad217..3cbe797a 100644
--- a/lua/keymappings.lua
+++ b/lua/keymappings.lua
@@ -1,14 +1,12 @@
-local utils = require "utils"
-
local opts = {
- nnoremap = { noremap = true, silent = true },
- inoremap = { noremap = true, silent = true },
- vnoremap = { noremap = true, silent = true },
- xnoremap = { noremap = true, silent = true },
- generic = { silent = true },
+ insert_mode = { noremap = true, silent = true },
+ normal_mode = { noremap = true, silent = true },
+ visual_mode = { noremap = true, silent = true },
+ visual_block_mode = { noremap = true, silent = true },
+ term_mode = { silent = true },
}
-local default_keys = {
+local keymaps = {
insert_mode = {
-- I hate escape
{ "jk", "<ESC>" },
@@ -83,33 +81,17 @@ local default_keys = {
if vim.fn.has "mac" == 1 then
-- TODO: fix this
- default_keys.normal_mode[5][1] = "<A-Up>"
- default_keys.normal_mode[6][1] = "<A-Down>"
- default_keys.normal_mode[7][1] = "<A-Left>"
- default_keys.normal_mode[8][1] = "<A-Right>"
-end
-
-if lvim.leader == " " or lvim.leader == "space" then
- vim.g.mapleader = " "
-else
- vim.g.mapleader = lvim.leader
+ keymaps.normal_mode[5][1] = "<A-Up>"
+ keymaps.normal_mode[6][1] = "<A-Down>"
+ keymaps.normal_mode[7][1] = "<A-Left>"
+ keymaps.normal_mode[8][1] = "<A-Right>"
end
-local function get_user_keys(mode)
- if lvim.keys[mode] == nil then
- return default_keys[mode]
- else
- return lvim.keys[mode]
- end
-end
-
-utils.add_keymap_normal_mode(opts.nnoremap, get_user_keys "normal_mode")
-utils.add_keymap_insert_mode(opts.inoremap, get_user_keys "insert_mode")
-utils.add_keymap_visual_mode(opts.vnoremap, get_user_keys "visual_mode")
-utils.add_keymap_visual_block_mode(opts.xnoremap, get_user_keys "visual_block_mode")
-utils.add_keymap_term_mode(opts.generic, get_user_keys "term_mode")
+vim.g.mapleader = lvim.leader == "space" and " " or lvim.leader
-- navigate tab completion with <c-j> and <c-k>
-- runs conditionally
vim.cmd 'inoremap <expr> <C-j> pumvisible() ? "\\<C-n>" : "\\<C-j>"'
vim.cmd 'inoremap <expr> <C-k> pumvisible() ? "\\<C-p>" : "\\<C-k>"'
+
+return { keymaps = keymaps, opts = opts }
diff --git a/lua/utils/init.lua b/lua/utils/init.lua
index b4c5fca1..9eb29ad8 100644
--- a/lua/utils/init.lua
+++ b/lua/utils/init.lua
@@ -110,32 +110,6 @@ function utils.is_string(t)
return type(t) == "string"
end
-function utils.add_keymap(mode, opts, keymaps)
- for _, keymap in ipairs(keymaps) do
- vim.api.nvim_set_keymap(mode, keymap[1], keymap[2], opts)
- end
-end
-
-function utils.add_keymap_normal_mode(opts, keymaps)
- utils.add_keymap("n", opts, keymaps)
-end
-
-function utils.add_keymap_visual_mode(opts, keymaps)
- utils.add_keymap("v", opts, keymaps)
-end
-
-function utils.add_keymap_visual_block_mode(opts, keymaps)
- utils.add_keymap("x", opts, keymaps)
-end
-
-function utils.add_keymap_insert_mode(opts, keymaps)
- utils.add_keymap("i", opts, keymaps)
-end
-
-function utils.add_keymap_term_mode(opts, keymaps)
- utils.add_keymap("t", opts, keymaps)
-end
-
function utils.unrequire(m)
package.loaded[m] = nil
_G[m] = nil
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