Scripting

在 conky 中,如何顯示在 Deadbeef 中播放的曲目的進度條?

  • November 27, 2017

我有一個用於 Deadbeef 音頻播放器的簡單 conky 腳本:

在此處輸入圖像描述

與上述行有關的部分是:

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}

如何添加進度條,顯示歌曲的進度?

execbar您可以使用後跟命令來繪製預設大小的條,該命令應返回一個從 0 到 100 的數字,給出條的填充百分比。例如,如果您myscript的 PATH 中有以下 shell 腳本:

#!/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 的經過時間和總時間輸出轉換為秒,最後轉換為百分比。

結果如下所示:

在此處輸入圖像描述

我也在尋找一種方法來執行此操作,並且由於我已經為我的 conky 文件使用了 lua 腳本,因此我決定創建一個 lua 函式來執行此操作,因此我不必依賴外部 bash 腳本。

如果有人有興趣走這條路,你需要在 conky.config 部分的 conkyrc 中包含你的 lua 文件:

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

然後在您的 lua 文件中,您需要以下函式(請注意,這是使用 deadbeef 0.7.0 附帶的 deadbeef 的新 foobar 格式化語法,這不僅是更多的未來證明,因為舊語法已被棄用,但簡化了計算)

$$ fixed a stupid typo I just noticed I had $$:

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+。

引用自:https://unix.stackexchange.com/questions/361461