c++ - 如何检查 std::cout 是否支持颜色?

标签 c++ terminal

我知道您可以使用特殊转义序列输出颜色,如果终端支持的话。有关详细信息,请参阅 this question .

但是,据我所知,有些终端不支持颜色代码/那些转义序列。如何在我的 C++ 程序中以编程方式确定终端是否支持此功能?是否有任何独立于平台的库?

最佳答案

没有可移植的方法来确定给定设备是否支持颜色。有几种编程接口(interface)(有些是可移植的,有些不是)试图确定此信息,但依赖于正确配置。例如,curses(包括 ncurses)依赖于您正确设置 TERM 来告诉库终端可以做什么。 少数终端具有提供此信息的能力,但这对可移植性没有帮助。

注意注释:PDCurses 不是一个“端口”,而是一个单独的程序。 ncurses 有一个适用于 Windows 的端口,物有所值。

在任何情况下,您都不会找到支持可移植程序,它可以执行所要求的操作。很久以前,使用 ansi.sys 打印转义序列是 Windows 的一种方式,但 more than ten years 不支持它。 .

同样,很久以前就有 conio.h ,还有 unsupported .如果您找到支持颜色的 Windows 工作版本,它可能使用 Windows console api (它不可移植,但您可能在其他平台上找到类似的 conio.h 实现)。 conio.h 有一些不受支持的实现需要考虑。由于该利基似乎是所要求的,因此这里有一些相关链接:

关于c++ - 如何检查 std::cout 是否支持颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30693107/

相关文章:

c++ - 如何正确使用 COMMTIMEOUTS 和从串口读取的 OVERLAPPED IO 模式

c++ - 阵列 "not used in this scope"。为什么?

c++ - Eclipse cdt 无法解析 C++ 项目中的外部实体

c++ - 如何在C++中跳到Ofstream对象的下一行

c++ - 为什么结果是0?

git - Mac OS 中的自动完成 git 不起作用?

SSH连接一直卡在终端

macos - 使用终端从 Mac OS X 钥匙串(keychain)中删除私钥

linux - 如何在系统调用中打印到控制台(终端)

java - 使用命令参数启动 native 终端 (Java)