如何将彩色字符打印到支持它的 Linux 终端?
如何判断终端是否支持色码?
原文由 Macha 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
您需要输出 ANSI 颜色代码。请注意,并非所有终端都支持此功能;如果不支持颜色序列,则会出现垃圾。
例子:
在这里,
\033
是 ESC 字符,ASCII 27。后面是[
,然后是零个或多个由;
分隔的数字,最后是字母m
。这些数字描述了从该点开始切换到的颜色和格式。前景色和背景色的代码是:
此外,您可以使用这些:
有关其他不太广泛支持的代码,请参见 Wikipedia 上的表格。
要确定您的终端是否支持颜色序列,请读取
TERM
环境变量的值。它应该指定使用的特定终端类型(例如vt100
,gnome-terminal
,xterm
,screen
)。然后在 terminfo 数据库 中查找;检查colors
能力。