C代码改变终端文本颜色;如何恢复默认值? Linux的

时间:2010-08-17 20:07:39

标签: c++ c linux colors terminal

我在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显示更多的转义序列;对于了解大局非常有用

3 个答案:

答案 0 :(得分:22)

尝试使用:

#define RESETCOLOR "\033[0m"

这应该将其重置为默认值。

有关这些终端代码的更多信息,请访问:http://en.wikipedia.org/wiki/ANSI_escape_code

答案 1 :(得分:4)

答案 2 :(得分:2)

在终端输入reset

Linux和OSX中有一个名为reset的二进制文件。