在OS X控制台输出中更改颜色

Dom*_*ann 3 c macos colors console-application

我正在尝试更改控制台应用程序的输出,但我发现只有Windows版本的代码,当然这在OS X中不起作用.

代码应如下所示:

printf("some text"); //this should be in green
Run Code Online (Sandbox Code Playgroud)

我知道,这只是一个printf()执行,但我怎样才能转换输出颜色?

Whi*_*ing 8

Mac OS X上的终端应用程序在使用例如C/C++或C++ 打印时对颜色的标准ANSI转义码做出响应.printf()std::cout <<

可用于设置前景色和/或背景色的字符串如下所示:

仅设置前景色:

 "\x1b[30m"
Run Code Online (Sandbox Code Playgroud)

仅设置背景颜色:

 "\x1b[40m"
Run Code Online (Sandbox Code Playgroud)

设置前景色和背景色:

 "\x1b[30;40m"
Run Code Online (Sandbox Code Playgroud)

要将所有颜色属性重置为正常:

 "\x1b[0m"
Run Code Online (Sandbox Code Playgroud)

在上面的字符串中,数字30和40只是前景色和背景色代码的占位符,它们可以用下表中的数字代替,以获得8种标准颜色中的一种:

+---------+------------+------------+
|  color  | foreground | background |
|         |    code    |    code    |
+---------+------------+------------+
| black   |     30     |     40     |
| red     |     31     |     41     |
| green   |     32     |     42     |
| yellow  |     33     |     43     |
| blue    |     34     |     44     |
| magenta |     35     |     45     |
| cyan    |     36     |     46     |
| white   |     37     |     47     |
+---------+------------+------------+
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

printf("\x1b[32m green text on regular background \x1b[0m  \n");
printf("\x1b[32;40m green text on black background \x1b[0m  \n");
printf("\x1b[42m regular text on green background \x1b[0m  \n");
Run Code Online (Sandbox Code Playgroud)

在Mac OS X El Capitan上看起来像这样(在终端窗口中,默认情况下在白色背景上有黑色文本).

在此输入图像描述

  • 只是一个附录:如果我想将输出重定向到一个文件,我首先检查`isatty()`是否为真,如果不是,我不输出这些颜色代码,所以输出文件是干净的.`isatty()`可以精神上存储为"是一个TTY",即电传终端. (2认同)