Files
lz.n/lua/lz/n/handler/init.lua
2024-06-07 13:44:39 +02:00

55 lines
1.3 KiB
Lua

---@class lz.n.Handler
---@field type lz.n.HandlerTypes
---@field pending table<string, table<string, string>> -- key: plugin_name: plugin_name
---@field add fun(plugin: lz.n.Plugin)
---@field del? fun(plugin: lz.n.Plugin)
local M = {}
---@enum lz.n.HandlerTypes
M.types = {
cmd = "cmd",
event = "event",
ft = "ft",
keys = "keys",
}
local handlers = {
cmd = require("lz.n.handler.cmd"),
event = require("lz.n.handler.event"),
ft = require("lz.n.handler.ft"),
keys = require("lz.n.handler.keys"),
}
---@param plugin lz.n.Plugin
local function enable(plugin)
for _, handler in pairs(handlers) do
handler.add(plugin)
end
-- TODO: Change handler add implementations to take a lz.n.Plugin
end
function M.disable(plugin)
for _, handler in pairs(handlers) do
if type(handler.del) == "function" then
-- TODO: Change handler del implementations to take a lz.n.Plugin?
handler.del(plugin)
end
end
end
---@param plugins table<string, lz.n.Plugin>
function M.init(plugins)
for _, plugin in pairs(plugins) do
xpcall(
enable,
vim.schedule_wrap(function(err)
vim.notify(("Failed to enable handlers for %s: %s"):format(plugin.name, err), vim.log.levels.ERROR)
end),
plugin
)
end
end
return M