From db7a1784d44cb2a1cf4a618ae705380f665529ce Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Wed, 14 Nov 2012 19:30:07 +0000 Subject: [PATCH] Clever hack to determine terminal color support for *nix. Uses zero libraries :) --- con.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/con.c b/con.c index 623cb99..3e6c20d 100644 --- a/con.c +++ b/con.c @@ -199,6 +199,45 @@ static void con_enablecolor() { console.color_err = !!(isatty(STDERR_FILENO)); if (console.handle_out == stderr || console.handle_out == stdout) console.color_out = !!(isatty(STDOUT_FILENO)); + + #ifndef _WIN32 + { + char buf[4]; + + /* + * This is such a hack. But I'm not linking in any libraries to + * do this stupidity. It's insane there is simply not a ttyhascolor + * in unistd.h + */ + FILE *tput = popen("tput colors", "r"); + if (!tput) { + /* + * disable colors since we can't determine without tput + * which should be guranteed on all *nix OSes + */ + console.color_err = 0; + console.color_out = 0; + } + + /* + * Handle to tput was a success, lets read in the amount of + * color support. It should be at minimal 8. + */ + fread(buf, sizeof(buf), 1, tput); + buf[3] = '\0'; + + if (atoi(buf) < 8) { + console.color_err = 0; + console.color_out = 0; + } + + /* + * We made it this far, which means we support colors in the + * terminal. + */ + fclose(tput); + } + #endif } /* -- 2.39.2