Linux ANSI 控制码
ANSI 控制码格式
033[显示方式;前景色;背景色m
或者
e[显示方式;前景色;背景色m
其中, 33[或e[引导转义序列, m 表示设置属性并结束转义。显示方式、前景色(字体色)和背景色均为属性值, 是可以多选的, 多个参数之间用分号隔开, 不限制顺序。
转义序列相关常用参数
显示方式:
33[0m 关闭所有属性
33[1m 设置高亮度
3[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m — 33[37m 设置前景色
33[40m — 33[47m 设置背景色
33[nA 光标上移 n 行
3[nB 光标下移 n 行
33[nC 光标右移 n 行
33[nD 光标左移 n 行
33[y;xH 设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标
前景色(字体色)范围 30———–39:
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
字背景颜色范围 40—-49:
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
有一点要注意,如果输出带颜色的字符后并没有恢复终端默认设置,后续的命令输出仍旧会采用之前的颜色,如果是在脚本中设置了颜色而未恢复,则整个脚本的输出都会采用之前的颜色,因此如果不希望影响后面文字的输出,最好是在输出带颜色的文字之后恢复终端默认设置
注:33[0m 或者e[0m 用于恢复默认终端输出属性, 否则影响后续输出。
Linux 平台测试实例
#include <stdio.h>
int main()
{
printf("----------------------------------------------------n");
printf(" e[5;31;42m Warning e[0m n");
printf("33[0m你好麽,33[1m我很好。。n");
printf("33[30;1m你好麽,33[31;1m我很好。。n");
printf("33[32;1m你好麽,33[1m我很好。。n");
printf("33[33;1m你好麽,33[34;1m我很好。。n");
printf("33[35;1m你好麽,33[36;1m我很好。。n");
printf("33[37;1m你好麽,33[38;1m我很好。。n e[0m");
printf("----------------------------------------------------n");
return 0;
}
上述测试代码里,Warning 字符串表示闪烁、红色字体以及绿色背景色。
其他则增加了加高亮和增加相关颜色处理。
下述测试代码增加了背景色处理,函数代码和输出结果如下:
#include <stdio.h>
int main()
{
printf("----------------------------------------------------n");
printf(" e[5;31;42m Warning e[0m n");
printf("33[0m你好麽,33[1m我很好。。n");
printf("33[30;1m你好麽,33[31;1m我很好。。n");
printf("33[32;1m你好麽,33[1m我很好。。n");
printf("33[33;1m你好麽,33[34;1m我很好。。n");
printf("33[35;1m你好麽,33[36;1m我很好。。n");
printf("33[37;1m你好麽,33[38;1m我很好。。n e[0m");
printf("----------------------------------------------------n");
printf("----------------------------------------------------n");
printf("33[41;1m你好麽,33[0m我很好。。n");
printf("33[42;1m你好麽,33[0m我很好。。n");
printf("33[43;1m你好麽,33[0m我很好。。n");
printf("33[44;1m你好麽,33[0m我很好。。n");
printf("33[45;1m你好麽,33[0m我很好。。n");
printf("33[46;1m你好麽,33[0m我很好。。n");
printf("33[47;1m你好麽,33[0m我很好。。n 33[0m");
printf("----------------------------------------------------n");
return 0;
}
代码中设置为宏
给 printf 的输出加上些特效比如颜色,可以让打印信息更鲜明,在 debug 的时候特别有用。在代码中可设置为宏以方便使用:
#define NONE "33[m"
#define RED "33[0;32;31m"
#define LIGHT_RED "33[1;31m"
#define GREEN "33[0;32;32m"
#define LIGHT_GREEN "33[1;32m"
#define BLUE "33[0;32;34m"
#define LIGHT_BLUE "33[1;34m"
#define DARY_GRAY "33[1;30m"
#define CYAN "33[0;36m"
#define LIGHT_CYAN "33[1;36m"
#define PURPLE "33[0;35m"
#define LIGHT_PURPLE "33[1;35m"
#define BROWN "33[0;33m"
#define YELLOW "33[1;33m"
#define LIGHT_GRAY "33[0;37m"
#define WHITE "33[1;37m"
代码如下:
#include <stdio.h>
#define NONE "33[m"
#define RED "33[0;32;31m"
#define LIGHT_RED "33[1;31m"
#define GREEN "33[0;32;32m"
#define BLUE "33[0;32;34m"
int main()
{
printf("----------------------------------------------------n");
printf(" e[5;31;42m Warning e[0m n");
printf("33[0m你好麽,33[1m我很好。。n");
printf("33[30;1m你好麽,33[31;1m我很好。。n");
printf("33[32;1m你好麽,33[1m我很好。。n");
printf("33[33;1m你好麽,33[34;1m我很好。。n");
printf("33[35;1m你好麽,33[36;1m我很好。。n");
printf("33[37;1m你好麽,33[38;1m我很好。。n e[0m");
printf("----------------------------------------------------n");
printf("----------------------------------------------------n");
printf("33[41;1m你好麽,33[0m我很好。。n");
printf("33[42;1m你好麽,33[0m我很好。。n");
printf("33[43;1m你好麽,33[0m我很好。。n");
printf("33[44;1m你好麽,33[0m我很好。。n");
printf("33[45;1m你好麽,33[0m我很好。。n");
printf("33[46;1m你好麽,33[0m我很好。。n");
printf("33[47;1m你好麽,33[0m我很好。。n 33[0m");
printf("----------------------------------------------------n");
printf("----------------------------------------------------n");
printf( RED "current function is %s " GREEN " file line is %dn" NONE,__FUNCTION__, __LINE__ );
fprintf(stderr, LIGHT_RED "current function is %s " BLUE " file line is %dn" NONE,__FUNCTION__, __LINE__ );
printf("----------------------------------------------------n");
return 0;
}
输出内容如下:
原文始发于微信公众号(Linux二进制):ANSI 控制码实现终端颜色设置和显示
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98430.html