console.lua: don't convert integers for mp.input to string

I misunderstood CogentRedTester's review in
https://github.com/mpv-player/mpv/pull/10282#discussion_r1428972352 as
referring to the cursor_position in mp.input's arguments instead of the
one received by the closed callback.

The cursor_position passed to input.get doesn't need to be converted to
a number because it was already JSON, while the cursor_position received
by the closed callback is currently a string, and we need to pass JSON
in input-event script messages to keep it as an integer to work around
mpv converting integer script message arguments to string.

This is more noticeable after implementing mp.input.select(): its submit
argument currently receives the selected index as a string, and this
makes Lua error if you use it as an index of a numerical table, e.g.:

submit = function (id)
    mp.set_property(property, tracks[tonumber(id)].selected and "no"
                              or tracks[tonumber(id)].id)
    ...
end,

This commit avoids having to call tonumber(id).
This commit is contained in:
Guido Cella authored and Kacper Michajłow committed 2024-05-12 23:13:48 +02:00
1 parent 994a08f5a7
commit eb4c6be630
4 files changed
+13 -10

No files matched your search

+5 -5
View File
@@ -566,7 +566,7 @@ function set_active(active)
if input_caller then
mp.commandv('script-message-to', input_caller, 'input-event',
'closed', line, cursor)
'closed', utils.format_json({line, cursor}))
input_caller = nil
line = ''
cursor = 1
@@ -648,7 +648,7 @@ local function handle_edit()
if input_caller then
mp.commandv('script-message-to', input_caller, 'input-event', 'edited',
line)
utils.format_json({line}))
end
end
@@ -787,7 +787,7 @@ function handle_enter()
if input_caller then
mp.commandv('script-message-to', input_caller, 'input-event', 'submit',
selectable_items and matches[selected_match].index or line)
utils.format_json({selectable_items and matches[selected_match].index or line}))
else
-- match "help [<text>]", return <text> or "", strip all whitespace
local help = line:match('^%s*help%s+(.-)%s*$') or
@@ -1168,7 +1168,7 @@ function complete(backwards)
completion_old_line = line
completion_old_cursor = cursor
mp.commandv('script-message-to', input_caller, 'input-event',
'complete', line:sub(1, cursor - 1))
'complete', utils.format_json({line:sub(1, cursor - 1)}))
return
end
@@ -1586,7 +1586,7 @@ mp.register_script_message('get-input', function (script_name, args)
args = utils.parse_json(args)
prompt = args.prompt or default_prompt
line = args.default_text or ''
cursor = tonumber(args.cursor_position) or line:len() + 1
cursor = args.cursor_position or line:len() + 1
id = args.id or script_name .. prompt
if histories[id] == nil then
histories[id] = {}