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のウィンドウタイトルが変わる。
(垣花さんによる追加情報) 端末の種類によっては
title (){/bin/echo -n "\ek$*\e\\"}
というシーケンスで可能。
zshの説明でも述べたが、ふつープロ ンプトには色がつくものだ。が screenのデフォルト状態ではうまくつかない(親がktermのとき)。これを 解消するには、~/.screenrc にコレ。
ただ、こうすると、ktermのときもscreenのときも全く見栄えが同じなの で、ちょいと操作を間違って悲しい思いをすることがある。なので、わし はktermのときはzshの右側プロンプトを黄色にして、screenのときは白の ままにしている。# 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'
ちなみに ^[ とある部分は二つともESCコード。Emacsなら C-q C-[ と打っ て入れよ。#(in .zshrc) RPROMPT='%{^[[33m%}[%~]%{^[[m%}' [[ "$TERM" = "screen" ]] && RPROMPT="[%U%~%u]"
なに、化けた? ならこれを試してみよ。
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