dwm-status2d-20200508-60bb3df.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-status2d-20200508-60bb3df.diff (4744B)
---
1 From 60bb3dfaf91227eb02e828d74e6f4758b2c56542 Mon Sep 17 00:00:00 2001
2 From: cultab <rroarck@gmail.com>
3 Date: Fri, 8 May 2020 13:56:08 +0300
4 Subject: [PATCH] fix status2d to work after ed3ab6
5
6 ed3ab6 changed the name of the variable sw to tw, now the patch won't apply nor work.
7 This patch updates the variable name to the new one.
8 ---
9 dwm.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
10 1 file changed, 114 insertions(+), 6 deletions(-)
11
12 diff --git a/dwm.c b/dwm.c
13 index 9fd0286..71e18be 100644
14 --- a/dwm.c
15 +++ b/dwm.c
16 @@ -163,6 +163,7 @@ static void detachstack(Client *c);
17 static Monitor *dirtomon(int dir);
18 static void drawbar(Monitor *m);
19 static void drawbars(void);
20 +static int drawstatusbar(Monitor *m, int bh, char* text);
21 static void enternotify(XEvent *e);
22 static void expose(XEvent *e);
23 static void focus(Client *c);
24 @@ -237,7 +238,7 @@ static void zoom(const Arg *arg);
25
26 /* variables */
27 static const char broken[] = "broken";
28 -static char stext[256];
29 +static char stext[1024];
30 static int screen;
31 static int sw, sh; /* X display screen geometry width, height */
32 static int bh, blw = 0; /* bar geometry */
33 @@ -485,7 +486,7 @@ cleanup(void)
34 cleanupmon(mons);
35 for (i = 0; i < CurLast; i++)
36 drw_cur_free(drw, cursor[i]);
37 - for (i = 0; i < LENGTH(colors); i++)
38 + for (i = 0; i < LENGTH(colors) + 1; i++)
39 free(scheme[i]);
40 XDestroyWindow(dpy, wmcheckwin);
41 drw_free(drw);
42 @@ -693,6 +694,114 @@ dirtomon(int dir)
43 return m;
44 }
45
46 +int
47 +drawstatusbar(Monitor *m, int bh, char* stext) {
48 + int ret, i, w, x, len;
49 + short isCode = 0;
50 + char *text;
51 + char *p;
52 +
53 + len = strlen(stext) + 1 ;
54 + if (!(text = (char*) malloc(sizeof(char)*len)))
55 + die("malloc");
56 + p = text;
57 + memcpy(text, stext, len);
58 +
59 + /* compute width of the status text */
60 + w = 0;
61 + i = -1;
62 + while (text[++i]) {
63 + if (text[i] == '^') {
64 + if (!isCode) {
65 + isCode = 1;
66 + text[i] = '\0';
67 + w += TEXTW(text) - lrpad;
68 + text[i] = '^';
69 + if (text[++i] == 'f')
70 + w += atoi(text + ++i);
71 + } else {
72 + isCode = 0;
73 + text = text + i + 1;
74 + i = -1;
75 + }
76 + }
77 + }
78 + if (!isCode)
79 + w += TEXTW(text) - lrpad;
80 + else
81 + isCode = 0;
82 + text = p;
83 +
84 + w += 2; /* 1px padding on both sides */
85 + ret = x = m->ww - w;
86 +
87 + drw_setscheme(drw, scheme[LENGTH(colors)]);
88 + drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
89 + drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
90 + drw_rect(drw, x, 0, w, bh, 1, 1);
91 + x++;
92 +
93 + /* process status text */
94 + i = -1;
95 + while (text[++i]) {
96 + if (text[i] == '^' && !isCode) {
97 + isCode = 1;
98 +
99 + text[i] = '\0';
100 + w = TEXTW(text) - lrpad;
101 + drw_text(drw, x, 0, w, bh, 0, text, 0);
102 +
103 + x += w;
104 +
105 + /* process code */
106 + while (text[++i] != '^') {
107 + if (text[i] == 'c') {
108 + char buf[8];
109 + memcpy(buf, (char*)text+i+1, 7);
110 + buf[7] = '\0';
111 + drw_clr_create(drw, &drw->scheme[ColFg], buf);
112 + i += 7;
113 + } else if (text[i] == 'b') {
114 + char buf[8];
115 + memcpy(buf, (char*)text+i+1, 7);
116 + buf[7] = '\0';
117 + drw_clr_create(drw, &drw->scheme[ColBg], buf);
118 + i += 7;
119 + } else if (text[i] == 'd') {
120 + drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
121 + drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
122 + } else if (text[i] == 'r') {
123 + int rx = atoi(text + ++i);
124 + while (text[++i] != ',');
125 + int ry = atoi(text + ++i);
126 + while (text[++i] != ',');
127 + int rw = atoi(text + ++i);
128 + while (text[++i] != ',');
129 + int rh = atoi(text + ++i);
130 +
131 + drw_rect(drw, rx + x, ry, rw, rh, 1, 0);
132 + } else if (text[i] == 'f') {
133 + x += atoi(text + ++i);
134 + }
135 + }
136 +
137 + text = text + i + 1;
138 + i=-1;
139 + isCode = 0;
140 + }
141 + }
142 +
143 + if (!isCode) {
144 + w = TEXTW(text) - lrpad;
145 + drw_text(drw, x, 0, w, bh, 0, text, 0);
146 + }
147 +
148 + drw_setscheme(drw, scheme[SchemeNorm]);
149 + free(p);
150 +
151 + return ret;
152 +}
153 +
154 void
155 drawbar(Monitor *m)
156 {
157 @@ -704,9 +813,7 @@ drawbar(Monitor *m)
158
159 /* draw status first so it can be overdrawn by tags later */
160 if (m == selmon) { /* status is only drawn on selected monitor */
161 - drw_setscheme(drw, scheme[SchemeNorm]);
162 - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
163 - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
164 + tw = m->ww - drawstatusbar(m, bh, stext);
165 }
166
167 for (c = m->clients; c; c = c->next) {
168 @@ -1568,7 +1675,8 @@ setup(void)
169 cursor[CurResize] = drw_cur_create(drw, XC_sizing);
170 cursor[CurMove] = drw_cur_create(drw, XC_fleur);
171 /* init appearance */
172 - scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
173 + scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *));
174 + scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3);
175 for (i = 0; i < LENGTH(colors); i++)
176 scheme[i] = drw_scm_create(drw, colors[i], 3);
177 /* init bars */
178 --
179 2.26.2
180