ANSI 控制码实现终端颜色设置和显示

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;
}

ANSI 控制码实现终端颜色设置和显示

ANSI 控制码实现终端颜色设置和显示

上述测试代码里,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;
}

ANSI 控制码实现终端颜色设置和显示

代码中设置为宏

给 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;
}

输出内容如下:

ANSI 控制码实现终端颜色设置和显示


原文始发于微信公众号(Linux二进制):ANSI 控制码实现终端颜色设置和显示

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98430.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!