【もうscreenが無ければ生きてゆけない】

Last modified Wed Jan 9 10:38:29 2008 on firestorm

ものぐさなきみにはscreenがお似合い

screenコマンドは以下のような症状に悩んでいる人を幸せにしてくれる。

screenは、ひとつのtty(まあ一枚のktermって感じ)に、仮想的に10枚までのスク リーンを持つことができて、各スクリーンでは好きなプログラムを走らせること ができる。普通はシェルとか、rloginを走らせて複数のセッションを張って、そ れぞれ独立して走らせることができ、さらには全てのセッションを動かしたまま screen を終了し、あとから screen -r とすることによってすべてのセッション と再接続することができる。さらに、それぞれのスクリーンでは、C-a [ を押す ことで画面出力履歴をたどることができ、文字列検索やCOPY&PASTEをするこ とができる。

Tips for `screen'

[prefix] キー

デフォルトだと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 にコレ。

# 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


yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]