diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2025-09-03 20:36:42 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu.nakada@gmail.com> | 2025-10-05 15:07:09 +0900 |
| commit | 8cc5e5c11d26b2af9acff9898c2b226e2e781e36 (patch) | |
| tree | fa3d5ddb0d403fdd3483c0e805ac5a1cb0082a0c | |
| parent | 1858233ffaee482a73a91b796f02ebb7ae1306b9 (diff) | |
Win32: Fix fallback parsing of CSI SGR sequences
| -rw-r--r-- | win32/win32.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/win32/win32.c b/win32/win32.c index 72539e8a63..1a5308337a 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; |
