先看图吧:
乱不乱?这是我自己用的一个web游戏机器人程序的输出,游戏自然一切都是数字说了算,可每次看这一大堆数字实在是让我头疼,从中找出有用的数据太难了,对齐、缩进都办法也不怎么见效,突然我想到,如果用escape color输出彩色的文本,应该看起来会舒服很多吧?
说到escape color,用过bash的人应该都见过,只是不知道它叫这么名字而已。ls中彩色的文件、目录名就是用escape color来实现的。早些年用得比较多的telnet形式的bbs,它的颜色也是escape color,最明显的特征就是bbs文章被转贴到别处的时候,经常会多出一些ESC
什么的字符出来,这就是escape color的控制字符。
想完整的了解escape color,资料很多,[wikipedia – ANSI escape code](http://en.wikipedia.org/wiki/ANSI_escape_code)就有比较完整的解释,中文的资料也不少,比如[啦啦~在bash下输出彩色的文本](http://www.fedorachina.cn/index.php/topic,124.0.html),甚至还有人做出了颜色表:[The 256 color mode of xterm](http://www.frexx.de/xterm-256-notes/)。
不用觉得眼花缭乱,简单说来,escape code就是在终端(terminal)中输出的控制字符,不光包括文字颜色,还可以控制很多其它内容,当然,颜色是比较常用的,所以习惯称之为escape color。我在这里也只讲颜色,其它控制字符的使用方式大同小异,但需要主意不同的终端类型可能会略有区别。
escape color的格式为:
<ESC>[{attr};{fg};{bg}m
其中<ESC>[
是起始字符,在bash中一般是16进制的0x1b,也就是八进制的033,十进制的27,另外一种表现方式就是^[
,熟悉吧,在bash中按一下Ctrl+v再按ESC它就出来了。后面分别是attr
模式、fg
前景色、bg
背景色,中间用逗号;
间隔,最后用字母m
结尾。
attr的取值有:
0 Reset All Attributes (return to normal mode) #重置所有设置,回归自然
1 Bright (Usually turns on BOLD) # 高亮/加粗
2 Dim
3 Underline
5 Blink
7 Reverse
8 Hidden
fg的取值有:
30 Black
31 Red
32 Green
33 Yellow
34 Blue
35 Magenta
36 Cyan
37 White
bg的取值有:
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White
可以看到,attr/fg/bg的用值范围不重叠,所以空缺哪个无所谓。
在用php输出的时候,只需要在正常字符串内容中,加入适当的escape color代码就可以了,其实其它应用程序也是类似操作的,并不需要额外的设置,比如:
$ php -r 'echo "\x1b[5;31;44m第一种色彩\x1b[3;34;41m第二种色彩\x1b[0m 回归自然\n";'
看到彩色了吧?秀一下我那个机器人美化之后的界面:
顺便说一句,把字符串储存到文件中的时候,escape color也可以一起存上的,浏览时,cat和tail默认就支持颜色显示,less则需要带上-R
参数才行。
Gold 2,603,649,618 ……………….. 真有钱啊….. 看上去好像MUD似的呢?
勾起了我去搞MUD的冲动呢……. 🙂
钱多是因为通货膨胀。。。。
不是mud,是网页游戏,网站在这里:http://www.standardwarfare.com/
人不是很多,比较简单。
看到你的文章,我把cvs 命令输出的颜色给改了. 现在看着是很清除 挺好的了.
可惜有个不爽的地方, 我重定向到文件的时候它把esc color的代码也写到文件里了 导致我用vim看很难看….
不知道阁下是不是有什么好方法没有.