|
1. ANSI escape code: |! p( S2 u' E; D8 Q* w 最近在研究日志打印组件easylogger,玩转各种彩色日志打印不亦乐乎,好奇心越来越重,遂深入研究,发现了一个非常神奇的东西:ANSIescape code! escape sequence code 全称叫做 escapesequence code,即 Escape 序列屏幕控制码,其实就是一些特殊的字符,将这些字符加入到printf打印的内容中,即可轻松实现在终端软件中以各种颜色、各种背景色显示内容,还可以高亮、加粗、闪烁,非常好玩! 2. 序列码格式一串escapecode的内容如下: · 特殊字符\033 :通知终端切换到escape模式;· 起始字符[:CSI内容的开始;· CSI内容字符(见下表);· CSI结束字符m:CSI内容的结束;6 u e/ F' t3 V) n其中,CSI模式全称Command Sequence Introduction,当终端软件处于CSI模式时,终端软件读取之后的ASCII码作为CSI内容,直到读入CSI结束字符,代表不同字符的ASCII字符之间用分号隔开。 代表背景颜色的特殊ASCII字符:
代表字体颜色的特殊字符:
其它一些屏幕控制ASCII字符:
最后还有一些控制终端光标的字符:
blabla一大堆,没法理解,接下来用实例说话,首先准备一份已经重定向printf到串口的工程,保证printf可以正常使用即可,并且使用终端软件查看串口输出(eg.Mobaxterm)。 ① 打印没有背景色,字体颜色为绿色,字体正常的字符: printf("\033[32mHelloWorld\r\n");编译下载,即可看到效果:
* _2 l9 }+ }; W/ a6 B8 k ② 及时取消属性 设置属性之后,该属性在终端中一直存在,必须要及时取消,比如在刚刚的printf之后,继续正常打印,不加特殊字符,依然会打印绿色字符: printf("\033[32mHelloWorld\r\n");; p- t* C) j; Q; m2 n( qprintf("HelloWorld 2\r\n");+ \6 A N& O% n7 k7 s) ?& [. U printf("HelloWorld 3\r\n");
所以要在使用完毕后及时取消所有属性设置,如下: printf("\033[32mHelloWorld\033[0m\r\n");printf("HelloWorld 2\r\n"); printf("HelloWorld 3\r\n");
8 Q: ]5 p# n, W0 {) u) U ③ 多个特殊字符一起设置 比如这里我同时设置打印颜色为绿色,字体在终端闪烁: printf("\033[32;5mHelloWorld\033[0m\r\n");
' D" m0 N) w9 o1 f$ | D 怎么样,在终端打印各种好玩的字符是不是非常简单~自己上手玩玩吧! + J: ]) Y0 ^/ C6 n |
微信公众号
手机版