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

aya*_*aio 5 c++ terminal xcode

还有另一种方法,而不是isatty知道cout输出到正确接受颜色的终端吗?

我正在使用此标头的颜色,我已经if(isatty(1))用来知道输出是否转到终端.

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

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

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

我的代码本身很简单,就像这样,返回一个彩色字符串if if isatty为true,然后它转到cout:

std::string Slot::description()
{
    if(isatty(1))
    {
        return FBLU("my_string");
    }
    else
    {
        return "my_string";
    }
}
Run Code Online (Sandbox Code Playgroud)

Xcode的输出:

在此输入图像描述

iTerm的输出:

在此输入图像描述

mol*_*ilo 3

特别是对于 XCode,您可以检查getenv("TERM"),因为这将在 XCode 中返回 null,并且如果您在“真实”终端中运行,则不应这样做。

要以更可靠的方式确定您是否拥有彩色终端,ncurses可能是最佳选择。