以前 tmux のステータスラインに曲情報を表示するというのをやっていたのですが、WezTerm に戻ってきたので、それ用にメンテナンスしました。
tmux のステータスラインに再生中の曲名を表示する | nabekou29 Blog
年末からターミナルを wezterm から ghostty に置き換えてみてるのですが、そのついでに tmux も導入してみています。 tmux にはテーマとして dracula 入れており、ステータスラインに可愛くバッテリーや CPU の状態を表示してくれて気に入っています。
blog.nabekou29.com以前はシェルスクリプトを組んでいたのですが、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+", " ") endend)
-- ...-- いい感じに music_info を表示する設定すると画像のように曲情報が表示されます

今回は WezTerm での例でしたが、tmux や Zellij などにも持ち運びやすいコマンドになったと思うので乗り換えのたびにいろいろ設定しないで済みそうです。
以上!良いターミナルライフを。