mirror of https://github.com/mpv-player/mpv
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:
parent
994a08f5a7
commit
eb4c6be630
|
@ -63,7 +63,8 @@ local mp_globals = {
|
|||
set_mouse_area = {},
|
||||
set_osd_ass = {},
|
||||
}
|
||||
}
|
||||
},
|
||||
unpack = {},
|
||||
}
|
||||
|
||||
local mp_internal = {
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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] = {}
|
||||
|
|
|
@ -19,9 +19,10 @@ local utils = require "mp.utils"
|
|||
local input = {}
|
||||
|
||||
local 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] then
|
||||
local suggestions, completion_start_position = t[type](text, cursor_position)
|
||||
local suggestions, completion_start_position =
|
||||
t[type](unpack(utils.parse_json(args or "") or {}))
|
||||
|
||||
if type == "complete" and suggestions then
|
||||
mp.commandv("script-message-to", "console", "complete",
|
||||
|
|
Loading…
Reference in New Issue