mirror of https://github.com/mpv-player/mpv
win32: correct SGR sequence handling
This should get colour working again on the Windows console. Fixes #1032.
This commit is contained in:
parent
67c6335efc
commit
ef1c6e9295
|
@ -41,6 +41,9 @@
|
||||||
|
|
||||||
#define hSTDOUT GetStdHandle(STD_OUTPUT_HANDLE)
|
#define hSTDOUT GetStdHandle(STD_OUTPUT_HANDLE)
|
||||||
#define hSTDERR GetStdHandle(STD_ERROR_HANDLE)
|
#define hSTDERR GetStdHandle(STD_ERROR_HANDLE)
|
||||||
|
|
||||||
|
#define FOREGROUND_ALL (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
|
||||||
|
|
||||||
static short stdoutAttrs = 0;
|
static short stdoutAttrs = 0;
|
||||||
static const unsigned char ansi2win32[8] = {
|
static const unsigned char ansi2win32[8] = {
|
||||||
0,
|
0,
|
||||||
|
@ -230,11 +233,16 @@ void mp_write_console_ansi(HANDLE wstream, char *buf)
|
||||||
case 'm': { // "SGR"
|
case 'm': { // "SGR"
|
||||||
for (int n = 0; n < num_params; n++) {
|
for (int n = 0; n < num_params; n++) {
|
||||||
int p = params[n];
|
int p = params[n];
|
||||||
if (p <= 0) {
|
if (p == 0) {
|
||||||
SetConsoleTextAttribute(wstream, stdoutAttrs);
|
info.wAttributes = stdoutAttrs;
|
||||||
} else if (p >= 0 && p < 8) {
|
SetConsoleTextAttribute(wstream, info.wAttributes);
|
||||||
SetConsoleTextAttribute(wstream,
|
} else if (p == 1) {
|
||||||
ansi2win32[p] | FOREGROUND_INTENSITY);
|
info.wAttributes |= FOREGROUND_INTENSITY;
|
||||||
|
SetConsoleTextAttribute(wstream, info.wAttributes);
|
||||||
|
} else if (p >= 30 && p < 38) {
|
||||||
|
info.wAttributes &= ~FOREGROUND_ALL;
|
||||||
|
info.wAttributes |= ansi2win32[p - 30];
|
||||||
|
SetConsoleTextAttribute(wstream, info.wAttributes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue