|
@ -1842,6 +1842,42 @@ csireset(void) |
|
|
memset(&csiescseq, 0, sizeof(csiescseq)); |
|
|
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 |
|
|
void |
|
|
strhandle(void) |
|
|
strhandle(void) |
|
|
{ |
|
|
{ |
|
@ -1880,6 +1916,45 @@ strhandle(void) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return; |
|
|
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 */ |
|
|
case 4: /* color set */ |
|
|
if (narg < 3) |
|
|
if (narg < 3) |
|
|
break; |
|
|
break; |
|
@ -1887,7 +1962,10 @@ strhandle(void) |
|
|
/* FALLTHROUGH */ |
|
|
/* FALLTHROUGH */ |
|
|
case 104: /* color reset, here p = NULL */ |
|
|
case 104: /* color reset, here p = NULL */ |
|
|
j = (narg > 1) ? atoi(strescseq.args[1]) : -1; |
|
|
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) |
|
|
if (par == 104 && narg <= 1) |
|
|
return; /* color reset without parameter */ |
|
|
return; /* color reset without parameter */ |
|
|
fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", |
|
|
fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", |
|
|