Mercurial > dwm-meillo
comparison tag.c @ 178:e848966a1ac6
removed TLast tag enum, now tags is simple defined as char *[] array, the rest is calculated correctly, rules take an int array for the tags
author | arg@10ksloc.org |
---|---|
date | Thu, 03 Aug 2006 12:12:26 +0200 |
parents | e890cee887d1 |
children | 56fee1dc9d53 |
comparison
equal
deleted
inserted
replaced
177:e890cee887d1 | 178:e848966a1ac6 |
---|---|
11 | 11 |
12 /* static */ | 12 /* static */ |
13 | 13 |
14 typedef struct { | 14 typedef struct { |
15 const char *pattern; | 15 const char *pattern; |
16 Bool tags[TLast]; | 16 const unsigned int *tags; |
17 Bool isfloat; | 17 Bool isfloat; |
18 } Rule; | 18 } Rule; |
19 | 19 |
20 TAGS | 20 TAGS |
21 RULES | 21 RULES |
143 int i; | 143 int i; |
144 | 144 |
145 if(!sel) | 145 if(!sel) |
146 return; | 146 return; |
147 | 147 |
148 for(i = 0; i < TLast; i++) | 148 for(i = 0; i < ntags; i++) |
149 sel->tags[i] = False; | 149 sel->tags[i] = False; |
150 appendtag(arg); | 150 appendtag(arg); |
151 } | 151 } |
152 | 152 |
153 void | 153 void |
154 settags(Client *c) | 154 settags(Client *c) |
155 { | 155 { |
156 char classinst[256]; | 156 char classinst[256]; |
157 static unsigned int len = sizeof(rule) / sizeof(rule[0]); | 157 static unsigned int len = sizeof(rule) / sizeof(rule[0]); |
158 unsigned int i, j; | 158 unsigned int i, j, n; |
159 regex_t regex; | 159 regex_t regex; |
160 regmatch_t tmp; | 160 regmatch_t tmp; |
161 Bool matched = False; | 161 Bool matched = False; |
162 XClassHint ch; | 162 XClassHint ch; |
163 | 163 |
166 ch.res_class ? ch.res_class : "", | 166 ch.res_class ? ch.res_class : "", |
167 ch.res_name ? ch.res_name : ""); | 167 ch.res_name ? ch.res_name : ""); |
168 for(i = 0; !matched && i < len; i++) { | 168 for(i = 0; !matched && i < len; i++) { |
169 if(!regcomp(®ex, rule[i].pattern, 0)) { | 169 if(!regcomp(®ex, rule[i].pattern, 0)) { |
170 if(!regexec(®ex, classinst, 1, &tmp, 0)) { | 170 if(!regexec(®ex, classinst, 1, &tmp, 0)) { |
171 for(j = 0; j < TLast; j++) { | 171 n = rule[i].tags ? |
172 if((c->tags[j] = rule[i].tags[j])) | 172 sizeof(rule[i].tags) / sizeof(rule[i].tags[0]) : 0; |
173 matched = True; | 173 matched = n != 0; |
174 } | 174 for(j = 0; j < n; j++) |
175 c->tags[rule[i].tags[j]] = True; | |
175 c->isfloat = rule[i].isfloat; | 176 c->isfloat = rule[i].isfloat; |
176 } | 177 } |
177 regfree(®ex); | 178 regfree(®ex); |
178 } | 179 } |
179 } | 180 } |
202 } | 203 } |
203 | 204 |
204 void | 205 void |
205 viewnext(Arg *arg) | 206 viewnext(Arg *arg) |
206 { | 207 { |
207 arg->i = (tsel < TLast-1) ? tsel+1 : 0; | 208 arg->i = (tsel < ntags-1) ? tsel+1 : 0; |
208 view(arg); | 209 view(arg); |
209 } | 210 } |
210 | 211 |
211 void | 212 void |
212 viewprev(Arg *arg) | 213 viewprev(Arg *arg) |
213 { | 214 { |
214 arg->i = (tsel > 0) ? tsel-1 : TLast-1; | 215 arg->i = (tsel > 0) ? tsel-1 : ntags-1; |
215 view(arg); | 216 view(arg); |
216 } | 217 } |