isatty
से कोई अन्य तरीका है यह जानने के लिए कि क्या cout
एक टर्मिनल पर आउटपुट करता है जो रंगों को सही तरीके से स्वीकार करता है?पता लगाएं कि क्या टर्मिनल को 'cout` आउटपुट करता है जो रंगों को सही तरीके से स्वीकार करता है?
मैं रंग के लिए this header उपयोग कर रहा हूँ, और मैं पहले से ही पता है की if(isatty(1))
उपयोग कर रहा हूँ उत्पादन goes to a terminal है।
दुर्भाग्य से जब मैं Xcode के कंसोल के लिए उत्पादन रंग मैं नहीं छोड़ा जाएगा दृश्यों मिलता है - लेकिन यह ठीक काम करता है जब ओएस एक्स में Terminal.app या iTerm से एप्लिकेशन को स्वयं को क्रियान्वित करने
मुझे लगता है कि Xcode के कंसोल एक के रूप में खुद की पहचान करता है टर्मिनल लेकिन अभी भी रंग अनुक्रमों को अनदेखा करता है ...
तो यदि संभव हो तो मैं बेहतर पहचान करना चाहता हूं।
मेरे कोड में ही तुच्छ है, कुछ इस तरह, एक रंग का स्ट्रिंग लौटने अगर isatty
सच है, तो यह cout
को जाता है:
std::string Slot::description()
{
if(isatty(1))
{
return FBLU("my_string");
}
else
{
return "my_string";
}
}
Xcode के उत्पादन:
iTerm के उत्पादन :
'isatty' केवल आउटपुट को किसी प्रकार के टर्मिनल के रूप में पहचानता है; टर्मिनलों रंग में जरूरी नहीं हैं। जब आप एक्सकोड में चल रहे हैं, तो '$ TERM' शून्य है, लेकिन अधिक विश्वसनीय समाधान शायद' ncurses' का उपयोग करना है। – molbdnilo
@molbdnilo धन्यवाद। यह एक अच्छी शुरुआत है: शायद मैं getenv के साथ $ TERM प्राप्त कर सकता हूं और फिर जांच कर सकता हूं कि शून्य है - अगर ऐसा है, तो मैं एक्सकोड के कंसोल (या किसी अन्य गूंगा टर्मिनल में अनुमान लगाता हूं) में हूं। मैं कोशिश करूँगा। – Moritz
मैंने 'getenv (" TERM ") किया था और एक्सकोड में शून्य और आईटर्म और टर्मिनल में कॉन्फ़िगर किए गए थे। – molbdnilo