Merge pull request #34808 from Calinou/no-color-in-non-tty

Disable colored console output when standard output isn't a TTY
This commit is contained in:
Rémi Verschelde 2020-01-06 16:39:47 +01:00 committed by GitHub
commit 377ae2af97
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -59,6 +59,7 @@
#include <poll.h> #include <poll.h>
#include <signal.h> #include <signal.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/time.h> #include <sys/time.h>
@ -554,23 +555,38 @@ void UnixTerminalLogger::log_error(const char *p_function, const char *p_file, i
else else
err_details = p_code; err_details = p_code;
// Disable color codes if stdout is not a TTY.
// This prevents Godot from writing ANSI escape codes when redirecting
// stdout and stderr to a file.
const bool tty = isatty(fileno(stdout));
const char *red = tty ? "\E[0;31m" : "";
const char *red_bold = tty ? "\E[1;31m" : "";
const char *yellow = tty ? "\E[0;33m" : "";
const char *yellow_bold = tty ? "\E[1;33m" : "";
const char *magenta = tty ? "\E[0;35m" : "";
const char *magenta_bold = tty ? "\E[1;35m" : "";
const char *cyan = tty ? "\E[0;36m" : "";
const char *cyan_bold = tty ? "\E[1;36m" : "";
const char *reset = tty ? "\E[0m" : "";
const char *bold = tty ? "\E[1m" : "";
switch (p_type) { switch (p_type) {
case ERR_WARNING: case ERR_WARNING:
logf_error("\E[1;33mWARNING: %s: \E[0m\E[1m%s\n", p_function, err_details); logf_error("%sWARNING: %s: %s%s%s\n", yellow_bold, p_function, reset, bold, err_details);
logf_error("\E[0;33m At: %s:%i.\E[0m\n", p_file, p_line); logf_error("%s At: %s:%i.%s\n", yellow, p_file, p_line, reset);
break; break;
case ERR_SCRIPT: case ERR_SCRIPT:
logf_error("\E[1;35mSCRIPT ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); logf_error("%sSCRIPT ERROR: %s: %s%s%s\n", magenta_bold, p_function, reset, bold, err_details);
logf_error("\E[0;35m At: %s:%i.\E[0m\n", p_file, p_line); logf_error("%s At: %s:%i.%s\n", magenta, p_file, p_line, reset);
break; break;
case ERR_SHADER: case ERR_SHADER:
logf_error("\E[1;36mSHADER ERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); logf_error("%sSHADER ERROR: %s: %s%s%s\n", cyan_bold, p_function, reset, bold, err_details);
logf_error("\E[0;36m At: %s:%i.\E[0m\n", p_file, p_line); logf_error("%s At: %s:%i.%s\n", cyan, p_file, p_line, reset);
break; break;
case ERR_ERROR: case ERR_ERROR:
default: default:
logf_error("\E[1;31mERROR: %s: \E[0m\E[1m%s\n", p_function, err_details); logf_error("%sERROR: %s: %s%s%s\n", red_bold, p_function, reset, bold, err_details);
logf_error("\E[0;31m At: %s:%i.\E[0m\n", p_file, p_line); logf_error("%s At: %s:%i.%s\n", red, p_file, p_line, reset);
break; break;
} }
} }