
Ich hatte ein einfaches Conky-Skript für den Deadbeef-Audioplayer:
Der Teil, der sich mit den obigen Zeilen befasst, ist dieser:
TEXT
${color 3399FF}${alignr}db audio is playing:
#${alignr}
${color FFFFFF}${alignr} ${exec deadbeef --nowplaying "%a"}
${color FFFFFF} ${alignr}${exec deadbeef --nowplaying "%t"}
${color FFFFFF}${alignr}${exec deadbeef --nowplaying "%b"}
${color FFFFFF}
${alignr}${color 3399FF}${exec deadbeef --nowplaying "%e"}${offset 2}${alignr} / ${exec deadbeef --nowplaying "%l"}
${alignr}${image ./logo.png -p 0,-1 -s 25x25}${color 3399FF}
Wie füge ich einen Fortschrittsbalken hinzu, der den Fortschritt des Songs anzeigt?
Antwort1
Ich suchte auch nach einer Möglichkeit, dies zu tun, und da ich bereits ein Lua-Skript für meine Conky-Datei verwendete, beschloss ich, hierfür eine Lua-Funktion zu erstellen, sodass ich nicht auf externe Bash-Skripte angewiesen war.
Wenn jemand an diesem Weg interessiert ist, müssen Sie Ihre Lua-Datei in Ihrem Conkyrc im Abschnitt „conky.config“ einbinden:
conky.config = {
...other config options...,
lua_load = '/path/to/file.lua'
}
dann benötigen Sie in Ihrer Lua-Datei die folgende Funktion (beachten Sie, dass hier die neue Foobar-Formatierungssyntax von deadbeef verwendet wird, die mit deadbeef 0.7.0 kam und die nicht nur zukunftssicherer ist, da die alte Syntax veraltet ist, sondern auch die Berechnungen vereinfacht) [ein dummer Tippfehler ist mir gerade aufgefallen]:
function conky_song_progress()
local song_progress = "deadbeef --nowplaying-tf '(100*%playback_time_seconds%)//%length_seconds_fp%' 2>/dev/null"
local get_progress = assert(io.popen(song_progress))
local progress = math.tointeger(assert(loadstring("return " .. get_progress:read('*all')))())
get_progress:close()
return progress
end
Fügen Sie dann in Ihren Abschnitt conky.text Folgendes ein:
${lua_bar song_progress}
Beachten Sie auch, dass hier die neue Conky 1.10-Syntax verwendet wird und der Lua-Code Lua 5.3+ erfordert.
Antwort2
Sie können einen Balken in Standardgröße zeichnen, indem Sie execbar
auf Folgendes einen Befehl geben, der eine Zahl zwischen 0 und 100 zurückgibt, die angibt, wie viel Prozent des Balkens gefüllt ist. Wenn Sie beispielsweise das folgende Shell-Skript myscript
in Ihrem PATH haben:
#!/bin/bash
deadbeef --nowplaying "%e %l" |
awk '
{ n = split("::" $1,t,":")
elapsed = (t[n-2]*60+t[n-1])*60+t[n]
n = split("::" $2,t,":")
total = (t[n-2]*60+t[n-1])*60+t[n]
printf "%d\n",elapsed*100/total
}'
dann können Sie die Conky-Zeile verwenden:
${execbar myscript}
Das Skript wandelt einfach die verstrichene und die Gesamtzeitausgabe von deadbeef in Sekunden und schließlich in einen Prozentsatz um.
Das Ergebnis sieht wie folgt aus: