
У меня был простой скрипт Conky для аудиоплеера Deadbeef:
Часть, которая касается строк выше, такова:
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}
Как добавить полосу прогресса, показывающую ход воспроизведения песни?
решение1
Я тоже искал способ сделать это, и поскольку я уже использовал скрипт lua для своего файла conky, я решил создать функцию lua для этого, чтобы мне не пришлось полагаться на внешние скрипты bash.
Если кто-то заинтересован в этом, вам необходимо включить свой lua-файл в conkyrc в раздел conky.config:
conky.config = {
...other config options...,
lua_load = '/path/to/file.lua'
}
затем в вашем lua-файле вам нужна следующая функция (обратите внимание, что она использует новый синтаксис форматирования foobar от deadbeef, который появился в deadbeef 0.7.0, и который не только более надежен в будущем, поскольку старый синтаксис устарел, но и упрощает вычисления) [исправил глупую опечатку, которую только что заметил]:
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
Затем добавьте в раздел conky.text:
${lua_bar song_progress}
Обратите внимание, что здесь используется новый синтаксис conky 1.10, а для кода lua требуется lua 5.3+.
решение2
Вы можете нарисовать полосу размером по умолчанию, используя execbar
команду, которая должна вернуть число от 0 до 100, указывающее, какой процент полосы заполнен. Например, если у вас есть следующий скрипт оболочки myscript
в вашем 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
}'
то вы можете использовать строку conky:
${execbar myscript}
Скрипт просто преобразует прошедшее и общее время, выведенное deadbeef, в секунды и, наконец, в проценты.
Результат выглядит так: