-- Base rekey function.
local function rekey(t, key, command)
	vim.api.nvim_set_keymap(t, key, command, { noremap = true })
end

-- Base remap function.
local function remap(t, key, command)
	vim.api.nvim_set_keymap(t, key, command, { noremap = false })
end

-- Rekey in normal mode.
function rekey_normal(key, command)
	rekey("n", key, command)
end

-- Rekey in input mode.
function rekey_input(key, command)
	rekey("i", key, command)
end

-- Rekey in visual mode.
function rekey_visual(key, command)
	rekey("v", key, command)
end

-- Rekey in terminal mode.
function rekey_terminal(key, command)
	rekey("t", key, command)
end

-- Remap in normal mode.
function remap_normal(key, command)
	remap("n", key, command)
end

-- Remap in input mode.
function remap_input(key, command)
	remap("i", key, command)
end

-- Remap in visual mode.
function remap_visual(key, command)
	remap("v", key, command)
end

-- Remap in terminal mode.
function remap_terminal(key, command)
	remap("t", key, command)
end