mpv & change wallpaper
This commit is contained in:
105
mpv/scripts/cycle-profile.lua
Normal file
105
mpv/scripts/cycle-profile.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
--[[
|
||||
script to cycle profiles with a keybind, accomplished through script messages
|
||||
available at: https://github.com/CogentRedTester/mpv-scripts
|
||||
|
||||
syntax:
|
||||
script-message cycle-profiles "profile1;profile2;profile3"
|
||||
|
||||
You must use semicolons to separate the profiles, do not include any spaces that are not part of the profile name.
|
||||
The script will print the profile description to the screen when switching, if there is no profile description, then it just prints the name
|
||||
]]--
|
||||
|
||||
--change this to change what character separates the profile names
|
||||
seperator = ";"
|
||||
|
||||
msg = require 'mp.msg'
|
||||
|
||||
--splits the profiles string into an array of profile names
|
||||
--function taken from: https://stackoverflow.com/questions/1426954/split-string-in-lua/7615129#7615129
|
||||
function mysplit (inputstr, sep)
|
||||
if sep == nil then
|
||||
sep = "%s"
|
||||
end
|
||||
local t={}
|
||||
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
|
||||
table.insert(t, str)
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
--table of all available profiles and options
|
||||
profileList = mp.get_property_native('profile-list')
|
||||
|
||||
--keeps track of current profile for every unique cycle
|
||||
iterator = {}
|
||||
|
||||
--stores descriptions for profiles
|
||||
--once requested a description is stored here so it does not need to be found again
|
||||
profilesDescs = {}
|
||||
|
||||
--if trying to cycle to an unknown profile this function is run to find a description to print
|
||||
function findDesc(profile)
|
||||
msg.verbose('unknown profile ' .. profile .. ', searching for description')
|
||||
|
||||
for i = 1, #profileList, 1 do
|
||||
if profileList[i]['name'] == profile then
|
||||
msg.verbose('profile found')
|
||||
local desc = profileList[i]['profile-desc']
|
||||
|
||||
if desc ~= nil then
|
||||
msg.verbose('description found')
|
||||
profilesDescs[profile] = desc
|
||||
else
|
||||
msg.verbose('no description, will use name')
|
||||
profilesDescs[profile] = profile
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
msg.verbose('profile not found')
|
||||
profilesDescs[profile] = "no profile '" .. profile .. "'"
|
||||
end
|
||||
|
||||
--prints the profile description to the OSD
|
||||
--if the profile has not been requested before during the session then it runs findDesc()
|
||||
function printProfileDesc(profile)
|
||||
local desc = profilesDescs[profile]
|
||||
if desc == nil then
|
||||
findDesc(profile)
|
||||
desc = profilesDescs[profile]
|
||||
end
|
||||
|
||||
msg.verbose('profile description: ' .. desc)
|
||||
mp.osd_message(desc)
|
||||
end
|
||||
|
||||
function main(profileStr)
|
||||
--if there is not already an iterator for this cycle then it creates one
|
||||
if iterator[profileStr] == nil then
|
||||
msg.verbose('unknown cycle, creating new iterator')
|
||||
iterator[profileStr] = 1
|
||||
end
|
||||
local i = iterator[profileStr]
|
||||
|
||||
--converts the string into an array of profile names
|
||||
local profiles = mysplit(profileStr, seperator)
|
||||
msg.verbose('cycling ' .. tostring(profiles))
|
||||
msg.verbose("number of profiles: " .. tostring(#profiles))
|
||||
|
||||
--sends the command to apply the profile
|
||||
msg.info("applying profile " .. profiles[i])
|
||||
mp.commandv('apply-profile', profiles[i])
|
||||
|
||||
--prints the profile description to the OSD
|
||||
printProfileDesc(profiles[i])
|
||||
|
||||
--moves the iterator
|
||||
iterator[profileStr] = iterator[profileStr] + 1
|
||||
if iterator[profileStr] > #profiles then
|
||||
msg.verbose('reached end of profiles, wrapping back to start')
|
||||
iterator[profileStr] = 1
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_script_message('cycle-profiles', main)
|
||||
Reference in New Issue
Block a user