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

3

我知道你可以使用特殊的转义序列来输出颜色,如果终端支持的话。关于详情,我参考this question

然而,我明白有些终端不支持颜色代码/那些转义序列。在我的C++程序中,如何编程确定一个终端是否支持这个功能?是否有任何跨平台的库可以实现这一点?


1
有没有适用于各个平台的库可以实现这个功能?如果有的话,我想ncurses可能能够胜任这项任务。 - πάντα ῥεῖ
2个回答

4

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

注释:PDCurses不是“端口”,而是一个单独的程序。ncurses已经在Windows上有了可行的端口,值得一提。

无论如何,你不会找到一个可移植的程序,它是受支持的,可以做到所要求的。很久以前,在Windows中使用ansi.sys打印转义序列是一个好方法,但已经超过十年没有支持了。

同样地,很久以前有一个conio.h,但它已经不支持了。如果你找到了一个支持颜色的 Windows 版本,它可能使用Windows 控制台 API(这不是可移植的,但你可能会在其他平台上找到类似的conio.h实现)。还有一些不受支持的 conio.h 实现需要考虑。由于这个领域似乎是被请求的,这里有几个相关的链接:

1

但是这对于Windows系统不起作用。您能详细说明一下吗?我看不到任何证据。 - πάντα ῥεῖ
糟糕,它在Windows的CMD中无法工作。你需要像Cygwin这样的东西,Windows本身确实不是问题。 - Cheiron
似乎有一个名为PDCurses的端口,但我更想要一个小型的即插即用解决方案。ncurses提供的功能远超出我的需求。 - worenga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接