fix: namespace ops must happen on main loop

this plugin is becoming a bit of vim.schedule hell...
maybe the :and_then() callback should make sure it runs on the main
loop? maybe offer an :and_then(), which runs on main loop, and a :and_then_soon(),
which runs in the callback thread itself
This commit is contained in:
əlemi 2025-02-15 12:49:56 +01:00
parent 91bc8f8dba
commit 214f7db24b
Signed by: alemi
GPG key ID: A4895B84D311642C

View file

@ -155,38 +155,44 @@ local function join(workspace)
register_cursor_callback(ws:cursor(), ws:id())
register_cursor_handler(ws:cursor())
CODEMP.workspace = ws
for _, user in pairs(CODEMP.workspace:user_list()) do
buffers.users[user.name] = ""
user_hl[user.name] = {
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. user.name),
hi = utils.color(user.name),
pos = { 0, 0 },
mark = nil,
}
end
require('codemp.window').update()
vim.schedule(function ()
for _, user in pairs(CODEMP.workspace:user_list()) do
buffers.users[user.name] = ""
user_hl[user.name] = {
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. user.name),
hi = utils.color(user.name),
pos = { 0, 0 },
mark = nil,
}
end
require('codemp.window').update()
end)
local async = vim.uv.new_async(function ()
while true do
local event = ws:try_recv():await()
if event == nil then break end
if event.type == "UserLeave" then
if buffers.users[event.name] ~= nil then
local buf_name = buffers.users[event.name]
local buf_id = buffers.map_rev[buf_name]
if buf_id ~= nil then
vim.api.nvim_buf_clear_namespace(buf_id, user_hl[event.name].ns, 0, -1)
end
buffers.users[event.name] = nil
user_hl[event.name] = nil
vim.schedule(function()
local buf_name = buffers.users[event.name]
local buf_id = buffers.map_rev[buf_name]
if buf_id ~= nil then
vim.api.nvim_buf_clear_namespace(buf_id, user_hl[event.name].ns, 0, -1)
end
buffers.users[event.name] = nil
user_hl[event.name] = nil
end)
end
elseif event.type == "UserJoin" then
buffers.users[event.name] = ""
user_hl[event.name] = {
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. event.name),
hi = utils.color(event.name),
pos = { 0, 0 },
mark = nil,
}
vim.schedule(function()
buffers.users[event.name] = ""
user_hl[event.name] = {
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. event.name),
hi = utils.color(event.name),
pos = { 0, 0 },
mark = nil,
}
end)
end
end
vim.schedule(function () require('codemp.window').update() end)