除了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的输出:
iTerm的输出:
答案 0 :(得分:2)
对于XCode,您可以检查getenv("TERM")
,因为它会在XCode中返回null,如果您在"真实"中运行,则不应该这样做。终端
为了更可靠地确定您是否有彩色终端,ncurses
可能是最佳选择。