mirror of https://github.com/mpv-player/mpv
console.lua: close when pressing enter with input.select
When you select an item, due to the submit handler being called asynchronously, the default item list is redrawn before the console closes, which is jarring. Fix this by always closing the console as soon as enter is pressed, as keeping it open is unlikely to be useful with a fuzzy selector (unlike with input.get() where it can be used e.g. to implement a Lua REPL). If desired we can later add a close_on_submit flag defaulting to true. Also fix a crash when pressing enter without any match.
This commit is contained in:
parent
30fd3c1a96
commit
367a6b561a
|
@ -970,8 +970,9 @@ REPL.
|
||||||
|
|
||||||
``submit``
|
``submit``
|
||||||
The callback invoked when the user presses Enter. The first argument is
|
The callback invoked when the user presses Enter. The first argument is
|
||||||
the 1-based index of the selected item. You can close the console from
|
the 1-based index of the selected item. Unlike with ``input.get()``, the
|
||||||
within the callback by calling ``input.terminate()``.
|
console is automatically closed on submit without having to call
|
||||||
|
``input.terminate()``.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -984,7 +985,6 @@ REPL.
|
||||||
},
|
},
|
||||||
submit = function (id)
|
submit = function (id)
|
||||||
mp.commandv("playlist-play-index", id - 1)
|
mp.commandv("playlist-play-index", id - 1)
|
||||||
input.terminate()
|
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -798,9 +798,15 @@ function handle_enter()
|
||||||
history_add(line)
|
history_add(line)
|
||||||
end
|
end
|
||||||
|
|
||||||
if input_caller then
|
if selectable_items then
|
||||||
|
if #matches > 0 then
|
||||||
mp.commandv('script-message-to', input_caller, 'input-event', 'submit',
|
mp.commandv('script-message-to', input_caller, 'input-event', 'submit',
|
||||||
utils.format_json({selectable_items and matches[selected_match].index or line}))
|
utils.format_json({matches[selected_match].index}))
|
||||||
|
end
|
||||||
|
set_active(false)
|
||||||
|
elseif input_caller then
|
||||||
|
mp.commandv('script-message-to', input_caller, 'input-event', 'submit',
|
||||||
|
utils.format_json({line}))
|
||||||
else
|
else
|
||||||
-- match "help [<text>]", return <text> or "", strip all whitespace
|
-- match "help [<text>]", return <text> or "", strip all whitespace
|
||||||
local help = line:match('^%s*help%s+(.-)%s*$') or
|
local help = line:match('^%s*help%s+(.-)%s*$') or
|
||||||
|
|
Loading…
Reference in New Issue