【问题标题】:Change color in OS X console output在 OS X 控制台输出中更改颜色
【发布时间】:2016-01-23 09:23:21
【问题描述】:

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

代码应如下所示:

printf("some text"); //this should be in green

我知道,这只是一个printf() 的执行,但是如何转换输出颜色呢?

【问题讨论】:

  • OS X 没有像 Linux 这样的控制台,你是说终端吗?
  • 是全屏程序吗?那么你应该使用ncurses 库。
  • ANSI 转义码与 OS X 的终端完美配合,至少适用于基本的 8 种颜色以及 Bold、Inverse 和 Underlined 属性。
  • 为了更好的可移植性,OP 应该使用类似 termcap/terminfo 接口的东西,而不是硬编码转义序列。 OP 的应用程序不是全屏的(如果是的话,硬编码就更没用了)。

标签: c macos colors console-application


【解决方案1】:

Mac OS X 上的终端应用程序在打印时响应标准 ANSI escape codes for colors,例如,在 C/C++ 中使用 printf() 或在 C++ 中使用 std::cout <<

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

只设置前景色:

 "\x1b[30m"

仅设置背景颜色:

 "\x1b[40m"

设置前景色和背景色:

 "\x1b[30;40m"

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

 "\x1b[0m"

在上面的字符串中,数字 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     |
+---------+------------+------------+

这是一个例子:

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");

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

【讨论】:

  • 只是一个附录:如果我希望能够将我的输出重定向到一个文件中,我首先检查 isatty() 是否为真,如果不是,我不输出这些颜色代码,所以输出文件是干净的。 isatty() 可以在心理上存储为“是 TTY”,即电传终端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2011-08-11
  • 2022-01-16
  • 2015-08-19
相关资源
最近更新 更多