@@ -7,29 +7,34 @@ const native_os = builtin.os.tag;
7
7
8
8
/// Detect suitable TTY configuration options for the given file (commonly stdout/stderr).
9
9
/// This includes feature checks for ANSI escape codes and the Windows console API, as well as
10
- /// respecting the `NO_COLOR` environment variable .
10
+ /// respecting the `ZIG_DEBUG_COLOR` and `YES_COLOR` environment variables to override the default .
11
11
pub fn detectConfig (file : File ) Config {
12
- if (builtin .os .tag == .wasi ) {
13
- // Per https://github.com/WebAssembly/WASI/issues/162 ANSI codes
14
- // aren't currently supported.
15
- return .no_color ;
16
- } else if (process .hasEnvVarConstant ("ZIG_DEBUG_COLOR" )) {
17
- return .escape_codes ;
18
- } else if (process .hasEnvVarConstant ("NO_COLOR" )) {
19
- return .no_color ;
20
- } else if (file .supportsAnsiEscapeCodes ()) {
21
- return .escape_codes ;
22
- } else if (native_os == .windows and file .isTty ()) {
12
+ const force_color : ? bool = if (builtin .os .tag == .wasi )
13
+ null // wasi does not support environment variables
14
+ else if (process .hasEnvVarConstant ("ZIG_DEBUG_COLOR" ))
15
+ false
16
+ else if (process .hasEnvVarConstant ("YES_COLOR" ))
17
+ true
18
+ else
19
+ null ;
20
+
21
+ if (force_color == false ) return .no_color ;
22
+
23
+ if (native_os == .windows and file .isTty ()) {
23
24
var info : windows.CONSOLE_SCREEN_BUFFER_INFO = undefined ;
24
25
if (windows .kernel32 .GetConsoleScreenBufferInfo (file .handle , & info ) != windows .TRUE ) {
25
- // TODO: Should this return an error instead?
26
- return .no_color ;
26
+ return if (force_color == true ) .escape_codes else .no_color ;
27
27
}
28
28
return .{ .windows_api = .{
29
29
.handle = file .handle ,
30
30
.reset_attributes = info .wAttributes ,
31
31
} };
32
32
}
33
+
34
+ if (force_color == true or file .supportsAnsiEscapeCodes ()) {
35
+ return .escape_codes ;
36
+ }
37
+
33
38
return .no_color ;
34
39
}
35
40
0 commit comments