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.dat0.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 が作成され、利用できるようになる。