commit - 376698f46c18c688df37fff90c7072c0b1fde598
commit + c04657cc69ac489caded6667bd92bdc963e1b432
blob - 6b0576490f19d8198ed8dbb496d9ed29723b8e58
blob + 12642fb520d9d82ba0eb079dd823ce7d3c108d55
Binary files dwm/dwm and dwm/dwm differ
blob - 7abb01c013fc2e885049188060f0d858024a8bab
blob + 97466f32c0cb8cb1eae0da4e31a6bc9e179caa20
Binary files slstatus/slstatus and slstatus/slstatus differ
blob - /dev/null
blob + dbb73757924bc9f637a48597eb7ad3b34ecaa24a (mode 644)
--- /dev/null
+++ install.sh
+#!/usr/bin/env sh
+
+set -eo pipefail
+
+cd dwm && make && doas make install && cd ..
+cd st && make && doas make install && cd ..
+cd slstatus && make && doas make install && cd ..
blob - 91ab8cab2c709e9f235c0892d4c48c83f2bdc5dc
blob + 2cd740a247dc2a13c1f0ad6301ca4027f28bf6e1
--- st/config.def.h
+++ st/config.def.h
* near minlatency, but it waits longer for slow updates to avoid partial draw.
* low minlatency will tear/flicker more, as it can "detect" idle too early.
*/
-static double minlatency = 8;
+static double minlatency = 2;
static double maxlatency = 33;
/*
blob - 1aa91886731f2d3e0250312aa00bc1590d643295
blob + 71b64f60ab7c92d7539f5596f8c4568a1a7bffec
--- st/config.h
+++ st/config.h
*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/
-static char *font = "GoMono Nerd Font:size=11";
+static char *font = "Go Mono:size=11";
static int borderpx = 2;
/*
blob - 9f1c45e14b846b99e93ea18fc7ccf1cc59273cce
blob + e8e71cf8012a4629c2797a3cda1721d120673f3f
--- st/config.mk
+++ st/config.mk
# st version
-VERSION = 0.9
+VERSION = 0.9.3
# Customize below to fit your system
blob - /dev/null
blob + f6928f9ef61e235d593c2c7cbea0dc3f4ca723ae (mode 755)
Binary files /dev/null and st/st differ
blob - d6478f55a2498f36bc1c0fa54bdff5de94e1b114
blob + 8e579910165a90575000551bd575aab7fd4a901e
--- st/st.c
+++ st/st.c
{
char *p = csiescseq.buf, *np;
long int v;
+ int sep = ';'; /* colon or semi-colon, but not both */
csiescseq.narg = 0;
if (*p == '?') {
v = -1;
csiescseq.arg[csiescseq.narg++] = v;
p = np;
- if (*p != ';' || csiescseq.narg == ESC_ARG_SIZ)
+ if (sep == ';' && *p == ':')
+ sep = ':'; /* allow override to colon once */
+ if (*p != sep || csiescseq.narg == ESC_ARG_SIZ)
break;
p++;
}
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;
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 */
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);
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 */
ttywrite(vtiden, strlen(vtiden), 0);
break;
case 'b': /* REP -- if last char is printable print it <n> more times */
- DEFAULT(csiescseq.arg[0], 1);
+ LIMIT(csiescseq.arg[0], 1, 65535);
if (term.lastc)
while (csiescseq.arg[0]-- > 0)
tputc(term.lastc);
}
break;
case 1: /* above */
- if (term.c.y > 1)
+ if (term.c.y > 0)
tclearregion(0, 0, term.col-1, term.c.y-1);
tclearregion(0, term.c.y, term.c.x, term.c.y);
break;
}
break;
case 'S': /* SU -- Scroll <n> line up */
+ if (csiescseq.priv) break;
DEFAULT(csiescseq.arg[0], 1);
tscrollup(term.top, csiescseq.arg[0]);
break;
tcursor(CURSOR_SAVE);
break;
case 'u': /* DECRC -- Restore cursor position (ANSI.SYS) */
- tcursor(CURSOR_LOAD);
+ if (csiescseq.priv) {
+ goto unknown;
+ } else {
+ tcursor(CURSOR_LOAD);
+ }
break;
case ' ':
switch (csiescseq.mode[1]) {
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) {
}
}
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];
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 */
blob - b36fb8c8f0ce6272d59224ac28d2b92333128507
blob + d73152b5f07f811af386c183329f59d495300ab4
--- st/x.c
+++ st/x.c
{
XGCValues gcvalues;
Cursor cursor;
- Window parent;
+ Window parent, root;
pid_t thispid = getpid();
XColor xmousefg, xmousebg;
| ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
xw.attrs.colormap = xw.cmap;
+ root = XRootWindow(xw.dpy, xw.scr);
if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
- parent = XRootWindow(xw.dpy, xw.scr);
- xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
+ parent = root;
+ xw.win = XCreateWindow(xw.dpy, root, xw.l, xw.t,
win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
| CWEventMask | CWColormap, &xw.attrs);
+ if (parent != root)
+ XReparentWindow(xw.dpy, xw.win, parent, xw.l, xw.t);
memset(&gcvalues, 0, sizeof(gcvalues));
gcvalues.graphics_exposures = False;
- dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
+ dc.gc = XCreateGC(xw.dpy, xw.win, GCGraphicsExposures,
&gcvalues);
xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
DefaultDepth(xw.dpy, xw.scr));
XTextProperty prop;
DEFAULT(p, opt_title);
+ if (p[0] == '\0')
+ p = opt_title;
+
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
&prop) != Success)
return;
XTextProperty prop;
DEFAULT(p, opt_title);
+ if (p[0] == '\0')
+ p = opt_title;
+
if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
&prop) != Success)
return;