diff options
| author | Luc Sinet <[email protected]> | 2021-07-31 14:47:31 +0200 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2021-07-31 12:47:31 +0000 | 
| commit | 679b8b69fb0ee8c5249a416845054a1734815d43 (patch) | |
| tree | b06b90142b7f97c794b93af167e6297dd3cca848 /lua | |
| parent | 49945491f9906739dcf049d1e2920d6c662b2328 (diff) | |
[Refactor] Define keymapppings helpers in utils.keymap (#1176)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/keymappings.lua | 44 | ||||
| -rw-r--r-- | lua/utils/init.lua | 26 | ||||
| -rw-r--r-- | lua/utils/keymap.lua | 31 | 
3 files changed, 44 insertions, 57 deletions
| 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 | 
