检测`cout`是否输出到正确接受颜色的终端?

时间:2016-09-01 15:19:47

标签: c++ xcode terminal

除了isatty之外还有另一种方法可以知道cout输出到正确接受颜色的终端吗?

我使用this header作为颜色,并且我已经使用if(isatty(1))来了解输出goes to a terminal

不幸的是,当我向Xcode的控制台输出颜色时,我得到了未转义的序列 - 但是当它从OS.X中的Terminal.app或iTerm执行应用程序本身时,它可以正常工作。

我认为Xcode的控制台将自己标识为终端,但仍然忽略了颜色序列......

所以我希望有更好的检测 - 如果可能的话。

我的代码本身很简单,就像这样,如果isatty为真,则返回彩色字符串,然后转到cout

std::string Slot::description()
{
    if(isatty(1))
    {
        return FBLU("my_string");
    }
    else
    {
        return "my_string";
    }
}

Xcode的输出:

enter image description here

iTerm的输出:

enter image description here

1 个答案:

答案 0 :(得分:2)

对于XCode,您可以检查getenv("TERM"),因为它会在XCode中返回null,如果您在"真实"中运行,则不应该这样做。终端

为了更可靠地确定您是否有彩色终端,ncurses可能是最佳选择。