dotfiles/nvim/lua/utility.lua

48 lines
1.2 KiB
Lua

local M = {}
local def_opts = {noremap = true, silent = true}
---Loads plugin config
---@param path string
function M.plugin(path)
local loaded = require(path)
---@param meta table
---@return table
return function(meta)
return vim.tbl_extend("keep", meta, loaded)
end
end
---@class KeymapOpts
---@field [1] string? Shorthand description
---@field desc string? Description
---@field [2] number|boolean? Shorthand buffer
---@field buffer number|boolean? Buffer
---Wrapper around `vim.keymap.set`
---@param modes string|string[]
function M.curried_keymap(modes)
---@param lhs string
return function(lhs)
---@param rhs string|function
return function(rhs)
---@param opts string|KeymapOpts
return function(opts)
local supplied = type(opts)
local options
if supplied == "string" then
options = vim.tbl_extend("force", def_opts, {desc=opts})
elseif supplied == "table" then
opts.desc = opts[1] or opts.desc
opts.buffer = opts[2] or opts.buffer
opts[1], opts[2] = nil, nil
options = vim.tbl_extend("force", def_opts, opts)
end
vim.keymap.set(modes, lhs, rhs, options)
end
end
end
end
return M