From bc619dd3b1acee9a13268acb7c49878ce8e8bda5 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Sat, 31 Aug 2024 20:06:25 +0700 Subject: [PATCH] fix: error when applying colorscheme in after hook on event trigger (#86) --- lua/lz/n/handler/colorscheme.lua | 1 + lua/lz/n/handler/event.lua | 6 ++++-- lua/lz/n/handler/keys.lua | 1 + spec/nested_event_spec.lua | 23 +++++++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 spec/nested_event_spec.lua diff --git a/lua/lz/n/handler/colorscheme.lua b/lua/lz/n/handler/colorscheme.lua index bb16088..26ebe88 100644 --- a/lua/lz/n/handler/colorscheme.lua +++ b/lua/lz/n/handler/colorscheme.lua @@ -34,6 +34,7 @@ local function init() callback = function(event) on_colorscheme(event.match) end, + nested = true, group = M.augroup, }) end diff --git a/lua/lz/n/handler/event.lua b/lua/lz/n/handler/event.lua index 7d381aa..be625bc 100644 --- a/lua/lz/n/handler/event.lua +++ b/lua/lz/n/handler/event.lua @@ -150,6 +150,7 @@ local function add_event(event) vim.api.nvim_create_autocmd(event.event, { group = M.group, once = true, + nested = true, pattern = event.pattern, callback = function(ev) if done or not state.has_pending_plugins(event.id) then @@ -157,10 +158,10 @@ local function add_event(event) end -- HACK: work-around for https://github.com/neovim/neovim/issues/25526 done = true - local st = get_state(ev.event, ev.buf, ev.data) + local state_before_load = get_state(ev.event, ev.buf, ev.data) state.each_pending(event.id, loader.load) ---@param s lz.n.EventOpts - vim.iter(st):each(function(s) + vim.iter(state_before_load):each(function(s) trigger(s) end) end, @@ -192,6 +193,7 @@ function M.post_load() elseif not vim.g.lz_n_did_create_deferred_ui_enter_autocmd then vim.api.nvim_create_autocmd("UIEnter", { once = true, + nested = true, callback = deferred_ui_enter, }) vim.g.lz_n_did_create_deferred_ui_enter_autocmd = true diff --git a/lua/lz/n/handler/keys.lua b/lua/lz/n/handler/keys.lua index 1177c2c..67301c0 100644 --- a/lua/lz/n/handler/keys.lua +++ b/lua/lz/n/handler/keys.lua @@ -126,6 +126,7 @@ local function add_keys(keys) if keys.ft then vim.api.nvim_create_autocmd("FileType", { pattern = keys.ft, + nested = true, callback = function(event) if state.has_pending_plugins[keys.id] then add(event.buf) diff --git a/spec/nested_event_spec.lua b/spec/nested_event_spec.lua new file mode 100644 index 0000000..a907c68 --- /dev/null +++ b/spec/nested_event_spec.lua @@ -0,0 +1,23 @@ +describe("nested events", function() + it("lazy-loaded colorscheme triggered by UIEnter event", function() + require("lz.n").load({ + { + "sweetie.nvim", + colorscheme = "sweetie", + load = function() + vim.g.sweetie_nvim_loaded = true + end, + }, + { + "xyz", + event = "UIEnter", + after = function() + pcall(vim.cmd.colorscheme, "sweetie") + end, + load = function() end, + }, + }) + vim.api.nvim_exec_autocmds("UIEnter", {}) + assert.True(vim.g.sweetie_nvim_loaded) + end) +end)