5
有另一種方式比isatty
知道如果cout
輸出到正確接受色彩的終端?檢測'cout`是否輸出到正確接受顏色的終端?
我使用this header作爲顏色,而我已經使用if(isatty(1))
來知道輸出goes to a terminal。
不幸的是,當我輸出顏色以Xcode的控制檯,我得到轉義序列 - 但在執行從Terminal.app或的iTerm應用程序本身時,在OS X
我想,Xcode的控制檯自身標識爲它工作正常終端但還是忽略了顏色順序...
所以我想有一個更好的檢測 - 如果可能的話。
我的代碼本身是微不足道的,這樣的事情,返回的彩色字符串,如果isatty
是真的,那麼它去cout
:
std::string Slot::description()
{
if(isatty(1))
{
return FBLU("my_string");
}
else
{
return "my_string";
}
}
Xcode的輸出:
的iTerm的輸出:
'isatty'只將輸出識別爲某種終端;終端不一定是彩色的。當你在XCode中運行時,'$ TERM'爲空,但更可靠的解決方案可能是使用'ncurses'。 – molbdnilo
@molbdnilo謝謝。這是一個好的開始:也許我可以用getenv獲得$ TERM,然後檢查是否爲空 - 如果是,我在Xcode的控制檯(或任何其他愚蠢的終端,我猜)。我會嘗試的。 – Moritz
我做了'getenv(「TERM」)'並且在XCode中獲得了空值,並且在iTerm和Terminal中配置了這些值。 – molbdnilo