zsh: コマンドが開始されたときにプロンプ​​トを現在の時刻で更新する 質問する

zsh: コマンドが開始されたときにプロンプ​​トを現在の時刻で更新する 質問する

私にはかなり気に入っているプロンプトがありますzsh。これは、現在の時刻を評価しprecmd、それをプロンプトの右側に表示します。

[Floatie:~] ^_^ 
cbowns%                      [9:28:31 on 2012-10-29]

しかし、これはその通り私が望んでいること: 以下に示すように、この時間は実際にはコマンドが開始された時間ではなく、前のコマンドが終了した時間です。

[Floatie:~] ^_^ 
cbowns% date                           [9:28:26 on 2012-10-29]
Mon Oct 29 09:28:31 PDT 2012
[Floatie:~] ^_^ 
cbowns% date                           [9:28:31 on 2012-10-29]
Mon Oct 29 09:28:37 PDT 2012
[Floatie:~] ^_^ 
cbowns%                                [9:28:37 on 2012-10-29]

zshコマンドを実行するためのフックはありますか?前にシェルは新しいコマンドを開始し、プロンプトのタイムスタンプを更新できますか?(私はzsh プロンプトの時計が常に更新されますか?、でもそれは必要ありません常に更新されました。Enter キーを押したときに更新されました。

(これは^_^前のコマンドの戻りコードに基づいています。;_;終了ステータスがゼロ以外の場合は赤で表示されます。)

ベストアンサー1

これは実際には奇妙なハックに頼らなくても可能です。私はこれを.zshrcに持っています

RPROMPT='[%D{%L:%M:%S %p}]'

TMOUT=1

TRAPALRM() {
    zle reset-prompt
}

TRAPALRM 関数は TMOUT 秒ごとに (この場合は 1 秒ごとに) 呼び出され、ここでプロンプトの更新を実行します。これは、コマンドの実行が開始されるまで実行されます (また、Enter キーを押す前にプロンプ​​トに入力した内容には影響しません)。常に更新する必要はないことはわかっていますが、それでも、1 行も記述せずに作業を完了できます。

ソース:http://www.zsh.org/mla/users/2007/msg00944.html(2007年のものです!)

おすすめ記事