mirror of
https://github.com/gaitas13/dotfiles.git
synced 2025-12-06 15:25:37 +01:00
77 lines
2.9 KiB
Lua
Executable file
77 lines
2.9 KiB
Lua
Executable file
--[=====[
|
|
script to cycle commands with a keybind, accomplished through script messages
|
|
available at: https://github.com/CogentRedTester/mpv-scripts
|
|
|
|
syntax:
|
|
script-message cycle-commands "command1" "command2" "command3"
|
|
|
|
The syntax of each command is identical to the standard input.conf syntax, but each command must be within
|
|
a pair of double quotes.
|
|
|
|
Commands with mutiword arguments require you to send double quotes just like normal command syntax, however,
|
|
you will need to escape the quotes with a backslash so that they are sent as part of the string.
|
|
Semicolons also work exactly like they do normally, so you can easily send multiple commands each cycle.
|
|
|
|
Here is an example of a standard input.conf entry:
|
|
|
|
script-message cycle-commands "show-text one 1000 ; print-text two" "show-text \"three four\""
|
|
|
|
This would, on keypress one, print 'one' to the OSD for 1 second and 'two' to the console,
|
|
and on keypress two 'three four' would be printed to the OSD.
|
|
Notice how the quotation marks around 'three four' are escaped using backslashes.
|
|
All other syntax details should be exactly the same as usual input commands.
|
|
|
|
There are no limits to the number of commands, and the script message can be used as often as one wants,
|
|
the script stores the current iteration for each unique cycle command, so there should be no overlap
|
|
unless one binds the exact same command string (including spacing)
|
|
]=====]--
|
|
|
|
|
|
local msg = require 'mp.msg'
|
|
|
|
--keeps track of commands and iterators
|
|
local cmd = {}
|
|
|
|
--[=====[
|
|
|
|
the script stores the command in an array of command strings
|
|
the table is in the format:
|
|
table[full string].table[cycle]
|
|
table[full string].iterator
|
|
|
|
]=====]--
|
|
function main(...)
|
|
--to identify the specific cycle we'll concatenate all the strings together to use
|
|
--as our table key
|
|
local str = ""
|
|
for _,v in ipairs({...}) do
|
|
str = str .. v .. " | "
|
|
end
|
|
msg.debug('recieved: ' .. str)
|
|
|
|
--if there is nothing saved for the current string, then runs through the process of storing the commands in the table
|
|
if cmd[str] == nil then
|
|
msg.verbose('unknown cycle, creating command table')
|
|
cmd[str] = {}
|
|
cmd[str].iterator = 0
|
|
msg.verbose('parsing table for: ' .. str)
|
|
cmd[str].table = {...}
|
|
end
|
|
|
|
--moves the iterator forward
|
|
cmd[str].iterator = cmd[str].iterator + 1
|
|
if cmd[str].iterator > #cmd[str].table then
|
|
msg.verbose('reached end of cycle, wrapping back to start')
|
|
cmd[str].iterator = 1
|
|
end
|
|
|
|
local i = cmd[str].iterator
|
|
|
|
--runs each command in the cycle
|
|
--mp.command shouldrun the commands exactly as if they were entered in
|
|
--input.conf. This should provide universal support for all input.conf command syntax
|
|
msg.verbose('sending commands: ' .. cmd[str].table[i])
|
|
mp.command(cmd[str].table[i])
|
|
end
|
|
|
|
mp.register_script_message('cycle-commands', main)
|