Skip to content

Commit

Permalink
feat(notify): delay notifs till replaced or at most 500ms to prevent …
Browse files Browse the repository at this point in the history
…more prompts
  • Loading branch information
folke committed Jan 10, 2023
1 parent 3dd367c commit 701337f
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 10 deletions.
14 changes: 14 additions & 0 deletions lua/lazyvim/config/init.lua
Expand Up @@ -128,6 +128,20 @@ function M.load(name)
end
end

M.did_init = false
function M.init()
if not M.did_init then
M.did_init = true
-- delay notifications till vim.notify was replaced or after 500ms
require("lazyvim.util").lazy_notify()

-- load options here, before lazy init while sourcing plugin modules
-- this is needed to make sure options will be correctly applied
-- after installing missing plugins
require("lazyvim.config").load("options")
end
end

setmetatable(M, {
__index = function(_, key)
if options == nil then
Expand Down
5 changes: 1 addition & 4 deletions lua/lazyvim/plugins/init.lua
@@ -1,6 +1,3 @@
-- load options here, before lazy init while sourcing plugin modules
-- this is needed to make sure options will be correctly applied
-- after installing missing plugins
require("lazyvim.config").load("options")
require("lazyvim.config").init()

return {}
6 changes: 0 additions & 6 deletions lua/lazyvim/plugins/ui.lua
Expand Up @@ -20,12 +20,6 @@ return {
return math.floor(vim.o.columns * 0.75)
end,
},
init = function()
-- lazy-load notify here. Will be overriden by Noice when it loads
vim.notify = function(...)
return require("notify").notify(...)
end
end,
},

-- better vim.ui
Expand Down
37 changes: 37 additions & 0 deletions lua/lazyvim/util/init.lua
Expand Up @@ -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

0 comments on commit 701337f

Please sign in to comment.