mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(vim.ui.input): return empty string when inputs nothing (#20883)
fix(vim.ui.input): return empty string when inputs nothing
The previous behavior of `vim.ui.input()` when typing <CR> with
no text input (with an intention of having the empty string as input)
was to execute `on_confirm(nil)`, conflicting with its documentation.
Inputting an empty string should now correctly execute `on_confirm('')`.
This should be clearly distinguished from cancelling or aborting the
input UI, in which case `on_confirm(nil)` is executed as before.
This commit is contained in:
@@ -73,7 +73,8 @@ end
|
||||
--- user inputs.
|
||||
---@param on_confirm function ((input|nil) -> ())
|
||||
--- Called once the user confirms or abort the input.
|
||||
--- `input` is what the user typed.
|
||||
--- `input` is what the user typed (it might be
|
||||
--- an empty string if nothing was entered), or
|
||||
--- `nil` if the user aborted the dialog.
|
||||
---
|
||||
--- Example:
|
||||
@@ -88,11 +89,17 @@ function M.input(opts, on_confirm)
|
||||
})
|
||||
|
||||
opts = (opts and not vim.tbl_isempty(opts)) and opts or vim.empty_dict()
|
||||
|
||||
-- Note that vim.fn.input({}) returns an empty string when cancelled.
|
||||
-- vim.ui.input() should distinguish aborting from entering an empty string.
|
||||
local _canceled = vim.NIL
|
||||
opts = vim.tbl_extend('keep', opts, { cancelreturn = _canceled })
|
||||
|
||||
local input = vim.fn.input(opts)
|
||||
if #input > 0 then
|
||||
on_confirm(input)
|
||||
else
|
||||
if input == _canceled then
|
||||
on_confirm(nil)
|
||||
else
|
||||
on_confirm(input)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user