From 23bf7973fa571088cb5080d78d04a798a2cc1e7c Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 2 Jul 2023 19:56:30 +0200 Subject: detect unix color support --- src/main.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 2198b4536..d66ec5846 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2547,6 +2547,10 @@ gb_internal int strip_semicolons(Parser *parser) { return cast(int)failed; } +#if defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) +#include +#endif + gb_internal void init_terminal(void) { build_context.has_ansi_terminal_colours = false; #if defined(GB_SYSTEM_WINDOWS) @@ -2558,6 +2562,18 @@ gb_internal void init_terminal(void) { build_context.has_ansi_terminal_colours = true; } } +#elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) + FILE* file = popen("tput colors", "r"); + if (file) { + char buffer[20]; + if (fgets(&buffer[0], 20, file)) { + u64 colors = gb_str_to_u64(buffer, nullptr, 10); + if (colors >= 8) { + build_context.has_ansi_terminal_colours = true; + } + } + pclose(file); + } #endif if (!build_context.has_ansi_terminal_colours) { -- cgit v1.2.3 From f4e87c9720fada536c756110f900c4317fc1c1ce Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 2 Jul 2023 20:20:10 +0200 Subject: ignore stderr in tput call --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index d66ec5846..80a6c819c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2563,7 +2563,7 @@ gb_internal void init_terminal(void) { } } #elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) - FILE* file = popen("tput colors", "r"); + FILE* file = popen("tput colors 2>/dev/null", "r"); if (file) { char buffer[20]; if (fgets(&buffer[0], 20, file)) { -- cgit v1.2.3 From f68a3639b4ce2ba8fe90f6907e162ff0a5bbadc7 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 2 Jul 2023 21:11:19 +0200 Subject: use more common detection method and add FORCE_COLOR and NO_COLOR support --- src/main.cpp | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 80a6c819c..0bd45b1eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2547,12 +2547,24 @@ gb_internal int strip_semicolons(Parser *parser) { return cast(int)failed; } -#if defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) -#include -#endif - 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; @@ -2563,21 +2575,15 @@ gb_internal void init_terminal(void) { } } #elif defined(GB_SYSTEM_OSX) || defined(GB_SYSTEM_UNIX) - FILE* file = popen("tput colors 2>/dev/null", "r"); - if (file) { - char buffer[20]; - if (fgets(&buffer[0], 20, file)) { - u64 colors = gb_str_to_u64(buffer, nullptr, 10); - if (colors >= 8) { - build_context.has_ansi_terminal_colours = true; - } - } - pclose(file); + 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_); -- cgit v1.2.3 From 49058620f090062e1e1a7b3158b22d17fe3e3dfa Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 2 Jul 2023 21:25:48 +0200 Subject: fix spacing --- src/main.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 0bd45b1eb..db2702b19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2550,20 +2550,20 @@ gb_internal int strip_semicolons(Parser *parser) { gb_internal void init_terminal(void) { build_context.has_ansi_terminal_colours = false; - gbAllocator a = heap_allocator(); + 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 *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; - } + 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); @@ -2575,12 +2575,12 @@ gb_internal void init_terminal(void) { } } #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; - } + 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) { -- cgit v1.2.3