summaryrefslogtreecommitdiff
path: root/src/fastcsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fastcsi.c')
-rw-r--r--src/fastcsi.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/fastcsi.c b/src/fastcsi.c
index dfd2dba..6cae7a3 100644
--- a/src/fastcsi.c
+++ b/src/fastcsi.c
@@ -253,6 +253,38 @@ int term_try_fast_csi(struct term *t, const char *buf, size_t rem)
p = q + 1;
break;
case 'm': {
+ if (nparams == 1) {
+ int v = pv[0];
+ switch (v) {
+ case 0: reset_sgr(t); fg = t->cur_fg; bg = t->cur_bg; break;
+ case 1: t->bold = true; break;
+ case 2: t->faint = true; break;
+ case 3: t->italic = true; break;
+ case 4: t->underline = 1; break;
+ case 7: t->inverse = true; break;
+ case 9: t->strike = true; break;
+ case 21: t->underline = 2; break;
+ case 22: t->bold = false; t->faint = false; break;
+ case 23: t->italic = false; break;
+ case 24: t->underline = 0; break;
+ case 27: t->inverse = false; break;
+ case 29: t->strike = false; break;
+ case 39: fg = TERM_COLOR_FG; break;
+ case 49: bg = TERM_COLOR_BG; break;
+ case 53: t->overline = true; break;
+ case 55: t->overline = false; break;
+ case 59: t->cur_ul = 0; break;
+ default:
+ if ((unsigned)(v - 30) < 8) fg = term_color_index(v - 30);
+ else if ((unsigned)(v - 40) < 8) bg = term_color_index(v - 40);
+ else if ((unsigned)(v - 90) < 8) fg = term_color_index(v - 90 + 8);
+ else if ((unsigned)(v - 100) < 8) bg = term_color_index(v - 100 + 8);
+ break;
+ }
+ flags_ok = false;
+ p = q + 1;
+ break;
+ }
for (int j = 0; j < nparams; j++) {
int v = pv[j];
switch (v) {