|
|
|
@ -1842,6 +1842,42 @@ csireset(void)
|
|
|
|
|
memset(&csiescseq, 0, sizeof(csiescseq));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
osc4_color_response(int num)
|
|
|
|
|
{
|
|
|
|
|
int n;
|
|
|
|
|
char buf[32];
|
|
|
|
|
unsigned char r, g, b;
|
|
|
|
|
|
|
|
|
|
if (xgetcolor(num, &r, &g, &b)) {
|
|
|
|
|
fprintf(stderr, "erresc: failed to fetch osc4 color %d\n", num);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
n = snprintf(buf, sizeof buf, "\033]4;%d;rgb:%02x%02x/%02x%02x/%02x%02x\007",
|
|
|
|
|
num, r, r, g, g, b, b);
|
|
|
|
|
|
|
|
|
|
ttywrite(buf, n, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
osc_color_response(int index, int num)
|
|
|
|
|
{
|
|
|
|
|
int n;
|
|
|
|
|
char buf[32];
|
|
|
|
|
unsigned char r, g, b;
|
|
|
|
|
|
|
|
|
|
if (xgetcolor(index, &r, &g, &b)) {
|
|
|
|
|
fprintf(stderr, "erresc: failed to fetch osc color %d\n", index);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
n = snprintf(buf, sizeof buf, "\033]%d;rgb:%02x%02x/%02x%02x/%02x%02x\007",
|
|
|
|
|
num, r, r, g, g, b, b);
|
|
|
|
|
|
|
|
|
|
ttywrite(buf, n, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
strhandle(void)
|
|
|
|
|
{
|
|
|
|
@ -1880,6 +1916,45 @@ strhandle(void)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
case 10:
|
|
|
|
|
if (narg < 2)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
p = strescseq.args[1];
|
|
|
|
|
|
|
|
|
|
if (!strcmp(p, "?"))
|
|
|
|
|
osc_color_response(defaultfg, 10);
|
|
|
|
|
else if (xsetcolorname(defaultfg, p))
|
|
|
|
|
fprintf(stderr, "erresc: invalid foreground color: %s\n", p);
|
|
|
|
|
else
|
|
|
|
|
redraw();
|
|
|
|
|
break;
|
|
|
|
|
case 11:
|
|
|
|
|
if (narg < 2)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
p = strescseq.args[1];
|
|
|
|
|
|
|
|
|
|
if (!strcmp(p, "?"))
|
|
|
|
|
osc_color_response(defaultbg, 11);
|
|
|
|
|
else if (xsetcolorname(defaultbg, p))
|
|
|
|
|
fprintf(stderr, "erresc: invalid background color: %s\n", p);
|
|
|
|
|
else
|
|
|
|
|
redraw();
|
|
|
|
|
break;
|
|
|
|
|
case 12:
|
|
|
|
|
if (narg < 2)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
p = strescseq.args[1];
|
|
|
|
|
|
|
|
|
|
if (!strcmp(p, "?"))
|
|
|
|
|
osc_color_response(defaultcs, 12);
|
|
|
|
|
else if (xsetcolorname(defaultcs, p))
|
|
|
|
|
fprintf(stderr, "erresc: invalid cursor color: %s\n", p);
|
|
|
|
|
else
|
|
|
|
|
redraw();
|
|
|
|
|
break;
|
|
|
|
|
case 4: /* color set */
|
|
|
|
|
if (narg < 3)
|
|
|
|
|
break;
|
|
|
|
@ -1887,7 +1962,10 @@ strhandle(void)
|
|
|
|
|
/* FALLTHROUGH */
|
|
|
|
|
case 104: /* color reset, here p = NULL */
|
|
|
|
|
j = (narg > 1) ? atoi(strescseq.args[1]) : -1;
|
|
|
|
|
if (xsetcolorname(j, p)) {
|
|
|
|
|
|
|
|
|
|
if (!strcmp(p, "?"))
|
|
|
|
|
osc4_color_response(j);
|
|
|
|
|
else if (xsetcolorname(j, p)) {
|
|
|
|
|
if (par == 104 && narg <= 1)
|
|
|
|
|
return; /* color reset without parameter */
|
|
|
|
|
fprintf(stderr, "erresc: invalid color j=%d, p=%s\n",
|
|
|
|
|