Sfoglia il codice sorgente

[Refactor] Define keymapppings helpers in utils.keymap (#1176)

Luc Sinet 4 anni fa
parent
commit
679b8b69fb
4 ha cambiato i file con 48 aggiunte e 59 eliminazioni
  1. 4 2
      init.lua
  2. 13 31
      lua/keymappings.lua
  3. 0 26
      lua/utils/init.lua
  4. 31 0
      lua/utils/keymap.lua

+ 4 - 2
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()

+ 13 - 31
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 }

+ 0 - 26
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

+ 31 - 0
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