以前 tmux のステータスラインに曲情報を表示するというのをやっていたのですが、WezTerm に戻ってきたので、それ用にメンテナンスしました。
以前はシェルスクリプトを組んでいたのですが、WezTerm だとあまり都合が良くないため、ワンライナーで動くコマンドを作りました。
また、以前使用していた、nowplaying-cli
が新しめの macOS (多分 Sequoia 以上 )で動かないため media-control
に乗り換えました。
結論
media-control get -h | jq -r '
def truncate(n): if length > n then .[0:(n-3)] + "..." else . end;
if .playing then
"🎵 \(.title) - \(.artist)" | truncate(35)
else
"🚫"
end'
実行すると以下のようになります。実際には絵文字部分は Nerd Font のアイコンを使ってます。
# 再生中
> 🎵 Daydream café - 山田リョウ
# 再生中 (曲名やアーティスト名が長い場合)
> 🎵 空想ルンバ - 大槻ケンヂと絶望少女達 (野中藍, 井上麻里...
# 停止中
> 🚫
WezTerm での設定
wezterm.run_child_process
で任意のコマンドを実行できるのですが、PATH
が読み込まれないため brew で入れているコマンドはフルパスで指定するなどの工夫が必要です。
他にもいろいろやりようあるっぽいのですが、今回はシンプルにフルパスで指定してます。
local music_info = ""
-- wezterm.run_child_process でエラーになることがあったので安全のために pcall で囲っておく
pcall(function()
local media_control = "/opt/homebrew/bin/media-control"
local jq = "/opt/homebrew/bin/jq"
local jq_format = [[
def truncate(n): if length > n then .[0:(n-3)] + "..." else . end;
if .playing then
"🎵 \(.title) - \(.artist)" | truncate(35)
else
"🚫"
end
]]
local success, title = wezterm.run_child_process({
"zsh",
"-c",
media_control .. " get -h | " .. jq .. " -r '" .. jq_format .. "'",
})
if success then
music_info = title:gsub("%s+", " ")
end
end)
-- ...
-- いい感じに music_info を表示する
設定すると画像のように曲情報が表示されます
今回は WezTerm での例でしたが、tmux や Zellij などにも持ち運びやすいコマンドになったと思うので乗り換えのたびにいろいろ設定しないで済みそうです。
以上!良いターミナルライフを。