| ... | ... | @@ -948,6 +948,12 @@ static void set_color_posix(TermColor color) { |
| 948 | 948 | } |
| 949 | 949 | } |
| 950 | 950 | |
| 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 | |
| 951 | 957 | void os_stderr_set_color(TermColor color) { |
| 952 | 958 | #if defined(ZIG_OS_WINDOWS) |
| 953 | 959 | if (is_stderr_cyg_pty()) { |
| ... | ... | @@ -965,22 +971,37 @@ void os_stderr_set_color(TermColor color) { |
| 965 | 971 | mode_flags |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; |
| 966 | 972 | SetConsoleMode(stderr_handle, mode_flags); |
| 967 | 973 | } |
| 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 | |
| 968 | 983 | DWORD chars_written; |
| 969 | 984 | switch (color) { |
| 970 | 985 | case TermColorRed: |
| 986 | SetConsoleTextAttribute(stderr_handle, FOREGROUND_RED|FOREGROUND_INTENSITY); |
| 971 | 987 | WriteConsole(stderr_handle, VT_RED, strlen(VT_RED), &chars_written, NULL); |
| 972 | 988 | break; |
| 973 | 989 | case TermColorGreen: |
| 990 | SetConsoleTextAttribute(stderr_handle, FOREGROUND_GREEN|FOREGROUND_INTENSITY); |
| 974 | 991 | WriteConsole(stderr_handle, VT_GREEN, strlen(VT_GREEN), &chars_written, NULL); |
| 975 | 992 | break; |
| 976 | 993 | case TermColorCyan: |
| 994 | SetConsoleTextAttribute(stderr_handle, FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY); |
| 977 | 995 | WriteConsole(stderr_handle, VT_CYAN, strlen(VT_CYAN), &chars_written, NULL); |
| 978 | 996 | break; |
| 979 | 997 | case TermColorWhite: |
| 998 | SetConsoleTextAttribute(stderr_handle, |
| 999 | FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY); |
| 980 | 1000 | WriteConsole(stderr_handle, VT_WHITE, strlen(VT_WHITE), &chars_written, NULL); |
| 981 | 1001 | break; |
| 982 | 1002 | case TermColorReset: |
| 983 | 1003 | { |
| 1004 | SetConsoleTextAttribute(stderr_handle, original_console_attributes); |
| 984 | 1005 | WriteConsole(stderr_handle, VT_RESET, strlen(VT_RESET), &chars_written, NULL); |
| 985 | 1006 | |
| 986 | 1007 | DWORD mode_flags = 0; |