Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-sgrstatus-20220223-6.3.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-sgrstatus-20220223-6.3.diff (6857B)
---
1 From dc83e43aad7b8070911e8210b58cc36bdc4214d5 Mon Sep 17 00:00:00 2001
2 From: Santtu Lakkala <[email protected]>
3 Date: Wed, 23 Feb 2022 11:55:19 +0200
4 Subject: [PATCH 1/2] Allow CSI SGR in status bar
5
6 ---
7 config.def.h | 19 ++++++
8 dwm.c | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++-
9 2 files changed, 198 insertions(+), 3 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index a2ac963..3dc34bd 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -18,6 +18,25 @@ static const char *colors[][3] = {
16 [SchemeSel] = { col_gray4, col_cyan, col_cyan },
17 };
18
19 +static const char *barcolors[] = {
20 + "#000000",
21 + "#7f0000",
22 + "#007f00",
23 + "#7f7f00",
24 + "#00007f",
25 + "#7f007f",
26 + "#007f7f",
27 + "#cccccc",
28 + "#333333",
29 + "#ff0000",
30 + "#00ff00",
31 + "#ffff00",
32 + "#0000ff",
33 + "#ff00ff",
34 + "#00ffff",
35 + "#ffffff",
36 +};
37 +
38 /* tagging */
39 static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "…
40
41 diff --git a/dwm.c b/dwm.c
42 index a96f33c..cb9484a 100644
43 --- a/dwm.c
44 +++ b/dwm.c
45 @@ -237,7 +237,7 @@ static void zoom(const Arg *arg);
46
47 /* variables */
48 static const char broken[] = "broken";
49 -static char stext[256];
50 +static char stext[512];
51 static int screen;
52 static int sw, sh; /* X display screen geometry width, height…
53 static int bh, blw = 0; /* bar geometry */
54 @@ -264,6 +264,7 @@ static Atom wmatom[WMLast], netatom[NetLast];
55 static int running = 1;
56 static Cur *cursor[CurLast];
57 static Clr **scheme;
58 +static Clr *barclrs;
59 static Display *dpy;
60 static Drw *drw;
61 static Monitor *mons, *selmon;
62 @@ -693,6 +694,25 @@ dirtomon(int dir)
63 return m;
64 }
65
66 +void
67 +resetfntlist(Fnt *orighead, Fnt *curhead)
68 +{
69 + if (orighead != curhead) {
70 + Fnt *f;
71 + for (f = orighead; f->next; f = f->next);
72 + f->next = curhead;
73 + for (f = f->next; f->next != orighead; f = f->next);
74 + f->next = NULL;
75 + }
76 +}
77 +
78 +enum SgrFlags {
79 + REVERSE = 1 << 0,
80 + UNDERLINE = 1 << 1,
81 + STRIKETHROUGH = 1 << 2,
82 + OVERLINE = 1 << 3
83 +};
84 +
85 void
86 drawbar(Monitor *m)
87 {
88 @@ -707,9 +727,160 @@ drawbar(Monitor *m)
89
90 /* draw status first so it can be overdrawn by tags later */
91 if (m == selmon) { /* status is only drawn on selected monitor …
92 + char buffer[sizeof(stext)];
93 + Clr scm[3];
94 + int wr, rd;
95 + int pw;
96 + int fg = 7;
97 + int bg = 0;
98 + int fmt = 0;
99 + int lp = lrpad / 2 - 2;
100 + Fnt *fset = drw->fonts;
101 +
102 + memcpy(scm, scheme[SchemeNorm], sizeof(scm));
103 +
104 + drw_setscheme(drw, scm);
105 +
106 + for (tw = 0, wr = 0, rd = 0; stext[rd]; rd++) {
107 + if (stext[rd] == '' && stext[rd + 1] == '[') {
108 + size_t alen = strspn(stext + rd + 2,
109 + "0123456789;");
110 + if (stext[rd + alen + 2] == 'm') {
111 + buffer[wr] = '\0';
112 + tw += TEXTW(buffer) - lrpad;
113 + wr = 0;
114 +
115 + char *ep = stext + rd + 1;
116 + while (*ep != 'm') {
117 + unsigned v = strtoul(ep…
118 + if (v == 0 || (v >= 10 …
119 + int fi = v % 10;
120 + Fnt *f;
121 + Fnt *p;
122 + resetfntlist(fs…
123 + for (p = NULL, …
124 + if (f) {
125 + if (p) {
126 + …
127 + …
128 + …
129 + }
130 + drw_set…
131 + } else {
132 + drw_set…
133 + }
134 + }
135 + }
136 +
137 + rd += alen + 2;
138 + continue;
139 + }
140 + }
141 + buffer[wr++] = stext[rd];
142 + }
143 + buffer[wr] = '\0';
144 +
145 + tw += TEXTW(buffer) - lrpad / 2 + 2;
146 + x = m->ww - tw;
147 +
148 + resetfntlist(fset, drw->fonts);
149 + drw_setfontset(drw, fset);
150 +
151 + for (wr = 0, rd = 0; stext[rd]; rd++) {
152 + if (stext[rd] == '' && stext[rd + 1] == '[') {
153 + size_t alen = strspn(stext + rd + 2,
154 + "0123456789;");
155 + if (stext[rd + alen + 2] == 'm') {
156 + buffer[wr] = '\0';
157 + pw = TEXTW(buffer) - lrpad;
158 + drw_text(drw, x, 0, pw + lp, bh…
159 + if (fmt & UNDERLINE)
160 + drw_rect(drw, x, (bh + …
161 + if (fmt & STRIKETHROUGH)
162 + drw_rect(drw, x, bh / 2…
163 + if (fmt & OVERLINE)
164 + drw_rect(drw, x, (bh - …
165 + x += pw + lp;
166 + lp = 0;
167 +
168 + char *ep = stext + rd + 1;
169 + while (*ep != 'm') {
170 + unsigned v = strtoul(ep…
171 + if (v == 0) {
172 + memcpy(scm, sch…
173 + fg = 7;
174 + bg = 0;
175 + fmt = 0;
176 + resetfntlist(fs…
177 + drw_setfontset(…
178 + } else if (v == 1) {
179 + fg |= 8;
180 + scm[0] = barclr…
181 + } else if (v == 4) {
182 + fmt |= UNDERLIN…
183 + } else if (v == 7) {
184 + fmt |= REVERSE;
185 + } else if (v == 9) {
186 + fmt |= STRIKETH…
187 + } else if (v >= 10 && v…
188 + int fi = v % 10;
189 + Fnt *f;
190 + Fnt *p;
191 + resetfntlist(fs…
192 + for (p = NULL, …
193 + if (f) {
194 + if (p) {
195 + …
196 + …
197 + …
198 + }
199 + drw_set…
200 + } else {
201 + drw_set…
202 + }
203 + } else if (v == 22) {
204 + fg &= ~8;
205 + scm[0] = barclr…
206 + } else if (v == 24) {
207 + fmt &= ~UNDERLI…
208 + } else if (v == 27) {
209 + fmt &= ~REVERSE;
210 + } else if (v == 29) {
211 + fmt &= ~STRIKET…
212 + } else if (v >= 30 && v…
213 + fg = v % 10 | (…
214 + scm[0] = barclr…
215 + } else if (v >= 40 && v…
216 + bg = v % 10;
217 + scm[1] = barclr…
218 + } else if (v == 53) {
219 + fmt |= OVERLINE;
220 + } else if (v == 55) {
221 + fmt &= ~OVERLIN…
222 + }
223 + }
224 +
225 + rd += alen + 2;
226 + wr = 0;
227 +
228 + drw_setscheme(drw, scm);
229 + continue;
230 + }
231 + }
232 + buffer[wr++] = stext[rd];
233 + }
234 +
235 + buffer[wr] = '\0';
236 + pw = TEXTW(buffer) - lrpad;
237 + drw_text(drw, x, 0, pw + lp, bh, lp, buffer, fmt & REVE…
238 + if (fmt & UNDERLINE)
239 + drw_rect(drw, x, (bh + drw->fonts->h) / 2, pw, …
240 + if (fmt & STRIKETHROUGH)
241 + drw_rect(drw, x, bh / 2, pw, 1, 1, fmt & REVERS…
242 + if (fmt & OVERLINE)
243 + drw_rect(drw, x, (bh - drw->fonts->h) / 2, pw, …
244 +
245 drw_setscheme(drw, scheme[SchemeNorm]);
246 - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
247 - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
248 }
249
250 for (c = m->clients; c; c = c->next) {
251 @@ -1574,6 +1745,11 @@ setup(void)
252 scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
253 for (i = 0; i < LENGTH(colors); i++)
254 scheme[i] = drw_scm_create(drw, colors[i], 3);
255 +
256 + barclrs = ecalloc(LENGTH(barcolors), sizeof(Clr));
257 + for (i = 0; i < LENGTH(barcolors); i++)
258 + drw_clr_create(drw, &barclrs[i], barcolors[i]);
259 +
260 /* init bars */
261 updatebars();
262 updatestatus();
263 --
264 2.32.0
265
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.