Czy istnieje inny sposób niż isatty
, aby dowiedzieć się, czy cout
wyprowadza się do terminala, który poprawnie odbiera kolory?Wykryto, czy `cout` wyprowadza na terminal, który akceptuje kolory poprawnie?
Używam this header kolorów, a ja już używam if(isatty(1))
, aby wiedzieć, czy wyjście goes to a terminal.
Niestety kiedy kolory wyjściowe do konsoli Xcode jest uzyskać sekwencje kodów zmiany znaczenia - ale to działa dobrze podczas wykonywania aplikacji się od Terminal.app lub iTerm w OS X.
Przypuszczam, że konsola Xcode identyfikuje się jako terminal, ale nadal ignoruje sekwencje kolorów ...
Chciałbym więc mieć lepsze wykrywanie - jeśli to możliwe.
Sam Mój kod jest trywialne, coś takiego, wracając kolorowy łańcuch jeśli isatty
jest prawdziwe, to idzie do cout
:
std::string Slot::description()
{
if(isatty(1))
{
return FBLU("my_string");
}
else
{
return "my_string";
}
}
wyjście Xcode za:
wyjście iTerm za :
'isatty' identyfikuje tylko dane wyjściowe jako pewnego rodzaju terminal; Terminale niekoniecznie są kolorowe. Kiedy używasz XCode, '$ TERM' ma wartość null, ale bardziej niezawodnym rozwiązaniem jest prawdopodobnie użycie' ncurses'. – molbdnilo
@molbdnilo Dzięki. To dobry początek: może uda mi się zdobyć $ TERM z getenv, a następnie sprawdzić czy null - jeśli tak, to jestem w konsoli Xcode'a (lub jakikolwiek inny głupi terminal, jak sądzę). Spróbuję tego. – Moritz
Zrobiłem 'getenv (" TERM ") i otrzymałem null w XCode, a skonfigurowałem je w iTerm i Terminal. – molbdnilo