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

时间:2015-06-07 11:42:43

标签: c++ terminal

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

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

2 个答案:

答案 0 :(得分:4)

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

注意到评论:PDCurses不是"端口"但是一个单独的程序。 ncurses有一个可操作的端口到Windows,它的价值。

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

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

答案 1 :(得分:1)

库Ncurses似乎能够做到: http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/color.html

但是这对Windows CMD不起作用,你需要像Cygwin这样的东西。