gpt4 book ai didi

c++ - 使用 C/C++,如何以彩色打印到标准输出,但前提是终端支持它?

转载 作者:IT老高 更新时间:2023-10-28 21:34:51 25 4
gpt4 key购买 nike

我有一个程序可以将内容记录到 STDOUT

这些日志条目具有关联的“日志级别”(调试、警告、信息等),我想让用户能够根据日志级别为该输出着色。

确定 STDOUT 是否连接到具有颜色功能的终端的方法是什么?那么我怎样才能用颜色输出我的文本呢?

我正在寻找只涉及 C 或 C++ 调用的解决方案。我猜 curses(或 ncurses)可以缓解这种情况,但我想避免使用它来将我的依赖关系降至最低。

最佳答案

可能最简单的检查方法是:

isatty(fileno(STDOUT))

如果您的标准输出被发送到任何类型的终端,这将返回 1。实际上,任何终端都将支持或忽略 VT100 颜色代码;检查 terminfo 是不必要的,除非您希望输出到某些非常不寻常的硬件终端。 (其中大部分已经几十年没有制造了。)

要输出颜色,请使用(扩展的)SGR 序列:

"\x1b[%dm"

其中 %d 是常用支持颜色的以下值之一:

0: reset colors/style
1: bold
4: underline
30 - 37: black, red, green, yellow, blue, magenta, cyan, and white text
40 - 47: black, red, green, yellow, blue, magenta, cyan, and white background

还有更多的值,但这些是得到最广泛支持的值。同样,对于这些控制代码来说,检查 terminfo 基本上是不必要的,因为每个值得一提的软件终端都会支持(或忽略)它们。

如果您需要一次更改多个属性,您可以一次指定它们,用分号分隔。例如,以下序列将在绿色背景上用粗体洋红色文本灼伤您的眼球:

"\x1b[1;35;42m"

关于c++ - 使用 C/C++,如何以彩色打印到标准输出,但前提是终端支持它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12827143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com