From 679b8b69fb0ee8c5249a416845054a1734815d43 Mon Sep 17 00:00:00 2001 From: Luc Sinet Date: Sat, 31 Jul 2021 14:47:31 +0200 Subject: [Refactor] Define keymapppings helpers in utils.keymap (#1176) --- lua/keymappings.lua | 44 +++++++++++++------------------------------- lua/utils/init.lua | 26 -------------------------- lua/utils/keymap.lua | 31 +++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 57 deletions(-) create mode 100644 lua/utils/keymap.lua (limited to 'lua') 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", "" }, @@ -83,33 +81,17 @@ local default_keys = { if vim.fn.has "mac" == 1 then -- TODO: fix this - default_keys.normal_mode[5][1] = "" - default_keys.normal_mode[6][1] = "" - default_keys.normal_mode[7][1] = "" - default_keys.normal_mode[8][1] = "" -end - -if lvim.leader == " " or lvim.leader == "space" then - vim.g.mapleader = " " -else - vim.g.mapleader = lvim.leader + keymaps.normal_mode[5][1] = "" + keymaps.normal_mode[6][1] = "" + keymaps.normal_mode[7][1] = "" + keymaps.normal_mode[8][1] = "" 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 and -- runs conditionally vim.cmd 'inoremap pumvisible() ? "\\" : "\\"' vim.cmd 'inoremap pumvisible() ? "\\" : "\\"' + +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 -- cgit v1.2.3