diff --git a/README.md b/README.md index ac70ca0..689413f 100755 --- a/README.md +++ b/README.md @@ -132,6 +132,14 @@ require("lz.n").load(plugins) it would have to know where the plugin is installed in order to determine which plugin to load. +### User events + +- `DeferredUIEnter`: Triggered when `load()` is done and after `UIEnter`. + Can be used as an `event` to lazy-load plugins that are not immediately needed + for the initial UI[^3]. + +[^3]: This is equivalent to `lazy.nvim`'s `VeryLazy` event. + #### Example ```lua diff --git a/lua/lz/n/init.lua b/lua/lz/n/init.lua index c1278fb..177e003 100644 --- a/lua/lz/n/init.lua +++ b/lua/lz/n/init.lua @@ -6,6 +6,14 @@ 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) + ---@param spec string | lz.n.Spec function M.load(spec) if vim.g.lz_n_did_load then @@ -21,6 +29,14 @@ function M.load(spec) require("lz.n.loader").load_startup_plugins(plugins) require("lz.n.state").plugins = plugins require("lz.n.handler").init(plugins) + if vim.v.vim_did_enter == 1 then + deferred_ui_enter() + else + vim.api.nvim_create_autocmd("UIEnter", { + once = true, + callback = deferred_ui_enter, + }) + end end return M