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

mac2024-03-14  17

建议封装shellc/c++头文件

之前在写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__)

封装

shell

NONE_COLOR="\033[0m" BLACK="\033[0;30m" DARK_GRAY="\033[1;30m" RED="\033[0;31m" LIGHT_RED="\033[1;31m" GREEN="\033[0;32m" LIGHT_GREEN="\033[1;32m" BROWN="\033[0;33m" YELLOW="\033[1;33m" BLUE="\033[0;34m" LIGHT_BLUE="\033[1;34m" PURPLE="\033[0;35m" LIGHT_PURPLE="\033[1;35m" CYAN="\033[0;36m" LIGHT_CYAN="\033[1;36m" LIGHT_GRAY="\033[0;37m" WHITE="\033[1;37m" echo -e "${LIGHT_GREEN} test ${NONE_COLOR}"

c/c++头文件

// common.h #define NONE_COLOR "\033[0m" #define BLACK "\033[0;30m" #define DARK_GRAY "\033[1;30m" #define RED "\033[0;31m" #define LIGHT_RED "\033[1;31m" #define GREEN "\033[0;32m" #define LIGHT_GREEN "\033[1;32m" #define BROWN "\033[0;33m" #define YELLOW "\033[1;33m" #define BLUE "\033[0;34m" #define LIGHT_BLUE "\033[1;34m" #define PURPLE "\033[0;35m" #define LIGHT_PURPLE "\033[1;35m" #define CYAN "\033[0;36m" #define LIGHT_CYAN "\033[1;36m" #define LIGHT_GRAY "\033[0;37m" #define WHITE "\033[1;37m" #define UNUSED(a) ((void)(a)) #define ERR_MSG_V(msg, ...) \ printf(LIGHT_RED"** ERROR: " msg NONE_COLOR"\n", ##__VA_ARGS__) #define INFO_MSG_V(msg, ...) \ printf(LIGHT_GREEN"** INFO: " msg NONE_COLOR"\n", ##__VA_ARGS__) #define WARN_MSG_V(msg, ...) \ printf(YELLOW"** WARN: " msg NONE_COLOR"\n", ##__VA_ARGS__)
最新回复(0)