st-noxz

[fork] suckless st - personal fork
git clone git://git.noxz.tech/st-noxz
Log | Files | Refs | README | LICENSE

commit 35cb81e24c6d58b6412f614bdef6915785175b05
parent d64877b26ec2287b5d1b8176db81a15735159cec
Author: Chris Noxz <chris@noxz.tech>
Date:   Wed, 14 Aug 2019 13:41:26 +0200

get colors from 'vt' (get_vt_colors)

Diffstat:
Mconfig.def.h | 50+++++++++++++++++++++-----------------------------
Mx.c | 50+++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 68 insertions(+), 32 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -98,32 +98,24 @@ char *termname = "st-256color"; unsigned int tabspaces = 8; /* Terminal colors (16 first used in escape sequence) */ -static const char *colorname[] = { - /* 8 normal colors */ - "black", - "red3", - "green3", - "yellow3", - "blue2", - "magenta3", - "cyan3", - "gray90", - - /* 8 bright colors */ - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", - +static char colorname[][8] = { + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", + "#000000", [255] = 0, - - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", }; @@ -131,10 +123,10 @@ static const char *colorname[] = { * Default colors (colorname index) * foreground, background, cursor, reverse cursor */ -unsigned int defaultfg = 7; -unsigned int defaultbg = 0; -static unsigned int defaultcs = 256; -static unsigned int defaultrcs = 257; +unsigned int defaultbg = 0; +unsigned int defaultfg = 7; +unsigned int defaultcs = 7; +unsigned int defaultrcs = 0; /* * Default shape of cursor diff --git a/x.c b/x.c @@ -173,6 +173,7 @@ static void mousesel(XEvent *, int); static void mousereport(XEvent *); static char *kmap(KeySym, uint); static int match(uint, uint); +static void get_vt_colors(void); static void run(void); static void usage(void); @@ -745,13 +746,15 @@ xloadcols(void) Color *cp; signal(SIGREDRW, &redraw_signalhandler); + get_vt_colors(); + + dc.collen = 256; + dc.collen = MAX(LEN(colorname), dc.collen); + dc.col = xmalloc(dc.collen * sizeof(Color)); if (loaded) { for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp) XftColorFree(xw.dpy, xw.vis, xw.cmap, cp); - } else { - dc.collen = MAX(LEN(colorname), 256); - dc.col = xmalloc(dc.collen * sizeof(Color)); } for (i = 0; i < dc.collen; i++) @@ -1896,6 +1899,47 @@ run(void) } void +get_vt_colors(void) +{ + char *cfs[3] = { + "/sys/module/vt/parameters/default_red", + "/sys/module/vt/parameters/default_grn", + "/sys/module/vt/parameters/default_blu", + }; + char vtcs[16][8]; + char tk[] = ","; + char cl[64]; + char *tp = NULL; + FILE *fp; + size_t r, l; + int i, c, n; + + for (i = 0; i < 16; i++) + strcpy(vtcs[i], "#000000"); + + for (i = 0, r = 0; i < 3; i++) { + if ((fp = fopen(cfs[i], "r")) == NULL) + continue; + while ((cl[r] = fgetc(fp)) != EOF && cl[r] != '\n') + r++; + cl[r] = '\0'; + for (c = 0, tp = cl, n = 0; c < 16; c++, tp++) { + if ((r = strcspn(tp, tk)) == -1) + break; + for (n = 0; r && *tp >= 48 && *tp < 58; r--, tp++) + n = n * 10 - 48 + *tp; + vtcs[c][i * 2 + 1] = n / 16 < 10 ? n / 16 + 48 : n / 16 + 87; + vtcs[c][i * 2 + 2] = n % 16 < 10 ? n % 16 + 48 : n % 16 + 87; + } + fclose(fp); + } + for (i = 0; i < 16; i++) { + if (strlen(colorname[i]) >= strlen(vtcs[i])) + memcpy(colorname[i], vtcs[i], 7); + } +} + +void usage(void) { die("usage: %s [-aiv] [-c class] [-f font] [-g geometry]"