01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
% time perl -w test.pl test.dat ; time ./ruby -w test.rb test.dat
0.70u 0.03s 0:01.13 64.6%
1.79u 0.10s 0:03.22 58.6%
X で利用する curses 対応ソフトで画面が復帰 (再描画) されないよう
にする
これは以前から非常に不満に思っていたのだが、
* man, vi, less, w3m などを使ってちょっとファイルを見たあと、
* プログラムを終了させて表示処理から抜けると、
* そのソフトでわざわざ表示させた文字列がきれいに消えて
* terminal に表示されている文字列がそのソフトの実行前の状態になる
例えば man termcap などとして、何かのアトリビュートの説明を 検索
して表示させたあと、その場で q と打てば、そのアトリビュート
の 説明が画面上に残っていてほしいわけだ。しかし、RedHat では
せっかく表示したものが消えてなくなってしまう。
このような画面の復帰をやめさせるには RedHat の場合は TERM=xterm1
を指定すればよい。/etc/termcap を見ると、 xterm1 のエントリがあ
るが、ここでは ti@, te@ を指定 している。
less --no-init, w3m -X などと する方法もあるが、これだと vi には
効かない。vi などでも 効果を出すには terminfo の変更が必要。
該当するのはこの部分になる:
:ti=\E[?1048h\E[?1047h: --- 端末初期化時処理
:te=\E[?1047l\E[?1048l: --- 端末終了時処理
ESC [ ? Pn h はモードの退避、
ESC [ ? Pn l はモードの復帰らしい。
1047,1048,1049 については man xterm を見ると、いくつかの 命令が
組み合わされた xterm 用のエスケープシーケンスらしい。
なお、その他の ANSI/ECMA のエスケープシーケンス表は /etc/termcap
の最後の方にある。
xterm1 をわざわざ指定するのがいやな場合は xterm-xfree86 の 部分
だけを別ファイルに取り出し、上の変更を加えたあと 自分のユーザ権
限のままで tic my-xterm.termcap などとすれば 自分のホームディレ
クトリの .terminfo/x/xterm-xfree86 という ファイルに terminfo が
作成され、利用できるようになる。