screenのステータスバーを実行したコマンド名にする。
昨日最後に書いてた
screenのステータスラインでウィンドウ毎に実行されている(された)
プログラム名を表示する方法を紹介します。
実行すると↓の様になります。
[23:46] 0 vi 1 mongrel_rails 2 top 3 tail 4 autotest
tail でログを流しつつmongrel_rails 起動したり、topでプロセスの動作確認しつつ
viでプログラム弄るとやってるんですが、windowを切り替える時にどのウインドウで
どの作業してたかわからなくなるので、こんなことしてみました。
あまり切り替えで役に立ったことないけど、
top実行したいけど、top用のウインドウ起動してないから^t cで作成してtopとかには
使えます。
というわけで必要な設定。
まず~/.screenrcから
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
要はウインドウ名出してくれれば良いだけです。
で、.zshrc
preexec () { if [ $TERM = "screen" ]; then 1="$1 " # deprecated. echo -ne "\ek${${(s: :)1}[0]}\e\\" fi }
TERMがscreenの時、コマンド名の1個目を引き渡してます。
実際の自分の端末は、コマンドの実行のたびにプロンプトに時間を表示してます。
preexec () { PROMPT='%D %T %(!.#.$) ' RPROMPT='[%~]' if [ $TERM = "screen" ]; then 1="$1 " # deprecated. echo -ne "\ek${${(s: :)1}[0]}\e\\" fi }
なので、プロンプトがこんな感じになってる。
08-01-17 12:03 $
実は、時間がリアルタイムで表示されるわけじゃないんですが、
プロンプトのログをputtyでとってるので、
後で時間確認するのに便利なんですよね。