commit 31c3734a4f6c38dae90cefc5aa43b217b41e00a9
parent 940be44cf342ba880e02f905c6eb42e55cee5cf8
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 26 Oct 2025 21:34:40 +0900
Merge https://git.suckless.org/st
Diffstat:
| M | config.mk | | | 2 | +- |
| M | st.c | | | 39 | +++++++++++++++++++++++++++++---------- |
2 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/config.mk b/config.mk
@@ -1,5 +1,5 @@
# st version
-VERSION = 0.9.2
+VERSION = 0.9.3
# Customize below to fit your system
diff --git a/st.c b/st.c
@@ -1420,16 +1420,22 @@ tsetattr(const int *attr, int l)
if ((idx = tdefcolor(attr, &i, l)) >= 0)
term.c.attr.fg = idx;
break;
- case 39:
+ case 39: /* set foreground color to default */
term.c.attr.fg = defaultfg;
break;
case 48:
if ((idx = tdefcolor(attr, &i, l)) >= 0)
term.c.attr.bg = idx;
break;
- case 49:
+ case 49: /* set background color to default */
term.c.attr.bg = defaultbg;
break;
+ case 58:
+ /* This starts a sequence to change the color of
+ * "underline" pixels. We don't support that and
+ * instead eat up a following "5;n" or "2;r;g;b". */
+ tdefcolor(attr, &i, l);
+ break;
default:
if (BETWEEN(attr[i], 30, 37)) {
term.c.attr.fg = attr[i] - 30;
@@ -1526,7 +1532,7 @@ tsetmode(int priv, int set, const int *args, int narg)
case 1006: /* 1006: extended reporting mode */
xsetmode(set, MODE_MOUSESGR);
break;
- case 1034:
+ case 1034: /* 1034: enable 8-bit mode for keyboard input */
xsetmode(set, MODE_8BIT);
break;
case 1049: /* swap screen & set/restore cursor as xterm */
@@ -1534,8 +1540,8 @@ tsetmode(int priv, int set, const int *args, int narg)
break;
tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
/* FALLTHROUGH */
- case 47: /* swap screen */
- case 1047:
+ case 47: /* swap screen buffer */
+ case 1047: /* swap screen buffer */
if (!allowaltscreen)
break;
alt = IS_SET(MODE_ALTSCREEN);
@@ -1548,7 +1554,7 @@ tsetmode(int priv, int set, const int *args, int narg)
if (*args != 1049)
break;
/* FALLTHROUGH */
- case 1048:
+ case 1048: /* save/restore cursor (like DECSC/DECRC) */
tcursor((set) ? CURSOR_SAVE : CURSOR_LOAD);
break;
case 2004: /* 2004: bracketed paste mode */
@@ -1907,7 +1913,7 @@ strhandle(void)
if (narg > 1)
xsettitle(strescseq.args[1]);
return;
- case 52:
+ case 52: /* manipulate selection data */
if (narg > 2 && allowwindowops) {
dec = base64dec(strescseq.args[2]);
if (dec) {
@@ -1918,9 +1924,9 @@ strhandle(void)
}
}
return;
- case 10:
- case 11:
- case 12:
+ case 10: /* set dynamic VT100 text foreground color */
+ case 11: /* set dynamic VT100 text background color */
+ case 12: /* set dynamic text cursor color */
if (narg < 2)
break;
p = strescseq.args[1];
@@ -1961,6 +1967,19 @@ strhandle(void)
tfulldirt();
}
return;
+ case 110: /* reset dynamic VT100 text foreground color */
+ case 111: /* reset dynamic VT100 text background color */
+ case 112: /* reset dynamic text cursor color */
+ if (narg != 1)
+ break;
+ if ((j = par - 110) < 0 || j >= LEN(osc_table))
+ break; /* shouldn't be possible */
+ if (xsetcolorname(osc_table[j].idx, NULL)) {
+ fprintf(stderr, "erresc: %s color not found\n", osc_table[j].str);
+ } else {
+ tfulldirt();
+ }
+ return;
}
break;
case 'k': /* old title set compatibility */