メモの日々


2008年03月31日(月) [長年日記]

  • やっとzshに手を出してみた。
  • IE7で見てみた。レイアウトが結構崩れているな。
  • Firefoxだとpreの表示が時々おかしくなる。何故だ。
  • Operaだと問題ないみたい。

[howto][shell] screenのキャプションにディレクトリ名 or コマンド名を表示

screenのキャプションにディレクトリ名やコマンド名を表示するための設定を調べたのでメモ。

キャプションの表示形式

まず、screenのキャプションがごちゃごちゃしていたので整理することにした。ウィンドウの番号と名前だけが表示されればよい。.screenrcに次を書く。

caption always "%?%F%{= wk}%:%{= ww}%?%-w%{=u Wk}%n %t%{-}%+w"

以前にメモした アキレス亀日記 と、マニュアルの文字エスケープの節を参考にした。

ウィンドウ名の変更

screenのキャプションには、ウィンドウの名前として実行されたプログラム名が入るみたい。なので普通に使うとシェルの名前(bashとかzshとか)が表示される。

ウィンドウの名前は「<esc>k名前<esc>\」というエスケープシーケンスで変更できる。例えば

echo -ne '\ekhello\e\\'

を実行すると「hello」に変わる。

カレントディレクトリ名の表示

zshの場合は、カレントディレクトリが変わるとchpwd()が呼ばれるようなので、chpwd()内で

echo -ne "\ek$(basename $(pwd))\e\\"

を実行するようにしたらウィンドウ名にカレントディレクトリ名が設定されるようになった。これだけだとディレクトリを移動するまではzshと表示されちゃうけれど。

bashの場合はプロンプトが表示される度に環境変数PROMPT_COMMANDの内容が実行されるようなので、ここに上のechoを設定したらうまくいったみたい。

実行中のコマンドの表示

screenには、ウィンドウ名に実行中コマンドを設定するのをサポートする機能があるようだ。screenのマニュアルのタイトル (ウィンドウの命名)の節に説明がある。

  • シェルのプロンプトに「<esc>k<esc>\」を含める。例えばbashなら「PROMPT_COMMAND='echo -ne "\033k\033\134"'」とすればいいみたい。
  • .screenrcに「shelltitle '$ |hoge'」などと書く。$ の所はシェルのプロンプトの末尾の文字を指定する。

とすると、何も実行していないウィンドウにはhogeが、何かを実行しているウィンドウにはコマンド名がウィンドウ名として表示された。

最後に実行したコマンドの表示

zshなら、最後に実行したコマンドを常に表示することができた。コマンドの実行前にpreexec()が呼ばれるようなので、ここで

echo -ne "\ek${1%% *}\e\\"

を実行するようにすればよい。「${1%% *}」の所でコマンド名を切り出しているんだろうけど意味は分かっていなくて、Setting the title to the name of the running program にあったものそのまま。

実行中のコマンドまたはカレントディレクトリ名の表示

んで、コマンド実行中はコマンド名を、未実行ならカレントディレクトリ名を表示したい。zshなら、

  • preexec()内で「echo -ne "\ek${1%% *}\e\\"」を実行
  • precmd()内で「echo -ne "\ek$(basename $(pwd))\e\\"」を実行

としたらできたみたい。後者は上でchpwd()内で実行していたのをprecmd()内で実行するように変えただけ。preexec()が設定した値をprecmd()で上書きするようにしている。

まとめ

現在は最後の「実行中のコマンドまたはカレントディレクトリ名の表示」となるようにして試用中。 関連する設定を抜き出しておく。

.zshrc

case "${TERM}" in screen)
    preexec() {
        echo -ne "\ek#${1%% *}\e\\"
    }
    precmd() {
        echo -ne "\ek$(basename $(pwd))\e\\"
    }
esac

.screenrc

caption always "%?%F%{= wk}%:%{= ww}%?%-w%{=u Wk}%n %t%{-}%+w"

screenshot

やること

  • シュレッダー
  • 健康保険料
  • 請求書