screen の見た目を変えた
コマンド実行中の場合はコマンド名を表示し,それ以外はカレントディレクトリ名を表示したかったのでいろいろ調べて .zshrc
をいじってみました。
.zshrc
if [ "$TERM" = "screen" ]; then local -a shorthost echo $TERMCAP | grep -q -i screen if [ $? -eq 0 ]; then shorthost="" else shorthost="${HOST%%.*}:" fi echo -ne "\ek$shorthost\e\\" preexec() { echo -ne "\ek${shorthost}($1)\e\\" echo -ne "\e_`dirs`\e\\" } precmd() { echo -ne "\ek${shorthost}$(basename $(pwd))\e\\" } fi
\e
でエスケープ文字を表現できるのかー- 環境によっては出ないかもなので
-e
オプションを明示的に指定してる
- 環境によっては出ないかもなので
$(basename $(pwd))
の部分がいまいち好みじゃないけどいい案が思いつかない`dirs`
も時として冗長になる$TERMCAP
を grep してるところは,screen を起動したホストの場合はホスト名をつけずに,そうでない場合はホスト名をつけるため${HOST%%.*}
ってところは zshexpn 参照- ざっくりいうと,
.*
の部分は shell glob pattern で考える %%
は末尾からの longest match でマッチしている部分を削除する- つまり結果的に
$HOST
の「.
」以下を削除した結果になる
- ざっくりいうと,
- 元ネタとかたいてい実行中のコマンド自身をパラメータなしで表示するようにしてるけど,コマンド全体を表示するようにした
.screenrc
もともとどっかからのコピペで
hardstatus ignore "#%n %t | %h" caption always "[%c] %`%-w%{=b bw}%n %t%{-}%+w"
ってしてたんですが,やっぱり時計はいらないなということで削除。backtick コマンド使ってないくせに %`
とか残ってるし。
で先ほどの screenのキャプションにディレクトリ名 or コマンド名を表示 - メモの日々 (2008-03-31) を見たらちょっとかっこよかったんで caption の部分だけ参考にしてみました。
caption always "%?%F%{= kw}%:%{= wK}%?%-w%?%F%{=b bW}%:%{= Wk}%?%n %t%{-}%+w"
%
だらけでめまいがしますけど,%?
〜%:
〜%?
が三項演算子のように働くと考えればそう難しくなかったです。解説を書こうと思ったんですが,元記事であげられている caption について - アキレス亀日記 - 2004/06a Diary がひっじょーにわかりやすかったのでそちらをご参照ください。
元記事だとフォーカスされてないペインのインアクティブなタブを見えないようにしてたんですが,そのへんは見えるようにしています。色も変更。むかし設定していた内容よりかなり好ましいものになりました。バーの色が純黒じゃないのが結果的に好み。
おまけ(screen のエスケープキー)
screen のエスケープキーはやっぱり CTRL+\
にしました。ホームポジションから遠いけど,逆にミスタッチしないですし。
なんで .screenrc
は
escape ^\\\
として,
From: [148] 名無しさん@お腹いっぱい。 Date: 03/05/09 23:25 >>146 自分も ^\\\ に変えた頃は、 screen を使っていない窓で時々 foreground の プロセスを殺してしまうので、stty でこの機能を使わないようにした。 必要あれば kill でシグナル送ればいいしねhttp://www.dekaino.net/screen/screen-thread2.txt
を参考に
stty quit undef
としました。zsh ならこれしなくても経験上大丈夫ぽいんですけど。