Merge branch 'master' of git://git.suckless.org/st
commit
01f86e5c2a
|
@ -162,10 +162,10 @@ static const char *altcolorname[] = {
|
|||
* Default colors (colorname index)
|
||||
* foreground, background, cursor, reverse cursor
|
||||
*/
|
||||
unsigned int defaultfg = 12;
|
||||
unsigned int defaultbg = 8;
|
||||
static unsigned int defaultcs = 14;
|
||||
static unsigned int defaultrcs = 15;
|
||||
unsigned int defaultfg = 258;
|
||||
unsigned int defaultbg = 259;
|
||||
unsigned int defaultcs = 256;
|
||||
static unsigned int defaultrcs = 257;
|
||||
|
||||
/*
|
||||
* Default shape of cursor
|
||||
|
|
2
config.h
2
config.h
|
@ -151,7 +151,7 @@ static const char *altcolorname[] = {
|
|||
*/
|
||||
unsigned int defaultfg = 12;
|
||||
unsigned int defaultbg = 8;
|
||||
static unsigned int defaultcs = 14;
|
||||
unsigned int defaultcs = 14;
|
||||
static unsigned int defaultrcs = 15;
|
||||
|
||||
/*
|
||||
|
|
86
st.c
86
st.c
|
@ -1912,6 +1912,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)
|
||||
{
|
||||
|
@ -1950,14 +1986,56 @@ 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();
|
||||
return;
|
||||
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();
|
||||
return;
|
||||
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();
|
||||
return;
|
||||
case 4: /* color set */
|
||||
if (narg < 3)
|
||||
break;
|
||||
p = strescseq.args[2];
|
||||
/* FALLTHROUGH */
|
||||
case 104: /* color reset, here p = NULL */
|
||||
case 104: /* color reset */
|
||||
j = (narg > 1) ? atoi(strescseq.args[1]) : -1;
|
||||
if (xsetcolorname(j, p)) {
|
||||
|
||||
if (p && !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",
|
||||
|
@ -2499,6 +2577,10 @@ check_control_code:
|
|||
if (width == 2) {
|
||||
gp->mode |= ATTR_WIDE;
|
||||
if (term.c.x+1 < term.col) {
|
||||
if (gp[1].mode == ATTR_WIDE && term.c.x+2 < term.col) {
|
||||
gp[2].u = ' ';
|
||||
gp[2].mode &= ~ATTR_WDUMMY;
|
||||
}
|
||||
gp[1].u = '\0';
|
||||
gp[1].mode = ATTR_WDUMMY;
|
||||
}
|
||||
|
|
1
st.h
1
st.h
|
@ -140,3 +140,4 @@ extern unsigned int defaultfg;
|
|||
extern unsigned int defaultbg;
|
||||
extern const int boxdraw, boxdraw_bold, boxdraw_braille;
|
||||
extern float alpha;
|
||||
extern unsigned int defaultcs;
|
||||
|
|
13
x.c
13
x.c
|
@ -854,6 +854,19 @@ xloadcols(void)
|
|||
loaded = 1;
|
||||
}
|
||||
|
||||
int
|
||||
xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b)
|
||||
{
|
||||
if (!BETWEEN(x, 0, dc.collen))
|
||||
return 1;
|
||||
|
||||
*r = dc.col[x].color.red >> 8;
|
||||
*g = dc.col[x].color.green >> 8;
|
||||
*b = dc.col[x].color.blue >> 8;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
xsetcolorname(int x, const char *name)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue