diff options
| -rw-r--r-- | lua/lvim/config/init.lua | 10 | ||||
| -rw-r--r-- | lua/lvim/keymappings.lua | 26 | 
2 files changed, 31 insertions, 5 deletions
| diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua index c932c456..20bc4c81 100644 --- a/lua/lvim/config/init.lua +++ b/lua/lvim/config/init.lua @@ -26,15 +26,14 @@ function M:init()      lvim.database = { save_location = utils.join_paths(home_dir, ".config", "lunarvim_db"), auto_execute = 1 }    end +  lvim.keys = apply_defaults(lvim.keys, require("lvim.keymappings").get_defaults()) +    local builtins = require "lvim.core.builtins"    builtins.config { user_config_file = user_config_file }    local settings = require "lvim.config.settings"    settings.load_options() -  local default_keymaps = require("lvim.keymappings").get_defaults() -  lvim.keys = apply_defaults(lvim.keys, default_keymaps) -    local autocmds = require "lvim.core.autocmds"    lvim.autocommands = apply_defaults(lvim.autocommands, autocmds.load_augroups()) @@ -89,6 +88,9 @@ function M:load(config_path)    autocmds.define_augroups(lvim.autocommands)    vim.g.mapleader = (lvim.leader == "space" and " ") or lvim.leader + +  local default_keymaps = require("lvim.keymappings").get_defaults() +  lvim.keys = apply_defaults(lvim.keys, default_keymaps)    require("lvim.keymappings").load(lvim.keys)    local settings = require "lvim.config.settings" @@ -98,6 +100,8 @@ end  --- Override the configuration with a user provided one  -- @param config_path The path to the configuration overrides  function M:reload() +  require("lvim.keymappings").clear(lvim.keys) +    local lvim_modules = {}    for module, _ in pairs(package.loaded) do      if module:match "lvim.core" then diff --git a/lua/lvim/keymappings.lua b/lua/lvim/keymappings.lua index a57b2d36..b05d1754 100644 --- a/lua/lvim/keymappings.lua +++ b/lua/lvim/keymappings.lua @@ -24,13 +24,31 @@ local mode_adapters = {  -- Append key mappings to lunarvim's defaults for a given mode  -- @param keymaps The table of key mappings containing a list per mode (normal_mode, insert_mode, ..)  function M.append_to_defaults(keymaps) +  local default = M.get_defaults() +  lvim.keys = lvim.keys or default    for mode, mappings in pairs(keymaps) do -    for k, v in ipairs(mappings) do +    lvim.keys[mode] = lvim.keys[mode] or default[mode] +    for k, v in pairs(mappings) do        lvim.keys[mode][k] = v      end    end  end +-- Unsets all keybindings defined in keymaps +-- @param keymaps The table of key mappings containing a list per mode (normal_mode, insert_mode, ..) +function M.clear(keymaps) +  local default = M.get_defaults() +  for mode, mappings in pairs(keymaps) do +    local translated_mode = mode_adapters[mode] and mode_adapters[mode] or mode +    for key, _ in pairs(mappings) do +      -- some plugins may override default bindings that the user hasn't manually overriden +      if default[mode][key] ~= nil or (default[translated_mode] ~= nil and default[translated_mode][key] ~= nil) then +        pcall(vim.api.nvim_del_keymap, translated_mode, key) +      end +    end +  end +end +  -- Set key mappings individually  -- @param mode The keymap mode, can be one of the keys of mode_adapters  -- @param key The key of keymap @@ -41,7 +59,11 @@ function M.set_keymaps(mode, key, val)      opt = val[2]      val = val[1]    end -  vim.api.nvim_set_keymap(mode, key, val, opt) +  if val then +    vim.api.nvim_set_keymap(mode, key, val, opt) +  else +    pcall(vim.api.nvim_del_keymap, mode, key) +  end  end  -- Load key mappings for a given mode | 
