我在Linux上运行了一个C文件。它以红色(失败)打印一些线条,以绿色(通过)打印一些线条。正如您所料,它在printf语句中使用转义码,如下所示:
#define BLACK "\033[22;30m"
#define GREEN "\033[22;31m"
printf(GREEN "this will show up green" BLACK "\n");
如果最后的BLACK不存在,终端文本将继续为所有内容为绿色。如果你没有抓住它,那对于具有非黑色背景的终端窗口来说没问题,但是否则你最终会得到黑底黑字。不好!运行程序有这个问题,捕获文本文件中的输出然后用“更多”或“更少”查看文件也是如此。
是否有代码恢复默认值而不是在printf语句末尾指定颜色?这需要在C中,但我有兴趣阅读其他方法。
更新 谢谢你们。您的回复帮助我在其他地方找到更有用的信息。 我更新了我的宏如下(注意31是红色的,我修正了下面的错字):
#define RESET_COLOR "\e[m"
#define MAKE_GREEN "\e[32m"
printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n");
我发现以下链接有助于理解这些代码的工作原理:
http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html解释了这些转义序列的作用,并在需要可移植性时使用ncurses。
http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html
http://bluesock.org/~willg/dev/ansi.html显示更多的转义序列;对于了解大局非常有用
答案 0 :(得分:22)
尝试使用:
#define RESETCOLOR "\033[0m"
这应该将其重置为默认值。
有关这些终端代码的更多信息,请访问:http://en.wikipedia.org/wiki/ANSI_escape_code
答案 1 :(得分:4)
"\033[0m"
答案 2 :(得分:2)
在终端输入reset
。
Linux和OSX中有一个名为reset的二进制文件。