mirror of
https://github.com/hexedtech/codemp-nvim.git
synced 2025-04-07 19:21:32 +02:00
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:
parent
91bc8f8dba
commit
214f7db24b
1 changed files with 30 additions and 24 deletions
|
@ -155,38 +155,44 @@ local function join(workspace)
|
||||||
register_cursor_callback(ws:cursor(), ws:id())
|
register_cursor_callback(ws:cursor(), ws:id())
|
||||||
register_cursor_handler(ws:cursor())
|
register_cursor_handler(ws:cursor())
|
||||||
CODEMP.workspace = ws
|
CODEMP.workspace = ws
|
||||||
for _, user in pairs(CODEMP.workspace:user_list()) do
|
vim.schedule(function ()
|
||||||
buffers.users[user.name] = ""
|
for _, user in pairs(CODEMP.workspace:user_list()) do
|
||||||
user_hl[user.name] = {
|
buffers.users[user.name] = ""
|
||||||
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. user.name),
|
user_hl[user.name] = {
|
||||||
hi = utils.color(user.name),
|
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. user.name),
|
||||||
pos = { 0, 0 },
|
hi = utils.color(user.name),
|
||||||
mark = nil,
|
pos = { 0, 0 },
|
||||||
}
|
mark = nil,
|
||||||
end
|
}
|
||||||
require('codemp.window').update()
|
end
|
||||||
|
require('codemp.window').update()
|
||||||
|
end)
|
||||||
local async = vim.uv.new_async(function ()
|
local async = vim.uv.new_async(function ()
|
||||||
while true do
|
while true do
|
||||||
local event = ws:try_recv():await()
|
local event = ws:try_recv():await()
|
||||||
if event == nil then break end
|
if event == nil then break end
|
||||||
if event.type == "UserLeave" then
|
if event.type == "UserLeave" then
|
||||||
if buffers.users[event.name] ~= nil then
|
if buffers.users[event.name] ~= nil then
|
||||||
local buf_name = buffers.users[event.name]
|
vim.schedule(function()
|
||||||
local buf_id = buffers.map_rev[buf_name]
|
local buf_name = buffers.users[event.name]
|
||||||
if buf_id ~= nil then
|
local buf_id = buffers.map_rev[buf_name]
|
||||||
vim.api.nvim_buf_clear_namespace(buf_id, user_hl[event.name].ns, 0, -1)
|
if buf_id ~= nil then
|
||||||
end
|
vim.api.nvim_buf_clear_namespace(buf_id, user_hl[event.name].ns, 0, -1)
|
||||||
buffers.users[event.name] = nil
|
end
|
||||||
user_hl[event.name] = nil
|
buffers.users[event.name] = nil
|
||||||
|
user_hl[event.name] = nil
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
elseif event.type == "UserJoin" then
|
elseif event.type == "UserJoin" then
|
||||||
buffers.users[event.name] = ""
|
vim.schedule(function()
|
||||||
user_hl[event.name] = {
|
buffers.users[event.name] = ""
|
||||||
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. event.name),
|
user_hl[event.name] = {
|
||||||
hi = utils.color(event.name),
|
ns = vim.api.nvim_create_namespace("codemp-cursor-" .. event.name),
|
||||||
pos = { 0, 0 },
|
hi = utils.color(event.name),
|
||||||
mark = nil,
|
pos = { 0, 0 },
|
||||||
}
|
mark = nil,
|
||||||
|
}
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
vim.schedule(function () require('codemp.window').update() end)
|
vim.schedule(function () require('codemp.window').update() end)
|
||||||
|
|
Loading…
Add table
Reference in a new issue