Wie kann ich in Conky einen Fortschrittsbalken für den in Deadbeef abgespielten Titel anzeigen?

Wie kann ich in Conky einen Fortschrittsbalken für den in Deadbeef abgespielten Titel anzeigen?

Ich hatte ein einfaches Conky-Skript für den Deadbeef-Audioplayer:

Bildbeschreibung hier eingeben

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 execbarauf 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 myscriptin 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:

Bildbeschreibung hier eingeben

verwandte Informationen