zshプロンプトの時間表示をリアルタイムっぽく更新する
シグナルについて少し学んだのでzshでの活用法を考えてみた。
方法
zshのタイムアウトを1秒に設定する。タイムアウトごとに送られてくるSIGALRMをトリガーにして、プロンプトを更新する。
export TMOUT=1 function TRAPALRM() { zle .reset-prompt }
結果
時計が秒刻みで更新されるようになった。
発生する問題
プロンプトを更新する際に情報の再計算をする。
時刻以外に再計算するもの(例:git, svnの情報表示など)がたくさんあると、処理しなければならないものが増えて、むやみにリソースを消費する。ノートパソコンならバッテリを消耗するかもしれない。
補完などで行送りが発生すると表示がおかしくなる。
1秒ごとに更新されてテキストがグチャグチャになる。
別のアプローチ
常に更新するのではなく、コマンドを実行したときだけ更新することもできる。過去に紹介している。