diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 0042888..67e2488 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -175,7 +175,9 @@ cmp.confirm = function(option, callback) return true end - cmp.core.filter.raw(cmp.core) + vim.wait(1000, function() + return not cmp.core.filter.running + end) local e = cmp.core.view:get_selected_entry() or (option.select and cmp.core.view:get_first_entry() or nil) if e then cmp.core:confirm(e, { diff --git a/lua/cmp/utils/async.lua b/lua/cmp/utils/async.lua index 6746ba5..2751c4d 100644 --- a/lua/cmp/utils/async.lua +++ b/lua/cmp/utils/async.lua @@ -1,9 +1,9 @@ local async = {} ---@class cmp.AsyncThrottle +---@field public running boolean ---@field public timeout number ---@field public stop function ----@field public raw function ---@field public __call function ---@param fn function @@ -18,10 +18,7 @@ async.throttle = function(fn, timeout) stop = function() time = nil timer:stop() - end, - raw = function(...) - fn(...) - end, + end }, { __call = function(self, ...) local args = { ... } @@ -29,18 +26,15 @@ async.throttle = function(fn, timeout) if time == nil then time = vim.loop.now() end - timer:stop() - local delta = math.max(1, self.timeout - (vim.loop.now() - time)) - timer:start(delta, 0, function() - if not self.running then + self.running = true + timer:stop() + timer:start(math.max(1, self.timeout - (vim.loop.now() - time)), 0, function() + vim.schedule(function() time = nil - self.running = true - vim.schedule(function() - self.running = false - fn(unpack(args)) - end) - end + self.running = false + fn(unpack(args)) + end) end) end, })