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

+3 -2
View File
@@ -647,9 +647,10 @@ mp.options = { read_options: read_options };
* input
*********************************************************************/
function register_event_handler(t) {
mp.register_script_message("input-event", function (type, text, cursor_position) {
mp.register_script_message("input-event", function (type, args) {
if (t[type]) {
var result = t[type](text, cursor_position);
args = JSON.parse(args)
var result = t[type](args[0], args[1]);
if (type == "complete" && result) {
mp.commandv("script-message-to", "console", "complete",