ANSI 转义码显示不正确
ANSI escape codes not displaying correctly
我有以下定义:
#define ANSI_COLOR_RED "\e[31m"
#define ANSI_COLOR_GREEN "\e[32m"
#define ANSI_COLOR_YELLOW "\e[33m"
#define ANSI_COLOR_BLUE "\e[34m"
#define ANSI_COLOR_MAGENTA "\e[35m"
#define ANSI_COLOR_CYAN "\e[36m"
#define ANSI_COLOR_RESET "\e[0m"
然后我像这样使用它们:
char *getStatusColour(eTaskState state) {
switch (state) {
case eRunning:
return ANSI_COLOR_GREEN;
break;
case eReady:
return ANSI_COLOR_YELLOW;
break;
case eBlocked:
return ANSI_COLOR_RED;
break;
case eSuspended:
return ANSI_COLOR_BLUE;
break;
case eDeleted:
return ANSI_COLOR_RESET;
break;
}
return ANSI_COLOR_RESET;
}
printf("%s TEST %s\n", getStatusColour(eRunning), ANSI_COLOR_RESET);
然而,终端输出不起作用(IE:没有颜色,颜色 "should" 是未知字符(IE:无法显示的东西)。
知道为什么这行不通吗?
编辑
需要注意的是,当我更改为:
#define ANSI_COLOR_GREEN \e[32m\]
但是文本被截断了,我不确定 \]
的作用。
请注意 \e
不是标准的转义码,因此可能会失败 (行为未定义!):
% gcc ansi.c -pedantic
ansi.c: In function ‘main’:
ansi.c:4:12: warning: non-ISO-standard escape sequence, '\e'
printf("\e[1;32mfoobar");
改用3
或\x1B
。
我有以下定义:
#define ANSI_COLOR_RED "\e[31m"
#define ANSI_COLOR_GREEN "\e[32m"
#define ANSI_COLOR_YELLOW "\e[33m"
#define ANSI_COLOR_BLUE "\e[34m"
#define ANSI_COLOR_MAGENTA "\e[35m"
#define ANSI_COLOR_CYAN "\e[36m"
#define ANSI_COLOR_RESET "\e[0m"
然后我像这样使用它们:
char *getStatusColour(eTaskState state) {
switch (state) {
case eRunning:
return ANSI_COLOR_GREEN;
break;
case eReady:
return ANSI_COLOR_YELLOW;
break;
case eBlocked:
return ANSI_COLOR_RED;
break;
case eSuspended:
return ANSI_COLOR_BLUE;
break;
case eDeleted:
return ANSI_COLOR_RESET;
break;
}
return ANSI_COLOR_RESET;
}
printf("%s TEST %s\n", getStatusColour(eRunning), ANSI_COLOR_RESET);
然而,终端输出不起作用(IE:没有颜色,颜色 "should" 是未知字符(IE:无法显示的东西)。
知道为什么这行不通吗?
编辑
需要注意的是,当我更改为:
#define ANSI_COLOR_GREEN \e[32m\]
但是文本被截断了,我不确定 \]
的作用。
请注意 \e
不是标准的转义码,因此可能会失败 (行为未定义!):
% gcc ansi.c -pedantic
ansi.c: In function ‘main’:
ansi.c:4:12: warning: non-ISO-standard escape sequence, '\e'
printf("\e[1;32mfoobar");
改用3
或\x1B
。