vorfee's Tech Blog

Just another tech blog

zshプロンプトの時間表示をリアルタイムっぽく更新する

シグナルについて少し学んだのでzshでの活用法を考えてみた。

方法

zshタイムアウトを1秒に設定する。タイムアウトごとに送られてくるSIGALRMをトリガーにして、プロンプトを更新する。

export TMOUT=1
function TRAPALRM() {
  zle .reset-prompt
}

結果

時計が秒刻みで更新されるようになった。

f:id:vorfee:20170202182502g:plain

発生する問題

  • プロンプトを更新する際に情報の再計算をする。

    時刻以外に再計算するもの(例:git, svnの情報表示など)がたくさんあると、処理しなければならないものが増えて、むやみにリソースを消費する。ノートパソコンならバッテリを消耗するかもしれない。

  • 補完などで行送りが発生すると表示がおかしくなる。

    1秒ごとに更新されてテキストがグチャグチャになる。

別のアプローチ

常に更新するのではなく、コマンドを実行したときだけ更新することもできる。過去に紹介している。