aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2023-07-02 21:34:34 +0200
committerGitHub <noreply@github.com>2023-07-02 21:34:34 +0200
commita1eae6304f92b9be1b6c084dbdbd97d62caf02c5 (patch)
tree997a9d56835eac06a12eb067779f9a2452f8e3f0 /src/main.cpp
parent67e0751124694194a8b2f65b5f2c03ee1a13673f (diff)
parent49058620f090062e1e1a7b3158b22d17fe3e3dfa (diff)
Merge pull request #2622 from laytan/detect-unix-colors-support
detect unix color support
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp24
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_);