除了使用isatty
,还有其他方法可以知道cout
是否输出到支持颜色的终端吗?
我正在使用这个头文件来实现颜色输出,已经使用if(isatty(1))
来判断输出是否进入终端。
不幸的是,当我将颜色输出到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的输出:
isatty
只能识别输出是否为某种终端;终端不一定是彩色的。当您在 XCode 中运行时,$TERM
为空,但更可靠的解决方案可能是使用ncurses
。 - molbdnilogetenv("TERM")
但却得到了空值,在iTerm和Terminal中则正常配置。 - molbdnilo