Introduction
Introduction Statistics Contact Development Disclaimer Help
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
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.