Browse Source

Merge pull request #2622 from laytan/detect-unix-colors-support

detect unix color support
Jeroen van Rijn 2 years ago
parent
commit
a1eae6304f
1 changed files with 23 additions and 1 deletions
  1. 23 1
      src/main.cpp

+ 23 - 1
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_);