前言
终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。
1.格式
- 转义序列以控制字符’ESC’开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。
- 多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符(CSI,Control SequenceIntro),通常由’\033[‘或’\e['代替。
- 通过转义序列设置终端显示属性时,可采用以下格式:\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
2.常用参数
-
显示方式:0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)
-
颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白),前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色。
-
通过转义序列设置终端显示属性时,常见格式为:\e[显示方式;前景色;背景色m输出字符串\e[0m,其中’\e[0m’用于恢复默认的终端输出属性,否则会影响后续的输出。
3.具体用法
在我的工程代码中,只使用了对前景色的设置,总共包括5种色彩,对应了系统级错误,严重错误,警告,一般信息,调试信息,冗余信息。
###3.1.定义
#define ms_consolecodes_none “\e[0m”
#define ms_consolecodes_brightred “\e[1;31m”
#define ms_consolecodes_green “\e[0;32m”
#define ms_consolecodes_brightyellow “\e[1;33m”
#define ms_consolecodes_brightblue “\e[1;34m”
#define ms_consolecodes_brightcyan “\e[1;36m”
static const char *ms_col[64]={
ms_consolecodes_brightblue, //assert
ms_consolecodes_brightred, //error
ms_consolecodes_brightyellow, //waring
ms_consolecodes_brightcyan, //info
ms_consolecodes_none, //debug
ms_consolecodes_green}; //verbose
###3.2.应用
printf("%s" fmt ms_consolecodes_none "\r\n",ms_col[log_level],##arg );
4.额外补充
通过man命令可查看更多的参数描述,