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

This commit is contained in:
Luc Sinet 2021-07-31 14:47:31 +02:00 committed by GitHub
parent 49945491f9
commit 679b8b69fb
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 59 deletions

View file

@ -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()

View file

@ -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>"
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
if lvim.leader == " " or lvim.leader == "space" then
vim.g.mapleader = " "
else
vim.g.mapleader = lvim.leader
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 }

View file

@ -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
lua/utils/keymap.lua Normal file
View file

@ -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