From 1846b07e80ceb64b0732538a56bf8463efde3c8d Mon Sep 17 00:00:00 2001 From: Berke Güzel Date: Tue, 13 Oct 2026 19:47:42 +0300 Subject: Optimize term_feed ASCII scanning alignment and fast CSI SGR single-param loop --- src/fastcsi.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/fastcsi.c') 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) { -- cgit v1.2.3