dwm-5.2-colorstatus.diff - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
dwm-5.2-colorstatus.diff (4202B)
---
1 diff -up dwm-5.2-original/colorstatus.c dwm-5.2-modified/colorstatus.c
2 --- /dev/null 2008-11-17 18:12:14.000000000 +0100
3 +++ dwm-5.2-modified/colorstatus.c 2008-11-17 18:09:29.000000000 +0100
4 @@ -0,0 +1,144 @@
5 +int
6 +drawstatustext(int x) {
7 + char cd[] = "[c]", id[] = "[i]";
8 + char buf1[256] = {0};
9 + Bool parse = True;
10 + Bool cs = False, is = False;
11 + int stextw = 0;
12 +
13 + strcpy(buf1, stext);
14 + while(parse) {
15 + char *cp = 0, *ip = 0;
16 +
17 + cp = strstr(buf1, cd);
18 + ip = strstr(buf1, id);
19 + if(cp != NULL || ip != NULL) {
20 + char buf2[256] = {0}, buf3[256] = {0};
21 + size_t clen2 = -1, ilen2 = -1, len2 = 0, dlen = 0, offset3 = 0, len3 = 0;
22 +
23 + if(cp != NULL)
24 + clen2 = cp - buf1;
25 + if(ip != NULL)
26 + ilen2 = ip - buf1;
27 + if(clen2 < 0) {
28 + len2 = ilen2;
29 + dlen = strlen(id);
30 + }
31 + else if(ilen2 < 0) {
32 + len2 = clen2;
33 + dlen = strlen(cd);
34 + }
35 + else if(clen2 < ilen2) {
36 + len2 = clen2;
37 + dlen = strlen(cd);
38 + }
39 + else {
40 + len2 = ilen2;
41 + dlen = strlen(id);
42 + }
43 + strncpy(buf2, buf1, len2);
44 + offset3 = len2 + dlen;
45 + len3 = strlen(buf1) - offset3;
46 + strncpy(buf3, buf1 + offset3, len3);
47 + if(buf2 != NULL && strlen(buf2) > 0)
48 + stextw = stextw + TEXTW(buf2);
49 +
50 + memset(buf1, '\0', sizeof(buf1));
51 + strcpy(buf1, buf3);
52 + }
53 + else {
54 + stextw = stextw + TEXTW(buf1);
55 + parse = False;
56 + }
57 + }
58 + dc.x = ww - stextw;
59 +
60 + memset(buf1, '\0', sizeof(buf1));
61 + strcpy(buf1, stext);
62 + parse = True;
63 + while(parse) {
64 + char *cp = 0, *ip = 0;
65 +
66 + cp = strstr(buf1, cd);
67 + ip = strstr(buf1, id);
68 + if(cp != NULL || ip != NULL) {
69 + char buf2[256] = {0}, buf3[256] = {0};
70 + size_t clen2 = -1, ilen2 = -1, len2 = 0, dlen = 0, offset3 = 0, len3 = 0;
71 + Bool cs3 = cs, is3 = is;
72 +
73 + if(cp != NULL)
74 + clen2 = cp - buf1;
75 + if(ip != NULL)
76 + ilen2 = ip - buf1;
77 + if(clen2 < 0) {
78 + len2 = ilen2;
79 + dlen = strlen(id);
80 + is3 = !is;
81 + }
82 + else if(ilen2 < 0) {
83 + len2 = clen2;
84 + dlen = strlen(cd);
85 + cs3 = !cs;
86 + }
87 + else if(clen2 < ilen2) {
88 + len2 = clen2;
89 + dlen = strlen(cd);
90 + cs3 = !cs;
91 + }
92 + else {
93 + len2 = ilen2;
94 + dlen = strlen(id);
95 + is3 = !is;
96 + }
97 +
98 + strncpy(buf2, buf1, len2);
99 + offset3 = len2 + dlen;
100 + len3 = strlen(buf1) - offset3;
101 + strncpy(buf3, buf1 + offset3, len3);
102 + if(buf2 != NULL && strlen(buf2) > 0) {
103 + dc.w = TEXTW(buf2);
104 + if(cs) {
105 + if(is)
106 + drawtext(buf2, dc.sel, True);
107 + else
108 + drawtext(buf2, dc.sel, False);
109 + }
110 + else {
111 + if(is)
112 + drawtext(buf2, dc.norm, True);
113 + else
114 + drawtext(buf2, dc.norm, False);
115 + }
116 + dc.x = dc.x + dc.w;
117 + }
118 +
119 + cs = cs3;
120 + is = is3;
121 + memset(buf1, '\0', sizeof(buf1));
122 + strcpy(buf1, buf3);
123 + }
124 + else {
125 + dc.w = TEXTW(buf1);
126 + dc.x = ww - dc.w;
127 + if(dc.x < x) {
128 + dc.x = x;
129 + dc.w = ww - x;
130 + }
131 + if(cs) {
132 + if(is)
133 + drawtext(buf1, dc.sel, True);
134 + else
135 + drawtext(buf1, dc.sel, False);
136 + }
137 + else {
138 + if(is)
139 + drawtext(buf1, dc.norm, True);
140 + else
141 + drawtext(buf1, dc.norm, False);
142 + }
143 + parse = False;
144 + }
145 + }
146 +
147 + return(stextw);
148 +}
149 diff -up dwm-5.2-original/dwm.c dwm-5.2-modified/dwm.c
150 --- dwm-5.2-original/dwm.c 2008-09-09 21:46:17.000000000 +0200
151 +++ dwm-5.2-modified/dwm.c 2008-11-17 18:09:29.000000000 +0100
152 @@ -239,6 +239,7 @@ static Layout *lt[] = { NULL, NULL };
153 static Window root, barwin;
154 /* configuration, allows nested code to access above variables */
155 #include "config.h"
156 +#include "colorstatus.c"
157
158 /* compile-time check if all tags fit into an unsigned int bit array. */
159 struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1 : 1]; };
160 @@ -495,6 +496,7 @@ drawbar(void) {
161 unsigned int i, occ = 0, urg = 0;
162 unsigned long *col;
163 Client *c;
164 + int stextw = 0;
165
166 for(c = clients; c; c = c->next) {
167 occ |= c->tags;
168 @@ -517,13 +519,8 @@ drawbar(void) {
169 }
170 else
171 x = dc.x;
172 - dc.w = TEXTW(stext);
173 - dc.x = ww - dc.w;
174 - if(dc.x < x) {
175 - dc.x = x;
176 - dc.w = ww - x;
177 - }
178 - drawtext(stext, dc.norm, False);
179 + stextw = drawstatustext(x);
180 + dc.x = ww - stextw;
181 if((dc.w = dc.x - x) > bh) {
182 dc.x = x;
183 if(sel) {