【Linux】C/C++/Shell 改变终端程序输出的字的颜色

之前在写shell脚本的时候,尝试了改变终端程序中输出的字的颜色,大致格式如下:

echo "\033[字背景颜色;字体颜色m字符串\033[0m"

例如:

echo "\033[41;36m something here \033[0m"

其中41的位置代表底色, 36的位置是代表字的颜色。

今天发现C/C++程序中改变终端程序输出的字的颜色的方法和Shell脚本中的基本类似,现在来总结一下。

在C中只需要用printf函数代替上边的echo -e就OK了。参见下例:

#include 
int main()
{
    printf("\033[31mThis is RED.\n\033[0m");
    return 0;
}

31m代表字体为红色,0m代表关闭所有属性。

简单的说就是ESC[*m,ESC的八进制为\033,*可以是多个属性的组合,用分号隔开。

常用的ANSI控制码如下(有些不支持):

\033[0m 关闭所有属性 
\033[1m 高亮
\033[2m 亮度减半
\033[3m 斜体
\033[4m 下划线 
\033[5m 闪烁 
\033[6m 快闪
\033[7m 反显 
\033[8m 消隐 
\033[9m 中间一道横线
10-19 关于字体的
21-29 基本与1-9正好相反
30-37 设置前景色
40-47 设置背景色

# 字颜色:30--37
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
38 打开下划线,设置默认前景色 
39 关闭下划线,设置默认前景色 

# 字背景颜色范围:40--49
40 黑色背景 
41 红色背景 
42 绿色背景 
43 棕色背景 
44 蓝色背景 
45 品红背景 
46 孔雀蓝背景 
47 白色背景 
48 不知道什么东西
49 设置默认背景色

50-89 没用
90-109 又是设置前景背景的,比之前的颜色浅
\033[nA 光标上移n行 
\033[nB 光标下移n行 
\033[nC 光标右移n行 
\033[nD 光标左移n行 
\033[y;xH设置光标位置 
\033[2J 清屏 
\033[K 清除从光标到行尾的内容 
\033[s 保存光标位置 
\033[u 恢复光标位置 
\033[?25l 隐藏光标 
\033[?25h 显示光标

建议

可以在程序头部定义一些宏变量,这样程序看起来更简洁。
如:发生错误的时候,错误信息显示红色;发送警告的时候,警告信息显示黄色。

#define WARN_MSG_V(msg, ...) \
    printf("\033[33m" msg "\n\033[0m",  ##__VA_ARGS__)

#define ERR_MSG_V(msg, ...) \
    printf("\033[31m" msg "\n\033[0m",  ##__VA_ARGS__)

当然,也可以加上这些错误/警告发送在哪个函数,哪一行:

#define ERR_MSG_V(msg, ...) \
    printf("** ERROR: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)

#define INFO_MSG_V(msg, ...) \
    printf("** INFO: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)

#define WARN_MSG_V(msg, ...) \
    printf("** WARN: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章