【问题标题】:How to check whether std::cout support colors?如何检查 std::cout 是否支持颜色?
【发布时间】:2015-08-21 23:20:54
【问题描述】:

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

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

【问题讨论】:

  • “是否有任何独立于平台的库?” 如果有,我可以想象ncurses 可能具备这样的功能。

标签: c++ terminal


【解决方案1】:

没有可移植的方法来确定给定设备是否支持颜色。有几个编程接口(有些是可移植的,有些不是)试图确定此信息,但依赖于正确配置。例如,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 有几个不支持的实现需要考虑。由于该利基市场似乎是所要求的,因此这里有一些相关链接:

【讨论】:

    【解决方案2】:

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

    但这不适用于 Windows CMD,你需要像 Cygwin 这样的东西。

    【讨论】:

    • “但这不适用于 Windows。” 你能详细说明一下吗?我看不到任何证据。
    • 哎呀,它在 Windows 的 CMD 中不起作用。你需要像 Cygwin 这样的东西,Windows 本身确实不是问题。
    • 似乎有一个端口 PDCurses,但我宁愿寻找一个小火并忘记解决方案。 ncurses 做的比我需要的要多
    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多