From 8cc5e5c11d26b2af9acff9898c2b226e2e781e36 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 3 Sep 2025 20:36:42 +0900 Subject: [PATCH] Win32: Fix fallback parsing of CSI SGR sequences --- win32/win32.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/win32/win32.c b/win32/win32.c index 72539e8a63b209..1a5308337a05d3 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -6793,47 +6793,54 @@ constat_attr(int count, const int *seq, WORD attr, WORD default_attr, int *rever case 1: bold = FOREGROUND_INTENSITY; break; + case 22: + bold = 0; + break; case 4: #ifndef COMMON_LVB_UNDERSCORE #define COMMON_LVB_UNDERSCORE 0x8000 #endif attr |= COMMON_LVB_UNDERSCORE; break; + case 24: + attr &= ~COMMON_LVB_UNDERSCORE; + break; case 7: rev = 1; break; + case 27: + rev = 0; + break; case 30: attr &= ~(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); break; - case 17: case 31: attr = (attr & ~(FOREGROUND_BLUE | FOREGROUND_GREEN)) | FOREGROUND_RED; break; - case 18: case 32: attr = (attr & ~(FOREGROUND_BLUE | FOREGROUND_RED)) | FOREGROUND_GREEN; break; - case 19: case 33: attr = (attr & ~FOREGROUND_BLUE) | FOREGROUND_GREEN | FOREGROUND_RED; break; - case 20: case 34: attr = (attr & ~(FOREGROUND_GREEN | FOREGROUND_RED)) | FOREGROUND_BLUE; break; - case 21: case 35: attr = (attr & ~FOREGROUND_GREEN) | FOREGROUND_BLUE | FOREGROUND_RED; break; - case 22: case 36: attr = (attr & ~FOREGROUND_RED) | FOREGROUND_BLUE | FOREGROUND_GREEN; break; - case 23: case 37: attr |= FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; break; + case 38: /* 256-color or true color; N/A on old Command Prompt */ + break; + case 39: + attr = (attr & ~FOREGROUND_MASK) | (default_attr & FOREGROUND_MASK); + break; case 40: attr &= ~(BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); @@ -6859,6 +6866,11 @@ constat_attr(int count, const int *seq, WORD attr, WORD default_attr, int *rever case 47: attr |= BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; break; + case 48: /* 256-color or true color; N/A on old Command Prompt */ + break; + case 49: + attr = (attr & ~BACKGROUND_MASK) | (default_attr & BACKGROUND_MASK); + break; } } attr |= bold;