4th try at getting ansi colors working with a default of color=yes_please.
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 23 Apr 2010 21:27:26 +0000 (21:27 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 23 Apr 2010 21:27:26 +0000 (21:27 +0000)
Colors will only be used if the TERM env var is set and NO_COLOR is not set.

Originally committed as revision 22957 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavutil/log.c

index f37e40c..9a8b66e 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include <unistd.h>
+#include <stdlib.h>
 #include "avutil.h"
 #include "log.h"
 
@@ -33,17 +34,23 @@ static
 #endif
 int av_log_level = AV_LOG_INFO;
 
-#if (!HAVE_ISATTY) || defined(_WIN32)
-#define isatty(s) 0
-#endif
+static int use_ansi_color=-1;
 
 #undef fprintf
 static void colored_fputs(int color, const char *str){
-    if(isatty(2)){
+    if(use_ansi_color<0){
+#if HAVE_ISATTY && !defined(_WIN32)
+        use_ansi_color= getenv("TERM") && !getenv("NO_COLOR") && isatty(2);
+#else
+        use_ansi_color= 0;
+#endif
+    }
+
+    if(use_ansi_color){
         fprintf(stderr, "\033[%d;3%dm", color>>4, color&15);
     }
     fputs(str, stderr);
-    if(isatty(2)){
+    if(use_ansi_color){
         fprintf(stderr, "\033[0m");
     }
 }