No conky, como posso mostrar uma barra de progresso para a faixa reproduzida no Deadbeef?

No conky, como posso mostrar uma barra de progresso para a faixa reproduzida no Deadbeef?

Eu tinha um script conky simples para o reprodutor de áudio Deadbeef:

insira a descrição da imagem aqui

A parte que se preocupa com as linhas acima é esta:

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}

Como adiciono uma barra de progresso, mostrando o progresso da música?

Responder1

Eu também estava procurando uma maneira de fazer isso e, como já estava usando um script lua para meu arquivo conky, decidi criar uma função lua para fazer isso, para não precisar depender de scripts bash externos.

Se alguém estiver interessado em seguir esse caminho, você precisa incluir seu arquivo lua em seu conkyrc na seção conky.config:

conky.config = {
   ...other config options...,    
   lua_load         = '/path/to/file.lua'
}

então, em seu arquivo lua, você precisa da seguinte função (observe que isso está usando a nova sintaxe de formatação foobar do deadbeef que veio com o deadbeef 0.7.0, que não apenas é mais à prova de futuro, pois a sintaxe antiga está sendo obsoleta, mas simplifica os cálculos) [ corrigi um erro de digitação estúpido que acabei de perceber]:

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

Em seguida, adicione à sua seção conky.text:

${lua_bar song_progress}

Observe também que isso está usando a nova sintaxe conky 1.10 e o código lua precisa de lua 5.3+.

Responder2

Você pode desenhar uma barra de tamanho padrão usando execbarseguido de um comando que deve retornar um número de 0 a 100, informando a porcentagem da barra preenchida. Por exemplo, se você tiver o seguinte script de shell myscriptem seu PATH:

#!/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
}'

então você pode usar a linha conky:

${execbar myscript}

O script simplesmente converte o tempo decorrido e total de saída do deadbeef em segundos e, finalmente, em uma porcentagem.

O resultado é assim:

insira a descrição da imagem aqui

informação relacionada