diff --git a/lua/nui/layout/init.lua b/lua/nui/layout/init.lua index 7ff02bbd..51d1354f 100644 --- a/lua/nui/layout/init.lua +++ b/lua/nui/layout/init.lua @@ -69,9 +69,9 @@ local function wire_up_layout_components(layout, box) autocmd.create({ "BufWipeout", "QuitPre" }, { group = layout._.augroup.unmount, buffer = child.component.bufnr, - callback = function() + callback = vim.schedule_wrap(function() layout:unmount() - end, + end), }, child.component.bufnr) autocmd.create("BufWinEnter", { diff --git a/lua/nui/popup/init.lua b/lua/nui/popup/init.lua index fe838c79..2f7a2131 100644 --- a/lua/nui/popup/init.lua +++ b/lua/nui/popup/init.lua @@ -187,9 +187,9 @@ function Popup:mount() autocmd.create("QuitPre", { group = self._.augroup.unmount, buffer = self.bufnr, - callback = function() + callback = vim.schedule_wrap(function() self:unmount() - end, + end), }, self.bufnr) autocmd.create("BufWinEnter", { group = self._.augroup.unmount, diff --git a/lua/nui/split/init.lua b/lua/nui/split/init.lua index 5b0d6fa5..dadc8e50 100644 --- a/lua/nui/split/init.lua +++ b/lua/nui/split/init.lua @@ -186,8 +186,10 @@ function Split:mount() buffer = self.bufnr, callback = function() self._.pending_quit = true - self:unmount() - self._.pending_quit = nil + vim.schedule(function() + self:unmount() + self._.pending_quit = nil + end) end, }, self.bufnr) autocmd.create("BufWinEnter", { diff --git a/tests/nui/layout/init_spec.lua b/tests/nui/layout/init_spec.lua index aaf52786..ff30307d 100644 --- a/tests/nui/layout/init_spec.lua +++ b/tests/nui/layout/init_spec.lua @@ -522,6 +522,10 @@ describe("nui.layout", function() p2:unmount() + vim.wait(100, function() + return not layout._.mounted + end, 10) + assert.spy(layout_unmount).was_called() end) @@ -547,6 +551,10 @@ describe("nui.layout", function() vim.cmd([[quit]]) end) + vim.wait(100, function() + return not layout._.mounted + end, 10) + assert.spy(layout_unmount).was_called() end) end) @@ -1479,6 +1487,10 @@ describe("nui.layout", function() s2:unmount() + vim.wait(100, function() + return not layout._.mounted + end, 10) + assert.spy(layout_unmount).was_called() end) @@ -1509,6 +1521,10 @@ describe("nui.layout", function() vim.cmd([[quit]]) end) + vim.wait(100, function() + return not layout._.mounted + end, 10) + assert.spy(layout_unmount).was_called() end) end) diff --git a/tests/nui/popup/init_spec.lua b/tests/nui/popup/init_spec.lua index 1e53b88c..5875ba54 100644 --- a/tests/nui/popup/init_spec.lua +++ b/tests/nui/popup/init_spec.lua @@ -883,6 +883,10 @@ describe("nui.popup", function() vim.cmd([[quit]]) end) + vim.wait(100, function() + return not popup._.mounted + end, 10) + assert.spy(popup_unmount).was_called() end) end) diff --git a/tests/nui/split/init_spec.lua b/tests/nui/split/init_spec.lua index c2f6f9c6..9393437c 100644 --- a/tests/nui/split/init_spec.lua +++ b/tests/nui/split/init_spec.lua @@ -315,6 +315,10 @@ describe("nui.split", function() vim.cmd([[quit]]) end) + vim.wait(100, function() + return not split._.mounted + end, 10) + assert.spy(split_unmount).was_called() end) end)