コンソールで色つきを表示するPEARやその他の方法
「phpのバッチでターミナル上で色をつける方法」d:id:maru_cc:20080216:1203166254 これで書いた、コンソールに色つきで文字を表示する方法について、PEARとかにありそうだなぁと思ったので、調べてみたらやっぱりあった。
PEAR Console_Color
http://pear.php.net/manual/ja/package.console.console-color.php
%で指定した文字を渡すことで、色つきの文字を表示することができるらしい。
どんなコードなのか、落として見てみた。
やってることは、一緒だが、ちょっと見慣れない文字を発見。
<?php return "\033[".$colors['color'][$name].'m';
「\033」?
どうやらESC文字を出すための参照のようだが、phpのマニュアルではそれらしい記述を見つけることが出来なかった。
あるとすれば、以下の「PHP をコマンドラインから使用する」の下のほうにあるUser Contributed Notesで書いてあるだけだ。
http://jp.php.net/manual/ja/features.commandline.php
User Contributed Notesを見ていたらさらに「ん?」と思うところが。
$clearscreen = chr(27)."[H".chr(27)."[2J";
chr関数使っても同じことが出来たみたいでした。
http://jp2.php.net/chr
さらにchr関数のところを見たら、sprintfの%cでも同じことが出来る模様。
<?php echo pack('c',0x1B) . "[34mhoge" . pack('c',0x1B) . "[0m\n"; echo chr(27) . "[34mhoge".chr(27) . "[0m\n"; echo sprintf("%c[34mhoge%c[0m\n", 27, 27); echo "\033[34mhoge\033[0m\n";
すべて同じ結果になる。色つきのhogeが表示される。
もちろん、バイナリ文字を埋め込んでもOKだが、そうすると編集環境を選ぶことになってしまう。
\033とはなんぞや?
phpのソースを探してみると、それらしい宣言を発見。
php-5.2.5 regex/cname.h
/* character-name table */ static struct cname { char *name; char code; } cnames[] = { {"NUL", '\0'}, {"SOH", '\001'}, {"STX", '\002'}, {"ETX", '\003'}, (略) {"ESC", '\033'}, {"IS4", '\034'}, {"FS", '\034'}, {"IS3", '\035'}, {"GS", '\035'}, {"IS2", '\036'}, {"RS", '\036'}, {"IS1", '\037'}, {"US", '\037'}, (略)
実際に使用している箇所ではないようですが、関係ありそうです。
phpヘルプ探したけど適当なページが見つかりませんでした。
どっかに情報ありますか?
追記(2008-02-19)
http://jp2.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double
こちらの二重引用符のところに情報がありました。
\[0-7]{1,3} 正規表現にマッチする文字シーケンスは、8 進数表記の 1 文字です。
cocoa_rutoさん、ありがとうございます。