zshのプロンプトにだいたいの現在時刻(30秒ごとに自動で更新される)を表示しておく方法です。
コマンドを実行した時刻が残るので、コンソールを見返す際に便利だったりします。
設定例
PROMPT="%F{green}[%m-%T]%f%# " RPROMPT="%(?..%F{red}-%?-)%F{green}[%1(v|%F{yellow}%1v%F{green} |)%n:%~]%f" # 時刻更新 TRAPALRM () { zle reset-prompt } TMOUT=30
上記PROMPT、RPROMPTは私が使っているもの。%T(現在時刻)が入っていれば何でも良いです。
TRAPALRM は、ALRMシグナルのハンドラです。プロンプトを更新させます。
TMOUT=30 は、プロンプトが表示されっぱなしの状態だった場合、30秒毎にzshにALRMシグナルを発生させるという指定です。自動ログアウトに使われたりもしますが、これを利用して時刻更新の契機にしています。
参考: http://linux.die.net/man/1/zshparam
2014/1/7追記
上記だと、30秒に一度しか時刻が更新されないのであまり正確ではありません。
以下は、precmd_functions(プロンプト表示前に実行されるフック)を使って、zsh/datetimeモジュールで得た時刻から更新までのTMOUTを再計算することで、秒単位で正確な時刻を表示するように改良したバージョンです。
zmodload zsh/datetime # $EPOCHSECONDS, strftime等を利用可能に reset_tmout() { TMOUT=$[60-EPOCHSECONDS%60] } precmd_functions=($precmd_functions reset_tmout) # プロンプト表示時に更新までの時間を再計算 redraw_tmout() { zle reset-prompt; reset_tmout } # 時刻を更新 TRAPALRM() { redraw_tmout }
なおprecmdが定義されていると動作しないので、その場合はprecmd_functionsに置き換えてください。