aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/ui.lua4
-rw-r--r--test/functional/lua/ui_spec.lua6
2 files changed, 4 insertions, 6 deletions
diff --git a/runtime/lua/vim/ui.lua b/runtime/lua/vim/ui.lua
index d9a3963afc..97dccd83ab 100644
--- a/runtime/lua/vim/ui.lua
+++ b/runtime/lua/vim/ui.lua
@@ -95,8 +95,8 @@ function M.input(opts, on_confirm)
local _canceled = vim.NIL
opts = vim.tbl_extend('keep', opts, { cancelreturn = _canceled })
- local input = vim.fn.input(opts)
- if input == _canceled then
+ local ok, input = pcall(vim.fn.input, opts)
+ if not ok or input == _canceled then
on_confirm(nil)
else
on_confirm(input)
diff --git a/test/functional/lua/ui_spec.lua b/test/functional/lua/ui_spec.lua
index 8f9d8e0f72..c34d947b8b 100644
--- a/test/functional/lua/ui_spec.lua
+++ b/test/functional/lua/ui_spec.lua
@@ -111,13 +111,11 @@ describe('vim.ui', function()
eq('CANCEL', exec_lua('return result'))
end)
- it('does not call on_confirm when interrupted with Ctrl-C #18144', function()
+ it('can return nil when interrupted with Ctrl-C #18144', function()
feed(':lua result = "on_confirm not called"<cr>')
- eq('on_confirm not called', exec_lua('return result'))
feed(':lua vim.ui.input({}, function(input) result = input end)<cr>')
feed('Inputted Text<c-c>')
- -- Ctrl-C would make vim.ui.input() throw, so `result = input` won't be executed
- eq('on_confirm not called', exec_lua('return result'))
+ eq(true, exec_lua('return (nil == result)'))
end)
it('can return the identical object when an arbitrary opts.cancelreturn object is given', function()