Skip to content

Commit

Permalink
fix(lua): make it possible to cancel vim.wait() with Ctrl-C (neovim#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
resolritter authored and smjonas committed Dec 31, 2022
1 parent f668e4c commit e33024a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/nvim/lua/executor.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,9 +416,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);
Expand Down
35 changes: 35 additions & 0 deletions test/functional/lua/vim_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2493,6 +2493,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()
Expand Down

0 comments on commit e33024a

Please sign in to comment.