【发布时间】:2015-08-21 23:20:54
【问题描述】:
我知道,如果终端支持,您可以使用特殊的转义序列输出颜色。详情我参考this question。
但是,我知道有些终端不支持颜色代码/那些转义序列。如何在我的 C++ 程序中以编程方式确定终端是否支持此功能?是否有任何独立于平台的库?
【问题讨论】:
-
“是否有任何独立于平台的库?” 如果有,我可以想象
ncurses可能具备这样的功能。
我知道,如果终端支持,您可以使用特殊的转义序列输出颜色。详情我参考this question。
但是,我知道有些终端不支持颜色代码/那些转义序列。如何在我的 C++ 程序中以编程方式确定终端是否支持此功能?是否有任何独立于平台的库?
【问题讨论】:
ncurses 可能具备这样的功能。
没有可移植的方法来确定给定设备是否支持颜色。有几个编程接口(有些是可移植的,有些不是)试图确定此信息,但依赖于正确配置。例如,curses(包括 ncurses)依赖于您的设置 TERM 正确地告诉库终端可以做什么。 少数终端能够提供此信息,但这无助于便携性。
注意 cmets:PDCurses 不是一个“端口”,而是一个单独的程序。 ncurses 有一个适用于 Windows 的可用端口,物有所值。
在任何情况下,您都不会找到支持的便携程序,它可以完成所要求的工作。很久以前,使用 ansi.sys 打印转义序列是 Windows 的一种方式,但 more than ten years 不支持它。
同样,很久以前有conio.h,还有unsupported。如果您找到支持颜色的 Windows 工作版本,它可能使用 Windows console api(它不可移植,但您可能在其他平台上找到类似的 conio.h 实现)。 conio.h 有几个不支持的实现需要考虑。由于该利基市场似乎是所要求的,因此这里有一些相关链接:
【讨论】:
Ncurses 库似乎能够做到这一点: http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/color.html
但这不适用于 Windows CMD,你需要像 Cygwin 这样的东西。
【讨论】: