try harder to emit console colors
This commit is contained in:
parent
fd7654e4e8
commit
ba405ed59b
21
src/os.cpp
21
src/os.cpp
|
@ -948,6 +948,12 @@ static void set_color_posix(TermColor color) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#if defined(ZIG_OS_WINDOWS)
|
||||
bool got_orig_console_attrs = false;
|
||||
WORD original_console_attributes = FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE;
|
||||
#endif
|
||||
|
||||
void os_stderr_set_color(TermColor color) {
|
||||
#if defined(ZIG_OS_WINDOWS)
|
||||
if (is_stderr_cyg_pty()) {
|
||||
|
@ -965,22 +971,37 @@ void os_stderr_set_color(TermColor color) {
|
|||
mode_flags |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
||||
SetConsoleMode(stderr_handle, mode_flags);
|
||||
}
|
||||
|
||||
if (!got_orig_console_attrs) {
|
||||
got_orig_console_attrs = true;
|
||||
CONSOLE_SCREEN_BUFFER_INFO info;
|
||||
if (GetConsoleScreenBufferInfo(stderr_handle, &info)) {
|
||||
original_console_attributes = info.wAttributes;
|
||||
}
|
||||
}
|
||||
|
||||
DWORD chars_written;
|
||||
switch (color) {
|
||||
case TermColorRed:
|
||||
SetConsoleTextAttribute(stderr_handle, FOREGROUND_RED|FOREGROUND_INTENSITY);
|
||||
WriteConsole(stderr_handle, VT_RED, strlen(VT_RED), &chars_written, NULL);
|
||||
break;
|
||||
case TermColorGreen:
|
||||
SetConsoleTextAttribute(stderr_handle, FOREGROUND_GREEN|FOREGROUND_INTENSITY);
|
||||
WriteConsole(stderr_handle, VT_GREEN, strlen(VT_GREEN), &chars_written, NULL);
|
||||
break;
|
||||
case TermColorCyan:
|
||||
SetConsoleTextAttribute(stderr_handle, FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
|
||||
WriteConsole(stderr_handle, VT_CYAN, strlen(VT_CYAN), &chars_written, NULL);
|
||||
break;
|
||||
case TermColorWhite:
|
||||
SetConsoleTextAttribute(stderr_handle,
|
||||
FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
|
||||
WriteConsole(stderr_handle, VT_WHITE, strlen(VT_WHITE), &chars_written, NULL);
|
||||
break;
|
||||
case TermColorReset:
|
||||
{
|
||||
SetConsoleTextAttribute(stderr_handle, original_console_attributes);
|
||||
WriteConsole(stderr_handle, VT_RESET, strlen(VT_RESET), &chars_written, NULL);
|
||||
|
||||
DWORD mode_flags = 0;
|
||||
|
|
Loading…
Reference in New Issue
Block a user