awesomeのツールバー表示を変える。

日時が出てないもんだから今の時刻がわからず、最近ついつい夜更かしをしてしまうことが増えた。これでは健康に悪いので改善しようってのが元々の動機。
実は現在の最新版(git版)だとやりかたが変更されている。ってわけで、現在のstableである1.3でのやりかたと2.0(予定)でのやりかたを順に解説する。

awesome 1.3の場合

awesomeの標準入力に流しこんでやればいい。ウチは確かこんな感じ。

[ -p $HOME/.status_bar ] || mkfifo $HOME/.status_bar
$HOME/bin/output_date > $HOME/.status_bar &
exec awesome <> $HOME/.status_bar
#!/bin/sh

while true
do
date
sleep 1
done

awesome 2.0の場合

awesome-clientというのが導入された。
これは標準入力に流しこまれるテキストを解釈し、引数で与えたDISPLAYにて起動中のawesomeにuicb関数を実行させる働きをする。
流しこむテキストのフォーマットは「ディスプレイ番号 uicb関数名 uicb関数への引数」をスペースで区切ったもの。
というわけでこんな感じになる。

#!/bin/sh
while true
do
echo "0 setstatustext `date`" | awesome-client $DISPLAY
sleep 1
done

これをテキトーなタイミングでバックグラウンド実行してやればOK。わざわざ$DISPLAYを与えているのは、与えない場合面倒が起きる環境がある為。(まあ、colinux+xming環境だからだけど)
10/29に追加されたばっかりの機能のためほとんどドキュメントが無く(メーリングリストに多少あったけど)、結局ソースを読んで理解した。
しかし読んでいて謎だったのが…

    if(display)
        a_strcat(addr->sun_path, path_len, display + 1);
    else
        a_strcat(addr->sun_path, path_len, "0");

ここでdisplay + 1してるのは一体!?
おかげで~/.awesome_ctl.ocalhost:10.0とか変な名前になっちゃってるんだけど。英語で聞く度胸もないので謎のままにしておく。

まあとにかく

標準入力に流しこむだけって設計になっているおかげで、好き勝手できるようになっている。
ちょっと探せばメールチェックとかCPU使用率とか表示するスクリプトが見付かるはず。いろいろ遊んでみよう。