diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index 2198b4536..db2702b19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2549,6 +2549,22 @@ gb_internal int strip_semicolons(Parser *parser) { gb_internal void init_terminal(void) { build_context.has_ansi_terminal_colours = false; + + gbAllocator a = heap_allocator(); + + char const *no_color = gb_get_env("NO_COLOR", a); + defer (gb_free(a, cast(void *)no_color)); + if (no_color != nullptr) { + return; + } + + char const *force_color = gb_get_env("FORCE_COLOR", a); + defer (gb_free(a, cast(void *)force_color)); + if (force_color != nullptr) { + build_context.has_ansi_terminal_colours = true; + return; + } + #if defined(GB_SYSTEM_WINDOWS) HANDLE hnd = GetStdHandle(STD_ERROR_HANDLE); DWORD mode = 0; @@ -2558,10 +2574,16 @@ gb_internal void init_terminal(void) { build_context.has_ansi_terminal_colours = true; } } +#elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) + char const *term_ = gb_get_env("TERM", a); + defer (gb_free(a, cast(void *)term_)); + String term = make_string_c(term_); + if (!str_eq(term, str_lit("dumb")) && isatty(STDERR_FILENO)) { + build_context.has_ansi_terminal_colours = true; + } #endif if (!build_context.has_ansi_terminal_colours) { - gbAllocator a = heap_allocator(); char const *odin_terminal_ = gb_get_env("ODIN_TERMINAL", a); defer (gb_free(a, cast(void *)odin_terminal_)); String odin_terminal = make_string_c(odin_terminal_); |