summaryrefslogtreecommitdiff
path: root/lua/utils/keymap.lua
blob: 121a4888de981aa5c798226c2b57286a0d7fdb71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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