mirror of
https://github.com/hrsh7th/cmp-buffer
synced 2025-04-08 02:22:49 +00:00
49 lines
1.0 KiB
Lua
49 lines
1.0 KiB
Lua
---@class cmp_buffer.Timer
|
|
---@field public handle any
|
|
---@field private callback_wrapper_instance fun()|nil
|
|
local timer = {}
|
|
|
|
function timer.new()
|
|
local self = setmetatable({}, { __index = timer })
|
|
self.handle = vim.loop.new_timer()
|
|
self.callback_wrapper_instance = nil
|
|
return self
|
|
end
|
|
|
|
---@param timeout_ms number
|
|
---@param repeat_ms number
|
|
---@param callback fun()
|
|
function timer:start(timeout_ms, repeat_ms, callback)
|
|
local scheduled = false
|
|
local function callback_wrapper()
|
|
if scheduled then
|
|
return
|
|
end
|
|
scheduled = true
|
|
vim.schedule(function()
|
|
scheduled = false
|
|
if self.callback_wrapper_instance ~= callback_wrapper then
|
|
return
|
|
end
|
|
callback()
|
|
end)
|
|
end
|
|
self.handle:start(timeout_ms, repeat_ms, callback_wrapper)
|
|
self.callback_wrapper_instance = callback_wrapper
|
|
end
|
|
|
|
function timer:stop()
|
|
self.handle:stop()
|
|
self.callback_wrapper_instance = nil
|
|
end
|
|
|
|
function timer:is_active()
|
|
return self.handle:is_active()
|
|
end
|
|
|
|
function timer:close()
|
|
self.handle:close()
|
|
end
|
|
|
|
return timer
|