feat(notify): delay notifs till replaced or at most 500ms to prevent more prompts

This commit is contained in:
Folke Lemaitre
2023-01-10 23:00:56 +01:00
parent 3dd367caac
commit 701337fac8
4 changed files with 52 additions and 10 deletions

View File

@ -125,4 +125,41 @@ function M.deprecate(old, new)
Util.warn(("`%s` is deprecated. Please use `%s` instead"):format(old, new), { title = "LazyVim" })
end
-- delay notifications till vim.notify was replaced or after 500ms
function M.lazy_notify()
local notifs = {}
local function temp(...)
table.insert(notifs, vim.F.pack_len(...))
end
vim.notify = temp
local orig = vim.notify
local timer = vim.loop.new_timer()
local check = vim.loop.new_check()
local replay = function()
timer:stop()
check:stop()
if vim.notify == temp then
vim.notify = orig -- put back the original notify if needed
end
vim.schedule(function()
---@diagnostic disable-next-line: no-unknown
for _, notif in ipairs(notifs) do
vim.notify(vim.F.unpack_len(notif))
end
end)
end
-- wait till vim.notify has been replaced
check:start(function()
if vim.notify ~= temp then
replay()
end
end)
-- or if it took more than 500ms, then something went wrong
timer:start(500, 0, replay)
end
return M