1 Commits

Author SHA1 Message Date
2e7bb36b4a Added title-parsing-fix v0.8.5 patch 2023-06-27 21:11:34 +02:00
3 changed files with 22 additions and 126 deletions

View File

@ -170,42 +170,6 @@ static unsigned int defaultattr = 11;
*/
static uint forcemousemod = ShiftMask;
/*
* Xresources preferences to load at startup
*/
ResourcePref resources[] = {
{ "font", STRING, &font },
{ "color0", STRING, &colorname[0] },
{ "color1", STRING, &colorname[1] },
{ "color2", STRING, &colorname[2] },
{ "color3", STRING, &colorname[3] },
{ "color4", STRING, &colorname[4] },
{ "color5", STRING, &colorname[5] },
{ "color6", STRING, &colorname[6] },
{ "color7", STRING, &colorname[7] },
{ "color8", STRING, &colorname[8] },
{ "color9", STRING, &colorname[9] },
{ "color10", STRING, &colorname[10] },
{ "color11", STRING, &colorname[11] },
{ "color12", STRING, &colorname[12] },
{ "color13", STRING, &colorname[13] },
{ "color14", STRING, &colorname[14] },
{ "color15", STRING, &colorname[15] },
{ "background", STRING, &colorname[256] },
{ "foreground", STRING, &colorname[257] },
{ "cursorColor", STRING, &colorname[258] },
{ "termname", STRING, &termname },
{ "shell", STRING, &shell },
{ "minlatency", INTEGER, &minlatency },
{ "maxlatency", INTEGER, &maxlatency },
{ "blinktimeout", INTEGER, &blinktimeout },
{ "bellvolume", INTEGER, &bellvolume },
{ "tabspaces", INTEGER, &tabspaces },
{ "borderpx", INTEGER, &borderpx },
{ "cwscale", FLOAT, &cwscale },
{ "chscale", FLOAT, &chscale },
};
/*
* Internal mouse shortcuts.
* Beware that overloading Button1 will disable the selection.

34
st.c
View File

@ -42,6 +42,8 @@
#define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f))
#define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c))
#define ISDELIM(u) (u && wcschr(worddelimiters, u))
#define STRESCARGREST(n) ((n) == 0 ? strescseq.buf : strescseq.argp[(n)-1] + 1)
#define STRESCARGJUST(n) (*(strescseq.argp[n]) = '\0', STRESCARGREST(n))
enum term_mode {
MODE_WRAP = 1 << 0,
@ -148,7 +150,7 @@ typedef struct {
char *buf; /* allocated raw string */
size_t siz; /* allocation size */
size_t len; /* raw string length */
char *args[STR_ARG_SIZ];
char *argp[STR_ARG_SIZ]; /* pointers to the end of nth argument */
int narg; /* nb of args */
} STREscape;
@ -1879,29 +1881,30 @@ strhandle(void)
};
term.esc &= ~(ESC_STR_END|ESC_STR);
strparse();
par = (narg = strescseq.narg) ? atoi(strescseq.args[0]) : 0;
strescseq.buf[strescseq.len] = '\0';
switch (strescseq.type) {
case ']': /* OSC -- Operating System Command */
strparse();
par = (narg = strescseq.narg) ? atoi(STRESCARGJUST(0)) : 0;
switch (par) {
case 0:
if (narg > 1) {
xsettitle(strescseq.args[1]);
xseticontitle(strescseq.args[1]);
xsettitle(STRESCARGREST(1));
xseticontitle(STRESCARGREST(1));
}
return;
case 1:
if (narg > 1)
xseticontitle(strescseq.args[1]);
xseticontitle(STRESCARGREST(1));
return;
case 2:
if (narg > 1)
xsettitle(strescseq.args[1]);
xsettitle(STRESCARGREST(1));
return;
case 52:
if (narg > 2 && allowwindowops) {
dec = base64dec(strescseq.args[2]);
dec = base64dec(STRESCARGJUST(2));
if (dec) {
xsetsel(dec);
xclipcopy();
@ -1915,7 +1918,7 @@ strhandle(void)
case 12:
if (narg < 2)
break;
p = strescseq.args[1];
p = STRESCARGREST(1);
if ((j = par - 10) < 0 || j >= LEN(osc_table))
break; /* shouldn't be possible */
@ -1931,10 +1934,10 @@ strhandle(void)
case 4: /* color set */
if (narg < 3)
break;
p = strescseq.args[2];
p = STRESCARGJUST(2);
/* FALLTHROUGH */
case 104: /* color reset */
j = (narg > 1) ? atoi(strescseq.args[1]) : -1;
j = (narg > 1) ? atoi(STRESCARGJUST(1)) : -1;
if (p && !strcmp(p, "?")) {
osc_color_response(j, 0, 1);
@ -1956,7 +1959,7 @@ strhandle(void)
}
break;
case 'k': /* old title set compatibility */
xsettitle(strescseq.args[0]);
xsettitle(strescseq.buf);
return;
case 'P': /* DCS -- Device Control String */
case '_': /* APC -- Application Program Command */
@ -1975,18 +1978,17 @@ strparse(void)
char *p = strescseq.buf;
strescseq.narg = 0;
strescseq.buf[strescseq.len] = '\0';
if (*p == '\0')
return;
while (strescseq.narg < STR_ARG_SIZ) {
strescseq.args[strescseq.narg++] = p;
while ((c = *p) != ';' && c != '\0')
++p;
p++;
strescseq.argp[strescseq.narg++] = p;
if (c == '\0')
return;
*p++ = '\0';
p++;
}
}

78
x.c
View File

@ -14,7 +14,6 @@
#include <X11/keysym.h>
#include <X11/Xft/Xft.h>
#include <X11/XKBlib.h>
#include <X11/Xresource.h>
char *argv0;
#include "arg.h"
@ -46,19 +45,6 @@ typedef struct {
signed char appcursor; /* application cursor */
} Key;
/* Xresources preferences */
enum resource_type {
STRING = 0,
INTEGER = 1,
FLOAT = 2
};
typedef struct {
char *name;
enum resource_type type;
void *dst;
} ResourcePref;
/* X modifiers */
#define XK_ANY_MOD UINT_MAX
#define XK_NO_MOD 0
@ -873,8 +859,8 @@ xclear(int x1, int y1, int x2, int y2)
void
xhints(void)
{
XClassHint class = {opt_name ? opt_name : "st",
opt_class ? opt_class : "St"};
XClassHint class = {opt_name ? opt_name : termname,
opt_class ? opt_class : termname};
XWMHints wm = {.flags = InputHint, .input = 1};
XSizeHints *sizeh;
@ -1149,6 +1135,8 @@ xinit(int cols, int rows)
pid_t thispid = getpid();
XColor xmousefg, xmousebg;
if (!(xw.dpy = XOpenDisplay(NULL)))
die("can't open display\n");
xw.scr = XDefaultScreen(xw.dpy);
xw.vis = XDefaultVisual(xw.dpy, xw.scr);
@ -2026,59 +2014,6 @@ run(void)
}
}
int
resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
{
char **sdst = dst;
int *idst = dst;
float *fdst = dst;
char fullname[256];
char fullclass[256];
char *type;
XrmValue ret;
snprintf(fullname, sizeof(fullname), "%s.%s",
opt_name ? opt_name : "st", name);
snprintf(fullclass, sizeof(fullclass), "%s.%s",
opt_class ? opt_class : "St", name);
fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
XrmGetResource(db, fullname, fullclass, &type, &ret);
if (ret.addr == NULL || strncmp("String", type, 64))
return 1;
switch (rtype) {
case STRING:
*sdst = ret.addr;
break;
case INTEGER:
*idst = strtoul(ret.addr, NULL, 10);
break;
case FLOAT:
*fdst = strtof(ret.addr, NULL);
break;
}
return 0;
}
void
config_init(void)
{
char *resm;
XrmDatabase db;
ResourcePref *p;
XrmInitialize();
resm = XResourceManagerString(xw.dpy);
if (!resm)
return;
db = XrmGetStringDatabase(resm);
for (p = resources; p < resources + LEN(resources); p++)
resource_load(db, p->name, p->type, p->dst);
}
void
usage(void)
{
@ -2152,11 +2087,6 @@ run:
setlocale(LC_CTYPE, "");
XSetLocaleModifiers("");
if(!(xw.dpy = XOpenDisplay(NULL)))
die("Can't open display\n");
config_init();
cols = MAX(cols, 1);
rows = MAX(rows, 1);
tnew(cols, rows);