You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nvim-libmodal/lua/libmodal/init.lua

70 lines
2.2 KiB
Lua

-- TODO: remove the __index here after a period of time to let people remove `libmodal.Layer` from their configurations
return setmetatable(
{
layer =
{
--- enter a new layer.
--- @param keymap table the keymaps (e.g. `{n = {gg = {rhs = 'G', silent = true}}}`)
--- @param exit_char? string a character which can be used to exit the layer from normal mode.
--- @return fun()|nil exit a function to exit the layer, or `nil` if `exit_char` is passed
enter = function(keymap, exit_char)
local layer = require('libmodal.src.Layer').new(keymap)
layer:enter()
if exit_char then
layer:map('n', exit_char, function() layer:exit() end, {})
else
return function() layer:exit() end
end
end,
--- create a new layer.
--- @param keymap table the keymaps (e.g. `{n = {gg = {rhs = 'G', silent = true}}}`)
--- @return libmodal.Layer
new = function(keymap)
return require('libmodal.src.Layer').new(keymap)
end,
},
mode =
{
--- enter a mode.
--- @param name string the name of the mode.
--- @param instruction fun()|string|table a Lua function, keymap dictionary, Vimscript command.
enter = function(name, instruction, supress_exit)
require('libmodal.src.Mode').new(name, instruction, supress_exit):enter()
end
},
prompt =
{
--- enter a prompt.
--- @param name string the name of the prompt
--- @param instruction fun()|{[string]: fun()|string} what to do with user input
--- @param user_completions? string[] a list of possible inputs, provided by the user
enter = function(name, instruction, user_completions)
require('libmodal.src.Prompt').new(name, instruction, user_completions):enter()
end
}
},
{
__index = function(tbl, key)
if key ~= 'Layer' then
return rawget(tbl, key)
else
if vim.deprecate then
vim.deprecate('`libmodal.Layer`', '`libmodal.layer`', '4.0.0', 'nvim-libmodal')
else
vim.notify_once(
'`libmodal.Layer` is deprecated in favor of `libmodal.layer`. It will work FOR NOW, but uncapitalize that `L` please :)',
vim.log.levels.WARN,
{title = 'nvim-libmodal'}
)
end
return rawget(tbl, 'layer')
end
end,
}
)