summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2025-09-03 20:36:42 +0900
committerNobuyoshi Nakada <nobu.nakada@gmail.com>2025-10-05 15:07:09 +0900
commit8cc5e5c11d26b2af9acff9898c2b226e2e781e36 (patch)
treefa3d5ddb0d403fdd3483c0e805ac5a1cb0082a0c
parent1858233ffaee482a73a91b796f02ebb7ae1306b9 (diff)
Win32: Fix fallback parsing of CSI SGR sequences
-rw-r--r--win32/win32.c26
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;