dotfiles-guix/home-config/waybar/custom_cmus.lua

59 lines
1.6 KiB
Lua
Raw Normal View History

2023-09-07 03:50:18 +00:00
#!/usr/bin/env lua
2023-09-05 03:21:01 +00:00
json = require("dkjson")
posix = require("posix")
function htmlescape(s)
s = string.gsub(s, "&", "&")
s = string.gsub(s, "<", "&lt;")
s = string.gsub(s, ">", "&gt;")
return s
end
function timefmt(n)
local s = n % 60
local m = math.floor(n / 60)
return string.format("%d:%02d", m, s)
end
function output(text, tooltip)
text = htmlescape(text)
tooltip = htmlescape(tooltip)
print(json.encode{text=text, tooltip=tooltip, class="custom-cmus"})
end
function getstat(status, name)
for _, line in ipairs(status) do
if string.match(line, "^" .. name) then
return string.sub(line, string.len(name)+2)
end
end
end
while true do
local pipe = io.popen("cmus-remote -Q")
local status = {}
for line in pipe:lines() do
table.insert(status, line)
end
local success = pipe:close()
if not success then
output(" Not running", "Not running")
elseif getstat(status, "status") == "stopped" then
output(" Not running", "Not running")
else
local playing = getstat(status, "status")
local symbol = ({playing="", paused=""})[playing]
local title = getstat(status, "tag title")
local artist = getstat(status, "tag artist")
local duration = getstat(status, "duration")
local position = getstat(status, "position")
local text = string.format("%s %s (%s)", symbol, title, timefmt(position))
local tooltip = string.format("%s - %s (%s / %s)",
artist, title, timefmt(position), timefmt(duration)
)
output(text, tooltip)
end
posix.sleep(1)
end