如何将彩色文本输出到 Linux 终端?

新手上路,请多包涵

如何将彩色字符打印到支持它的 Linux 终端?

如何判断终端是否支持色码?

原文由 Macha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 844
2 个回答

您需要输出 ANSI 颜色代码。请注意,并非所有终端都支持此功能;如果不支持颜色序列,则会出现垃圾。

例子:

  cout << "\033[1;31mbold red text\033[0m\n";

在这里, \033 是 ESC 字符,ASCII 27。后面是 [ ,然后是零个或多个由 ; 分隔的数字,最后是字母 m 。这些数字描述了从该点开始切换到的颜色和格式。

前景色和背景色的代码是:

          foreground background
black        30         40
red          31         41
green        32         42
yellow       33         43
blue         34         44
magenta      35         45
cyan         36         46
white        37         47

此外,您可以使用这些:

 reset             0  (everything back to normal)
bold/bright       1  (often a brighter shade of the same colour)
underline         4
inverse           7  (swap foreground and background colours)
bold/bright off  21
underline off    24
inverse off      27

有关其他不太广泛支持的代码,请参见 Wikipedia 上的表格


要确定您的终端是否支持颜色序列,请读取 TERM 环境变量的值。它应该指定使用的特定终端类型(例如 vt100gnome-terminalxtermscreen )。然后在 terminfo 数据库 中查找;检查 colors 能力。

原文由 Thomas 发布,翻译遵循 CC BY-SA 4.0 许可协议

我知道这个问题很老,但我将这个答案发布给未来的读者。我用 C++ 编写了一个用于彩色输出的 。这使用了使工作变得容易的操纵器支持跨平台,但此处未测试是概述如何使用它,

 #include "srilakshmikanthanp/ANSI.hpp"

using namespace srilakshmikanthanp;

3 位和 4 位颜色:

 // background
std::cout << ansi::BGyellow;
// foreground
std::cout << ansi::FGblue;
// output
std::cout << "Blue on yellow";
// reset
std::cout << ansi::reset;

8位颜色:

 // background
std::cout << ansi::BGcolor(157);
// foreground
std::cout << ansi::FGcolor(100);
// outpt
std::cout << "8 bit color";
// reset
std::cout << ansi::reset;

24 位颜色:

 // background
std::cout << ansi::BGcolor(0, 255, 0);
// foreground
std::cout << ansi::FGcolor(0, 0, 255);
// output
std::cout << "24 bit color";
// reset
std::cout << ansi::reset;

字符串:

您可以使用 ansi::str 轻松将此操纵器转换为字符串

std::string BGyellow = ansi::str(ansi::BGyellow);
std::string FGblue = ansi::str(ansi::FGblue);
std::string reset = ansi::str(ansi::reset);

std::cout << BGyelow;
// foreground
std::cout << FGblue;
// output
std::cout << "Blue on Yellow";
// reset
std::cout << reset;

您可以通过上面的链接在 github 中找到更多信息 :)

原文由 srilakshmikanthanp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题