@@ -948,6 +948,12 @@ static void set_color_posix(TermColor color) {
948948 }
949949}
950950
951+
952+ #if defined(ZIG_OS_WINDOWS)
953+ bool got_orig_console_attrs = false ;
954+ WORD original_console_attributes = FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE ;
955+ #endif
956+
951957void os_stderr_set_color (TermColor color) {
952958#if defined(ZIG_OS_WINDOWS)
953959 if (is_stderr_cyg_pty ()) {
@@ -965,22 +971,37 @@ void os_stderr_set_color(TermColor color) {
965971 mode_flags |= ENABLE_VIRTUAL_TERMINAL_PROCESSING ;
966972 SetConsoleMode (stderr_handle, mode_flags);
967973 }
974+
975+ if (!got_orig_console_attrs) {
976+ got_orig_console_attrs = true ;
977+ CONSOLE_SCREEN_BUFFER_INFO info;
978+ if (GetConsoleScreenBufferInfo (stderr_handle, &info)) {
979+ original_console_attributes = info.wAttributes ;
980+ }
981+ }
982+
968983 DWORD chars_written;
969984 switch (color) {
970985 case TermColorRed:
986+ SetConsoleTextAttribute (stderr_handle, FOREGROUND_RED |FOREGROUND_INTENSITY );
971987 WriteConsole (stderr_handle, VT_RED , strlen (VT_RED ), &chars_written, NULL );
972988 break ;
973989 case TermColorGreen:
990+ SetConsoleTextAttribute (stderr_handle, FOREGROUND_GREEN |FOREGROUND_INTENSITY );
974991 WriteConsole (stderr_handle, VT_GREEN , strlen (VT_GREEN ), &chars_written, NULL );
975992 break ;
976993 case TermColorCyan:
994+ SetConsoleTextAttribute (stderr_handle, FOREGROUND_GREEN |FOREGROUND_BLUE |FOREGROUND_INTENSITY );
977995 WriteConsole (stderr_handle, VT_CYAN , strlen (VT_CYAN ), &chars_written, NULL );
978996 break ;
979997 case TermColorWhite:
998+ SetConsoleTextAttribute (stderr_handle,
999+ FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE |FOREGROUND_INTENSITY );
9801000 WriteConsole (stderr_handle, VT_WHITE , strlen (VT_WHITE ), &chars_written, NULL );
9811001 break ;
9821002 case TermColorReset:
9831003 {
1004+ SetConsoleTextAttribute (stderr_handle, original_console_attributes);
9841005 WriteConsole (stderr_handle, VT_RESET , strlen (VT_RESET ), &chars_written, NULL );
9851006
9861007 DWORD mode_flags = 0 ;
0 commit comments