控制Linux终端输出的颜色和显示方式

转义序列

终端输出的颜色由转义序列控制, 转义序列以控制字符串"ESC"开头, ASCII码对应的十进制是27, 十六进制是0x1B, 八进制是033. 转义序列以"ESC"和左括号"["开头, 以"m"结尾:

\033[ Param {;Param;...}m
或
\e[ Param {;Param;...}m

其中,'\033['或'\e['引导转义序列,'m'表示设置属性并结束转义序列。Param为属性值,{...}表示可选(多个参数之间用分号隔开,与顺序无关)

转义序列格式

\033[显示方式;前景色;背景色m输出字符串\033[0m

\e[显示方式;前景色;背景色m输出字符串\e[0m

其中 ,'\033[0m'和'\e[0m'用于恢复默认的终端输出属性,否则会影响后续的输出。

显示:0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)

颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)

前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色

常用格式宏

#define NONE                 "\e[0m"
#define BLACK                "\e[0;30m"
#define L_BLACK              "\e[1;30m"
#define RED                  "\e[0;31m"
#define L_RED                "\e[1;31m"
#define GREEN                "\e[0;32m"
#define L_GREEN              "\e[1;32m"
#define BROWN                "\e[0;33m"
#define YELLOW               "\e[1;33m"
#define BLUE                 "\e[0;34m"
#define L_BLUE               "\e[1;34m"
#define PURPLE               "\e[0;35m"
#define L_PURPLE             "\e[1;35m"
#define CYAN                 "\e[0;36m"
#define L_CYAN               "\e[1;36m"
#define GRAY                 "\e[0;37m"
#define WHITE                "\e[1;37m"

#define BOLD                 "\e[1m"
#define UNDERLINE            "\e[4m"
#define BLINK                "\e[5m"
#define REVERSE              "\e[7m"
#define HIDE                 "\e[8m"

Sample

#define LOG_END "\e[0m"
#define LOG_RED "\e[0;31m"
#define LOG_GREEN "\e[0;32m"
#define LOG_L_GREEN "\e[1;32m"
#define LOG_YELLOW "\e[1;33m"

#define PRINT(err, fmt, ...)                                                                          \
    fprintf(stderr, LOG_RED "[%s:%d:%s] " fmt "\n" LOG_END, __FILE__, __LINE__, err, ##__VA_ARGS__);

#define LOGE(fmt, ...) { \
    fprintf(stderr, LOG_RED "[%s:%d:%s] " fmt "\n" LOG_END, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
}

#define LOGD(fmt, ...) { \
    fprintf(stdout, LOG_GREEN "[%s:%d:%s] " fmt "\n" LOG_END, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
}

#define LOGW(fmt, ...) { \
    fprintf(stdout, LOG_YELLOW "[%s:%d:%s] " fmt "\n" LOG_END, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
}

posted @ 2020-07-14 22:41  Cristiano-Duan  阅读(409)  评论(0编辑  收藏  举报