dwm-sgrstatus256-20220223-6.3.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-sgrstatus256-20220223-6.3.diff (3430B)
---
1 From 7be41dd26e562072afc11621432aa71d2ea5622a Mon Sep 17 00:00:00 2001
2 From: Santtu Lakkala <inz@inz.fi>
3 Date: Wed, 23 Feb 2022 16:22:59 +0200
4 Subject: [PATCH 2/2] 256 colors SGR support
5
6 ---
7 dwm.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
8 1 file changed, 64 insertions(+), 3 deletions(-)
9
10 diff --git a/dwm.c b/dwm.c
11 index cb9484a..e2dc586 100644
12 --- a/dwm.c
13 +++ b/dwm.c
14 @@ -264,7 +264,7 @@ static Atom wmatom[WMLast], netatom[NetLast];
15 static int running = 1;
16 static Cur *cursor[CurLast];
17 static Clr **scheme;
18 -static Clr *barclrs;
19 +static Clr barclrs[256];
20 static Display *dpy;
21 static Drw *drw;
22 static Monitor *mons, *selmon;
23 @@ -804,8 +804,25 @@ drawbar(Monitor *m)
24 lp = 0;
25
26 char *ep = stext + rd + 1;
27 + int ignore = 0;
28 + int bgfg = 0;
29 while (*ep != 'm') {
30 unsigned v = strtoul(ep + 1, &ep, 10);
31 + if (ignore)
32 + continue;
33 + if (bgfg) {
34 + if (bgfg < 4 && v == 5) {
35 + bgfg <<= 1;
36 + continue;
37 + }
38 + if (bgfg == 4)
39 + scm[0] = barclrs[fg = v];
40 + else if (bgfg == 6)
41 + scm[1] = barclrs[bg = v];
42 + ignore = 1;
43 +
44 + continue;
45 + }
46 if (v == 0) {
47 memcpy(scm, scheme[SchemeNorm], sizeof(scm));
48 fg = 7;
49 @@ -850,9 +867,13 @@ drawbar(Monitor *m)
50 } else if (v >= 30 && v <= 37) {
51 fg = v % 10 | (fg & 8);
52 scm[0] = barclrs[fg];
53 + } else if (v == 38) {
54 + bgfg = 2;
55 } else if (v >= 40 && v <= 47) {
56 bg = v % 10;
57 scm[1] = barclrs[bg];
58 + } else if (v == 48) {
59 + bgfg = 3;
60 } else if (v == 53) {
61 fmt |= OVERLINE;
62 } else if (v == 55) {
63 @@ -1701,12 +1722,19 @@ setmfact(const Arg *arg)
64 arrange(selmon);
65 }
66
67 +unsigned char
68 +sixd_to_8bit(int x)
69 +{
70 + return x == 0 ? 0 : 0x37 + 0x28 * x;
71 +}
72 +
73 void
74 setup(void)
75 {
76 int i;
77 XSetWindowAttributes wa;
78 Atom utf8string;
79 + char cbuf[8];
80
81 /* clean up any zombies immediately */
82 sigchld(0);
83 @@ -1746,9 +1774,42 @@ setup(void)
84 for (i = 0; i < LENGTH(colors); i++)
85 scheme[i] = drw_scm_create(drw, colors[i], 3);
86
87 - barclrs = ecalloc(LENGTH(barcolors), sizeof(Clr));
88 - for (i = 0; i < LENGTH(barcolors); i++)
89 + for (i = 0; i < LENGTH(barcolors) && i < LENGTH(barclrs); i++)
90 drw_clr_create(drw, &barclrs[i], barcolors[i]);
91 + if (i == 0)
92 + drw_clr_create(drw, &barclrs[i++], "#000000");
93 + for (; i < 7; i++) {
94 + snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
95 + !!(i & 1) * 0x7f,
96 + !!(i & 2) * 0x7f,
97 + !!(i & 4) * 0x7f);
98 + drw_clr_create(drw, &barclrs[i], cbuf);
99 + }
100 + if (i == 7)
101 + drw_clr_create(drw, &barclrs[i++], "#000000");
102 + if (i == 8)
103 + drw_clr_create(drw, &barclrs[i++], "#333333");
104 + for (; i < 16; i++) {
105 + snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
106 + !!(i & 1) * 0xff,
107 + !!(i & 2) * 0xff,
108 + !!(i & 4) * 0xff);
109 + drw_clr_create(drw, &barclrs[i], cbuf);
110 + }
111 + for (; i < 6 * 6 * 6 + 16; i++) {
112 + snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
113 + sixd_to_8bit(((i - 16) / 36) % 6),
114 + sixd_to_8bit(((i - 16) / 6) % 6),
115 + sixd_to_8bit(((i - 16)) % 6));
116 + drw_clr_create(drw, &barclrs[i], cbuf);
117 + }
118 + for (; i < 256; i++) {
119 + snprintf(cbuf, sizeof(cbuf), "#%02x%02x%02x",
120 + 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a,
121 + 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a,
122 + 0x08 + (i - 6 * 6 * 6 - 16) * 0x0a);
123 + drw_clr_create(drw, &barclrs[i], cbuf);
124 + }
125
126 /* init bars */
127 updatebars();
128 --
129 2.32.0
130