screenコマンドは以下のような症状に悩んでいる人を幸せにしてくれる。
screenは、ひとつのtty(まあ一枚のktermって感じ)に、仮想的に10枚までのスク リーンを持つことができて、各スクリーンでは好きなプログラムを走らせること ができる。普通はシェルとか、rloginを走らせて複数のセッションを張って、そ れぞれ独立して走らせることができ、さらには全てのセッションを動かしたまま screen を終了し、あとから screen -r とすることによってすべてのセッション と再接続することができる。さらに、それぞれのスクリーンでは、C-a [ を押す ことで画面出力履歴をたどることができ、文字列検索やCOPY&PASTEをするこ とができる。
デフォルトだとscreenの機能の呼出prefixキーは、C-a だ。でもこれ Emacsユーザには耐えがたい。Emacsでもシェルでもあまり使わないキー。 最初に思い付いたのが、C-] でこれは telnet のエスケープのときにしか 使わないのでなかなか良い。でも欠点としては、片手で押せないからコー ヒーを飲みながら操作できない…。てことでわしは C-t で落ち着いた。 prefixは ~/.screenrc で次のようにして変えることができる。
escape ^t^t
っていってもktermのタイトルではなくて、ktermの一番したににょろっ と出るscreenのタイトル。普通は、[prefix] w なんて押すとscreen的タ イトル一覧が出て来る。一覧も数秒すると消えちゃって、今どのスクリー ンだったか、忘れがち。そんなちみは ~/.screenrc に
defhstatus "^En:^Et"と書くべし(情報 by keisuke)。あこりゃ便利だわ。ついでにこの常駐タイトルを変えるに は、ktermのタイトルを変えるのと同じエスケープシーケンスが使えるよ うになる。~/.zshrc に
title () {echo -n "\e]0;$*\a"}
と入れておこう。ちなみに \e は ESC コード、\aはBELLコード(C-g)を意
味する。
% title hoge:なんてやるとscreenタイトルがその場で変わるし、screenを起動せず生 ktermで使っているときにはktermのウィンドウタイトルが変わる。
zshの説明でも述べたが、ふつープロ ンプトには色がつくものだ。が screenのデフォルト状態ではうまくつかない(親がktermのとき)。これを 解消するには、~/.screenrc にコレ。
# our xterm has colors! (rxvt, too)
termcap xterm* 'AF=\E[3%dm:AB=\E[4%dm'
terminfo xterm* 'AF=\E[3%p1%dm:AB=\E[4%p1%dm'
termcap kterm* 'AF=\E[3%dm:AB=\E[4%dm'
terminfo kterm* 'AF=\E[3%p1%dm:AB=\E[4%p1%dm'
termcap vt100 'AF=\E[3%dm:AB=\E[4%dm'
terminfo vt100* 'AF=\E[3%p1%dm:AB=\E[4%p1%dm'
ただ、こうすると、ktermのときもscreenのときも全く見栄えが同じなの
で、ちょいと操作を間違って悲しい思いをすることがある。なので、わし
はktermのときはzshの右側プロンプトを黄色にして、screenのときは白の
ままにしている。
#(in .zshrc)
RPROMPT='%{^[[33m%}[%~]%{^[[m%}'
[[ "$TERM" = "screen" ]] && RPROMPT="[%U%~%u]"
ちなみに ^[ とある部分は二つともESCコード。Emacsなら C-q C-[ と打っ
て入れよ。
なに、化けた? ならこれを試してみよ。
termcap kterm G0:KJ=jis
terminfo kterm G0:KJ=jis
#termcapinfo kterm G0:KJ=euc
termcap xterm* G0:KJ=jis
terminfo term G0:KJ=jis
やはりそう思うけ?
# これでステータスラインが消えなくなる termcapinfo kterm 'hs:ts=\E[?2S\E[?E\E[?%i%dT:fs=\E[?F:es:ds=\E[?E' #termcapinfo xterm* 'hs:ts=\E[?E\E[?%i%dT:fs=\E[?F:es:ds=\E[?E' # 反転が変にならない termcapinfo kterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l' # 縮まない termcapinfo kterm 'cl=\E[H\E[2J'
要らないと思うけどわしの~/.screenrc