dwm-status2d-barpadding-20241018-44e9799.diff - sites - public wiki contents of… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-status2d-barpadding-20241018-44e9799.diff (8229B) | |
--- | |
1 From 44e97990dcea2c2866b0c03abbb9372e10cfb185 Mon Sep 17 00:00:00 2001 | |
2 From: elbachir-one <[email protected]> | |
3 Date: Fri, 18 Oct 2024 19:22:49 +0100 | |
4 Subject: [PATCH] Status2d + Barpadding | |
5 | |
6 --- | |
7 config.def.h | 2 + | |
8 dwm.c | 143 +++++++++++++++++++++++++++++++++++++++++++++------ | |
9 2 files changed, 130 insertions(+), 15 deletions(-) | |
10 | |
11 diff --git a/config.def.h b/config.def.h | |
12 index 4412cb1..63fa9f3 100644 | |
13 --- a/config.def.h | |
14 +++ b/config.def.h | |
15 @@ -5,6 +5,8 @@ static const unsigned int borderpx = 1; /* borde… | |
16 static const unsigned int snap = 32; /* snap pixel */ | |
17 static const int showbar = 1; /* 0 means no bar */ | |
18 static const int topbar = 1; /* 0 means bottom bar */ | |
19 +static const int vertpad = 10; /* vertical padding of … | |
20 +static const int sidepad = 10; /* horizontal padding o… | |
21 static const char *fonts[] = { "monospace:size=10" }; | |
22 static const char dmenufont[] = "monospace:size=10"; | |
23 static const char col_gray1[] = "#222222"; | |
24 diff --git a/dwm.c b/dwm.c | |
25 index 1443802..aa6e2d0 100644 | |
26 --- a/dwm.c | |
27 +++ b/dwm.c | |
28 @@ -162,6 +162,7 @@ static void detachstack(Client *c); | |
29 static Monitor *dirtomon(int dir); | |
30 static void drawbar(Monitor *m); | |
31 static void drawbars(void); | |
32 +static int drawstatusbar(Monitor *m, int bh, char* text); | |
33 static void enternotify(XEvent *e); | |
34 static void expose(XEvent *e); | |
35 static void focus(Client *c); | |
36 @@ -235,11 +236,13 @@ static void zoom(const Arg *arg); | |
37 | |
38 /* variables */ | |
39 static const char broken[] = "broken"; | |
40 -static char stext[256]; | |
41 +static char stext[1024]; | |
42 static int screen; | |
43 static int sw, sh; /* X display screen geometry width, height… | |
44 static int bh; /* bar height */ | |
45 static int lrpad; /* sum of left and right padding for text … | |
46 +static int vp; /* vertical padding for bar */ | |
47 +static int sp; /* side padding for bar */ | |
48 static int (*xerrorxlib)(Display *, XErrorEvent *); | |
49 static unsigned int numlockmask = 0; | |
50 static void (*handler[LASTEvent]) (XEvent *) = { | |
51 @@ -485,7 +488,7 @@ cleanup(void) | |
52 cleanupmon(mons); | |
53 for (i = 0; i < CurLast; i++) | |
54 drw_cur_free(drw, cursor[i]); | |
55 - for (i = 0; i < LENGTH(colors); i++) | |
56 + for (i = 0; i < LENGTH(colors) + 1; i++) | |
57 free(scheme[i]); | |
58 free(scheme); | |
59 XDestroyWindow(dpy, wmcheckwin); | |
60 @@ -569,7 +572,7 @@ configurenotify(XEvent *e) | |
61 for (c = m->clients; c; c = c->next) | |
62 if (c->isfullscreen) | |
63 resizeclient(c, m->mx, … | |
64 - XMoveResizeWindow(dpy, m->barwin, m->wx… | |
65 + XMoveResizeWindow(dpy, m->barwin, m->wx… | |
66 } | |
67 focus(NULL); | |
68 arrange(NULL); | |
69 @@ -694,6 +697,114 @@ dirtomon(int dir) | |
70 return m; | |
71 } | |
72 | |
73 +int | |
74 +drawstatusbar(Monitor *m, int bh, char* stext) { | |
75 + int ret, i, w, x, len; | |
76 + short isCode = 0; | |
77 + char *text; | |
78 + char *p; | |
79 + | |
80 + len = strlen(stext) + 1 ; | |
81 + if (!(text = (char*) malloc(sizeof(char)*len))) | |
82 + die("malloc"); | |
83 + p = text; | |
84 + memcpy(text, stext, len); | |
85 + | |
86 + /* compute width of the status text */ | |
87 + w = 0; | |
88 + i = -1; | |
89 + while (text[++i]) { | |
90 + if (text[i] == '^') { | |
91 + if (!isCode) { | |
92 + isCode = 1; | |
93 + text[i] = '\0'; | |
94 + w += TEXTW(text) - lrpad; | |
95 + text[i] = '^'; | |
96 + if (text[++i] == 'f') | |
97 + w += atoi(text + ++i); | |
98 + } else { | |
99 + isCode = 0; | |
100 + text = text + i + 1; | |
101 + i = -1; | |
102 + } | |
103 + } | |
104 + } | |
105 + if (!isCode) | |
106 + w += TEXTW(text) - lrpad; | |
107 + else | |
108 + isCode = 0; | |
109 + text = p; | |
110 + | |
111 + w += 2; /* 1px padding on both sides */ | |
112 + ret = x = m->ww - w; | |
113 + | |
114 + drw_setscheme(drw, scheme[LENGTH(colors)]); | |
115 + drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; | |
116 + drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; | |
117 + drw_rect(drw, x - 2 * sp, 0, w, bh, 1, 1); | |
118 + x++; | |
119 + | |
120 + /* process status text */ | |
121 + i = -1; | |
122 + while (text[++i]) { | |
123 + if (text[i] == '^' && !isCode) { | |
124 + isCode = 1; | |
125 + | |
126 + text[i] = '\0'; | |
127 + w = TEXTW(text) - lrpad; | |
128 + drw_text(drw, x - 2 * sp, 0, w, bh, 0, text, 0); | |
129 + | |
130 + x += w; | |
131 + | |
132 + /* process code */ | |
133 + while (text[++i] != '^') { | |
134 + if (text[i] == 'c') { | |
135 + char buf[8]; | |
136 + memcpy(buf, (char*)text+i+1, 7); | |
137 + buf[7] = '\0'; | |
138 + drw_clr_create(drw, &drw->schem… | |
139 + i += 7; | |
140 + } else if (text[i] == 'b') { | |
141 + char buf[8]; | |
142 + memcpy(buf, (char*)text+i+1, 7); | |
143 + buf[7] = '\0'; | |
144 + drw_clr_create(drw, &drw->schem… | |
145 + i += 7; | |
146 + } else if (text[i] == 'd') { | |
147 + drw->scheme[ColFg] = scheme[Sch… | |
148 + drw->scheme[ColBg] = scheme[Sch… | |
149 + } else if (text[i] == 'r') { | |
150 + int rx = atoi(text + ++i); | |
151 + while (text[++i] != ','); | |
152 + int ry = atoi(text + ++i); | |
153 + while (text[++i] != ','); | |
154 + int rw = atoi(text + ++i); | |
155 + while (text[++i] != ','); | |
156 + int rh = atoi(text + ++i); | |
157 + | |
158 + drw_rect(drw, rx + x - 2 * sp, … | |
159 + } else if (text[i] == 'f') { | |
160 + x += atoi(text + ++i); | |
161 + } | |
162 + } | |
163 + | |
164 + text = text + i + 1; | |
165 + i=-1; | |
166 + isCode = 0; | |
167 + } | |
168 + } | |
169 + | |
170 + if (!isCode) { | |
171 + w = TEXTW(text) - lrpad; | |
172 + drw_text(drw, x - 2 * sp, 0, w, bh, 0, text, 0); | |
173 + } | |
174 + | |
175 + drw_setscheme(drw, scheme[SchemeNorm]); | |
176 + free(p); | |
177 + | |
178 + return ret; | |
179 +} | |
180 + | |
181 void | |
182 drawbar(Monitor *m) | |
183 { | |
184 @@ -708,9 +819,7 @@ drawbar(Monitor *m) | |
185 | |
186 /* draw status first so it can be overdrawn by tags later */ | |
187 if (m == selmon) { /* status is only drawn on selected monitor … | |
188 - drw_setscheme(drw, scheme[SchemeNorm]); | |
189 - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ | |
190 - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); | |
191 + tw = m->ww - drawstatusbar(m, bh, stext); | |
192 } | |
193 | |
194 for (c = m->clients; c; c = c->next) { | |
195 @@ -736,12 +845,12 @@ drawbar(Monitor *m) | |
196 if ((w = m->ww - tw - x) > bh) { | |
197 if (m->sel) { | |
198 drw_setscheme(drw, scheme[m == selmon ? SchemeS… | |
199 - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->n… | |
200 + drw_text(drw, x, 0, w - 2 * sp, bh, lrpad / 2, … | |
201 if (m->sel->isfloating) | |
202 drw_rect(drw, x + boxs, boxs, boxw, box… | |
203 } else { | |
204 drw_setscheme(drw, scheme[SchemeNorm]); | |
205 - drw_rect(drw, x, 0, w, bh, 1, 1); | |
206 + drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1); | |
207 } | |
208 } | |
209 drw_map(drw, m->barwin, 0, 0, m->ww, bh); | |
210 @@ -1562,7 +1671,10 @@ setup(void) | |
211 die("no fonts could be loaded."); | |
212 lrpad = drw->fonts->h; | |
213 bh = drw->fonts->h + 2; | |
214 + sp = sidepad; | |
215 + vp = (topbar == 1) ? vertpad : - vertpad; | |
216 updategeom(); | |
217 + | |
218 /* init atoms */ | |
219 utf8string = XInternAtom(dpy, "UTF8_STRING", False); | |
220 wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | |
221 @@ -1583,7 +1695,8 @@ setup(void) | |
222 cursor[CurResize] = drw_cur_create(drw, XC_sizing); | |
223 cursor[CurMove] = drw_cur_create(drw, XC_fleur); | |
224 /* init appearance */ | |
225 - scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); | |
226 + scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); | |
227 + scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3); | |
228 for (i = 0; i < LENGTH(colors); i++) | |
229 scheme[i] = drw_scm_create(drw, colors[i], 3); | |
230 /* init bars */ | |
231 @@ -1716,7 +1829,7 @@ togglebar(const Arg *arg) | |
232 { | |
233 selmon->showbar = !selmon->showbar; | |
234 updatebarpos(selmon); | |
235 - XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, … | |
236 + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon-… | |
237 arrange(selmon); | |
238 } | |
239 | |
240 @@ -1827,7 +1940,7 @@ updatebars(void) | |
241 for (m = mons; m; m = m->next) { | |
242 if (m->barwin) | |
243 continue; | |
244 - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->w… | |
245 + m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by … | |
246 CopyFromParent, DefaultVisual(dpy, scre… | |
247 CWOverrideRedirect|CWBackPixmap|CWEvent… | |
248 XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor… | |
249 @@ -1842,11 +1955,11 @@ updatebarpos(Monitor *m) | |
250 m->wy = m->my; | |
251 m->wh = m->mh; | |
252 if (m->showbar) { | |
253 - m->wh -= bh; | |
254 - m->by = m->topbar ? m->wy : m->wy + m->wh; | |
255 - m->wy = m->topbar ? m->wy + bh : m->wy; | |
256 + m->wh = m->wh - vertpad - bh; | |
257 + m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad; | |
258 + m->wy = m->topbar ? m->wy + bh + vp : m->wy; | |
259 } else | |
260 - m->by = -bh; | |
261 + m->by = -bh - vp; | |
262 } | |
263 | |
264 void | |
265 -- | |
266 2.46.2 | |
267 |