mirror of
https://github.com/neovim/neovim
synced 2025-07-16 09:11:51 +00:00
fix(lua): make it possible to cancel vim.wait() with Ctrl-C
(cherry picked from commit 2926ce7921
)
This commit is contained in:
committed by
github-actions[bot]
parent
a25607a2bc
commit
403e653903
@ -415,9 +415,9 @@ static int nlua_wait(lua_State *lstate)
|
||||
LOOP_PROCESS_EVENTS_UNTIL(&main_loop,
|
||||
loop_events,
|
||||
(int)timeout,
|
||||
is_function ? nlua_wait_condition(lstate,
|
||||
&pcall_status,
|
||||
&callback_result) : false || got_int);
|
||||
got_int || (is_function ? nlua_wait_condition(lstate,
|
||||
&pcall_status,
|
||||
&callback_result) : false));
|
||||
|
||||
// Stop dummy timer
|
||||
time_watcher_stop(tw);
|
||||
|
@ -2451,6 +2451,41 @@ describe('lua stdlib', function()
|
||||
|
||||
eq(false, pcall_result)
|
||||
end)
|
||||
|
||||
describe('returns -2 when interrupted', function()
|
||||
before_each(function()
|
||||
local channel = meths.get_api_info()[1]
|
||||
meths.set_var('channel', channel)
|
||||
end)
|
||||
|
||||
it('without callback', function()
|
||||
exec_lua([[
|
||||
function _G.Wait()
|
||||
vim.rpcnotify(vim.g.channel, 'ready')
|
||||
local _, interrupted = vim.wait(4000)
|
||||
vim.rpcnotify(vim.g.channel, 'wait', interrupted)
|
||||
end
|
||||
]])
|
||||
feed(':lua _G.Wait()<CR>')
|
||||
eq({'notification', 'ready', {}}, next_msg(500))
|
||||
feed('<C-C>')
|
||||
eq({'notification', 'wait', {-2}}, next_msg(500))
|
||||
end)
|
||||
|
||||
it('with callback', function()
|
||||
exec_lua([[
|
||||
function _G.Wait()
|
||||
vim.rpcnotify(vim.g.channel, 'ready')
|
||||
local _, interrupted = vim.wait(4000, function() end)
|
||||
vim.rpcnotify(vim.g.channel, 'wait', interrupted)
|
||||
end
|
||||
]])
|
||||
feed(':lua _G.Wait()<CR>')
|
||||
eq({'notification', 'ready', {}}, next_msg(500))
|
||||
feed('<C-C>')
|
||||
eq({'notification', 'wait', {-2}}, next_msg(500))
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
it('vim.notify_once', function()
|
||||
|
Reference in New Issue
Block a user