読者です 読者をやめる 読者になる 読者になる

コンソールで色つきを表示する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さん、ありがとうございます。