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