/ lua / cellmode / runtime / scheduler.lua
scheduler.lua
 1  local M = {}
 2  
 3  local timer_pending = {}
 4  
 5  function M.once(bufnr, key, delay_ms, fn)
 6    local token = string.format("%d:%s", bufnr, key)
 7    if timer_pending[token] then
 8      return
 9    end
10    timer_pending[token] = true
11    vim.defer_fn(function()
12      timer_pending[token] = nil
13      fn()
14    end, delay_ms)
15  end
16  
17  function M.next_tick(bufnr, key, fn)
18    local token = string.format("%d:%s", bufnr, key)
19    if timer_pending[token] then
20      return
21    end
22    timer_pending[token] = true
23    vim.schedule(function()
24      timer_pending[token] = nil
25      fn()
26    end)
27  end
28  
29  function M.clear_for_buffer(bufnr)
30    local prefix = tostring(bufnr) .. ":"
31    for token, _ in pairs(timer_pending) do
32      if token:sub(1, #prefix) == prefix then
33        timer_pending[token] = nil
34      end
35    end
36  end
37  
38  return M