2016-09-01 26 views
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的輸出:

enter image description here

的iTerm的輸出:

enter image description here

+1

'isatty'只將輸出識別爲某種終端;終端不一定是彩色的。當你在XCode中運行時,'$ TERM'爲空,但更可靠的解決方案可能是使用'ncurses'。 – molbdnilo

+0

@molbdnilo謝謝。這是一個好的開始:也許我可以用getenv獲得$ TERM,然後檢查是否爲空 - 如果是,我在Xcode的控制檯(或任何其他愚蠢的終端,我猜)。我會嘗試的。 – Moritz

+0

我做了'getenv(「TERM」)'並且在XCode中獲得了空值,並且在iTerm和Terminal中配置了這些值。 – molbdnilo

回答

2

對於具體的XCode,你可以檢查getenv("TERM"),因爲這將返回null內Xcode和不應該做的,如果你在一個「真實」的終端正在運行。

對於一個更可靠的方式,以確定是否有彩色終端,ncurses可能是要走的路。

相關問題