summaryrefslogtreecommitdiff
path: root/ar/.config/mpv/script-modules/user-input-module.lua
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-03-14 00:07:41 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-03-14 00:07:41 +0900
commit5e954f3dfb4304341c1a50a1f9310f58dcf39682 (patch)
treef4e5c1fdc9ee24b662fd9f4f43da4621a012c29a /ar/.config/mpv/script-modules/user-input-module.lua
parenta13bf1ecb918bcf80ecb8bb9663ac7a84d576243 (diff)
updates
Diffstat (limited to 'ar/.config/mpv/script-modules/user-input-module.lua')
-rw-r--r--ar/.config/mpv/script-modules/user-input-module.lua156
1 files changed, 80 insertions, 76 deletions
diff --git a/ar/.config/mpv/script-modules/user-input-module.lua b/ar/.config/mpv/script-modules/user-input-module.lua
index f15d5c4..6740d13 100644
--- a/ar/.config/mpv/script-modules/user-input-module.lua
+++ b/ar/.config/mpv/script-modules/user-input-module.lua
@@ -12,115 +12,119 @@
local API_VERSION = "0.1.0"
-local mp = require 'mp'
-local msg = require "mp.msg"
-local utils = require 'mp.utils'
+local mp = require("mp")
+local msg = require("mp.msg")
+local utils = require("mp.utils")
local mod = {}
local name = mp.get_script_name()
local counter = 1
local function pack(...)
- local t = {...}
- t.n = select("#", ...)
- return t
+ local t = { ... }
+ t.n = select("#", ...)
+ return t
end
local request_mt = {}
-- ensures the option tables are correctly formatted based on the input
local function format_options(options, response_string)
- return {
- response = response_string,
- version = API_VERSION,
- id = name..'/'..(options.id or ""),
- source = name,
- request_text = ("[%s] %s"):format(options.source or name, options.request_text or options.text or "requesting user input:"),
- default_input = options.default_input,
- cursor_pos = tonumber(options.cursor_pos),
- queueable = options.queueable and true,
- replace = options.replace and true
- }
+ return {
+ response = response_string,
+ version = API_VERSION,
+ id = name .. "/" .. (options.id or ""),
+ source = name,
+ request_text = ("[%s] %s"):format(
+ options.source or name,
+ options.request_text or options.text or "requesting user input:"
+ ),
+ default_input = options.default_input,
+ cursor_pos = tonumber(options.cursor_pos),
+ queueable = options.queueable and true,
+ replace = options.replace and true,
+ }
end
-- cancels the request
function request_mt:cancel()
- assert(self.uid, "request object missing UID")
- mp.commandv("script-message-to", "user_input", "cancel-user-input/uid", self.uid)
+ assert(self.uid, "request object missing UID")
+ mp.commandv("script-message-to", "user_input", "cancel-user-input/uid", self.uid)
end
-- updates the options for the request
function request_mt:update(options)
- assert(self.uid, "request object missing UID")
- options = utils.format_json( format_options(options) )
- mp.commandv("script-message-to", "user_input", "update-user-input/uid", self.uid, options)
+ assert(self.uid, "request object missing UID")
+ options = utils.format_json(format_options(options))
+ mp.commandv("script-message-to", "user_input", "update-user-input/uid", self.uid, options)
end
-- sends a request to ask the user for input using formatted options provided
-- creates a script message to recieve the response and call fn
function mod.get_user_input(fn, options, ...)
- options = options or {}
- local response_string = name.."/__user_input_request/"..counter
- counter = counter + 1
-
- local request = {
- uid = response_string,
- passthrough_args = pack(...),
- callback = fn,
- pending = true
- }
-
- -- create a callback for user-input to respond to
- mp.register_script_message(response_string, function(response)
- mp.unregister_script_message(response_string)
- request.pending = false
-
- response = utils.parse_json(response)
- request.callback(response.line, response.err, unpack(request.passthrough_args, 1, request.passthrough_args.n))
- end)
-
- -- send the input command
- options = utils.format_json( format_options(options, response_string) )
- mp.commandv("script-message-to", "user_input", "request-user-input", options)
-
- return setmetatable(request, { __index = request_mt })
+ options = options or {}
+ local response_string = name .. "/__user_input_request/" .. counter
+ counter = counter + 1
+
+ local request = {
+ uid = response_string,
+ passthrough_args = pack(...),
+ callback = fn,
+ pending = true,
+ }
+
+ -- create a callback for user-input to respond to
+ mp.register_script_message(response_string, function(response)
+ mp.unregister_script_message(response_string)
+ request.pending = false
+
+ response = utils.parse_json(response)
+ request.callback(response.line, response.err, unpack(request.passthrough_args, 1, request.passthrough_args.n))
+ end)
+
+ -- send the input command
+ options = utils.format_json(format_options(options, response_string))
+ mp.commandv("script-message-to", "user_input", "request-user-input", options)
+
+ return setmetatable(request, { __index = request_mt })
end
-- runs the request synchronously using coroutines
-- takes the option table and an optional coroutine resume function
function mod.get_user_input_co(options, co_resume)
- local co, main = coroutine.running()
- assert(not main and co, "get_user_input_co must be run from within a coroutine")
-
- local uid = {}
- local request = mod.get_user_input(function(line, err)
- if co_resume then
- co_resume(uid, line, err)
- else
- local success, er = coroutine.resume(co, uid, line, err)
- if not success then
- msg.warn(debug.traceback(co))
- msg.error(er)
- end
- end
- end, options)
-
- -- if the uid was not sent then the coroutine was resumed by the user.
- -- we will treat this as a cancellation request
- local success, line, err = coroutine.yield(request)
- if success ~= uid then
- request:cancel()
- request.callback = function() end
- return nil, "cancelled"
- end
-
- return line, err
+ local co, main = coroutine.running()
+ assert(not main and co, "get_user_input_co must be run from within a coroutine")
+
+ local uid = {}
+ local request = mod.get_user_input(function(line, err)
+ if co_resume then
+ co_resume(uid, line, err)
+ else
+ local success, er = coroutine.resume(co, uid, line, err)
+ if not success then
+ msg.warn(debug.traceback(co))
+ msg.error(er)
+ end
+ end
+ end, options)
+
+ -- if the uid was not sent then the coroutine was resumed by the user.
+ -- we will treat this as a cancellation request
+ local success, line, err = coroutine.yield(request)
+ if success ~= uid then
+ request:cancel()
+ request.callback = function() end
+ return nil, "cancelled"
+ end
+
+ return line, err
end
-- sends a request to cancel all input requests with the given id
function mod.cancel_user_input(id)
- id = name .. '/' .. (id or "")
- mp.commandv("script-message-to", "user_input", "cancel-user-input/id", id)
+ id = name .. "/" .. (id or "")
+ mp.commandv("script-message-to", "user_input", "cancel-user-input/id", id)
end
-return mod \ No newline at end of file
+return mod
+