mirror of
https://github.com/zoriya/lz.n.git
synced 2026-06-06 12:04:06 +00:00
feat(api): handler.post_load for setting up custom events (#82)
* feat(handler post_load): for setting up custom events added a post_load callback for handlers to use to set their own events such as DeferredUIEnter In addition, made event handler use this feature to create DeferredUIEnter further decoupling the handlers from the core of lz.n * Update README.md Co-authored-by: Marc Jakobi <mrcjkb89@outlook.com> * Update lua/lz/n/meta.lua Co-authored-by: Marc Jakobi <mrcjkb89@outlook.com> --------- Co-authored-by: Marc Jakobi <mrcjkb89@outlook.com>
This commit is contained in:
@@ -178,4 +178,24 @@ end
|
||||
|
||||
M.del = state.del
|
||||
|
||||
local deferred_ui_enter = vim.schedule_wrap(function()
|
||||
if vim.v.exiting ~= vim.NIL then
|
||||
return
|
||||
end
|
||||
vim.g.lz_n_did_deferred_ui_enter = true
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "DeferredUIEnter", modeline = false })
|
||||
end)
|
||||
|
||||
function M.post_load()
|
||||
if vim.v.vim_did_enter == 1 then
|
||||
deferred_ui_enter()
|
||||
elseif not vim.g.lz_n_did_create_deferred_ui_enter_autocmd then
|
||||
vim.api.nvim_create_autocmd("UIEnter", {
|
||||
once = true,
|
||||
callback = deferred_ui_enter,
|
||||
})
|
||||
vim.g.lz_n_did_create_deferred_ui_enter_autocmd = true
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
|
||||
@@ -105,6 +105,15 @@ function M.disable(name)
|
||||
end)
|
||||
end
|
||||
|
||||
function M.run_post_load()
|
||||
---@param handler lz.n.Handler
|
||||
vim.iter(handlers):each(function(_, handler)
|
||||
if handler.post_load then
|
||||
handler.post_load()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
---@param plugins table<string, lz.n.Plugin>
|
||||
function M.init(plugins)
|
||||
---@param plugin lz.n.Plugin
|
||||
|
||||
+1
-17
@@ -19,14 +19,6 @@ if vim.fn.has("nvim-0.10.0") ~= 1 then
|
||||
error("lz.n requires Neovim >= 0.10.0")
|
||||
end
|
||||
|
||||
local deferred_ui_enter = vim.schedule_wrap(function()
|
||||
if vim.v.exiting ~= vim.NIL then
|
||||
return
|
||||
end
|
||||
vim.g.lz_n_did_deferred_ui_enter = true
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "DeferredUIEnter", modeline = false })
|
||||
end)
|
||||
|
||||
--- The function provides two overloads, each suited for different use cases:
|
||||
---
|
||||
---@overload fun(plugin: lz.n.Plugin)
|
||||
@@ -82,15 +74,7 @@ function M.load(spec)
|
||||
-- `require('lz.n').trigger_load()` safely
|
||||
require("lz.n.loader").load_startup_plugins(plugins)
|
||||
|
||||
if vim.v.vim_did_enter == 1 then
|
||||
deferred_ui_enter()
|
||||
elseif not vim.g.lz_n_did_create_deferred_ui_enter_autocmd then
|
||||
vim.api.nvim_create_autocmd("UIEnter", {
|
||||
once = true,
|
||||
callback = deferred_ui_enter,
|
||||
})
|
||||
vim.g.lz_n_did_create_deferred_ui_enter_autocmd = true
|
||||
end
|
||||
require("lz.n.handler").run_post_load()
|
||||
end
|
||||
|
||||
--- Lookup a plugin that is pending to be loaded by name.
|
||||
|
||||
@@ -102,6 +102,11 @@
|
||||
---
|
||||
--- Lookup a plugin by name.
|
||||
---@field lookup fun(name: string): lz.n.Plugin?
|
||||
---
|
||||
---For setting up handler specific triggers such as
|
||||
---the `DeferredUIEnter` event created by the builtin
|
||||
---event handler. Called once after each call to require("lz.n").load
|
||||
---@field post_load? fun()
|
||||
|
||||
---@type lz.n.Config
|
||||
vim.g.lz_n = vim.g.lz_n
|
||||
|
||||
Reference in New Issue
Block a user