annotate tag.c @ 541:08d3d329270a

using MASTER 600 again, it is definately better, and using urxvtc for the moment (it doesn't flickers on refreshes, but this is not because of Marc Lehmann, it is because of the original rxvt code)
author arg@mig29
date Thu, 26 Oct 2006 12:13:41 +0200
parents a5567a0d3011
children 797e27162b43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
532
651f2c868b31 code polishing, removed unnecessary newlines
Anselm R. Garbe <arg@10kloc.org>
parents: 487
diff changeset
1 /* (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
2 * See LICENSE file for license details.
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
3 */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
4 #include "dwm.h"
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
5 #include <regex.h>
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
6 #include <stdio.h>
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
7 #include <stdlib.h>
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
8 #include <string.h>
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
9 #include <sys/types.h>
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
10 #include <X11/Xutil.h>
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
11
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
12
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
13 typedef struct {
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
14 const char *clpattern;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
15 const char *tpattern;
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
16 Bool isfloat;
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
17 } Rule;
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
18
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
19 typedef struct {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
20 regex_t *clregex;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
21 regex_t *tregex;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
22 } RReg;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
23
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
24 /* static */
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
25
146
f328ce9c558c centralized/externalized configuration to config.h
arg@10ksloc.org
parents: 144
diff changeset
26 TAGS
f328ce9c558c centralized/externalized configuration to config.h
arg@10ksloc.org
parents: 144
diff changeset
27 RULES
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 80
diff changeset
28
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
29 static RReg *rreg = NULL;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
30 static unsigned int len = 0;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
31
125
b4b8b4236599 cleaned the CUSTOMIZE flags
arg@10ksloc.org
parents: 124
diff changeset
32 /* extern */
b4b8b4236599 cleaned the CUSTOMIZE flags
arg@10ksloc.org
parents: 124
diff changeset
33
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
34 Client *
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 441
diff changeset
35 getnext(Client *c) {
261
d6fd632d861c implement multi-tag selection through button3 click on the specific tag
Anselm R.Garbe <arg@10ksloc.org>
parents: 240
diff changeset
36 for(; c && !isvisible(c); c = c->next);
93
c498da7520c7 added heretag command which allows to tag a client of a foreign tag with current tag
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
37 return c;
c498da7520c7 added heretag command which allows to tag a client of a foreign tag with current tag
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
38 }
c498da7520c7 added heretag command which allows to tag a client of a foreign tag with current tag
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
39
127
1480e19f6377 using double-linked list in order to get correct prev focus handling
arg@10ksloc.org
parents: 125
diff changeset
40 Client *
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 441
diff changeset
41 getprev(Client *c) {
261
d6fd632d861c implement multi-tag selection through button3 click on the specific tag
Anselm R.Garbe <arg@10ksloc.org>
parents: 240
diff changeset
42 for(; c && !isvisible(c); c = c->prev);
127
1480e19f6377 using double-linked list in order to get correct prev focus handling
arg@10ksloc.org
parents: 125
diff changeset
43 return c;
1480e19f6377 using double-linked list in order to get correct prev focus handling
arg@10ksloc.org
parents: 125
diff changeset
44 }
1480e19f6377 using double-linked list in order to get correct prev focus handling
arg@10ksloc.org
parents: 125
diff changeset
45
93
c498da7520c7 added heretag command which allows to tag a client of a foreign tag with current tag
Anselm R. Garbe <garbeam@wmii.de>
parents: 84
diff changeset
46 void
487
be4f90c03582 applied Jukkas patch
arg@mmvi
parents: 461
diff changeset
47 initrregs(void) {
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
48 unsigned int i;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
49 regex_t *reg;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
50
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
51 if(rreg)
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
52 return;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
53 len = sizeof(rule) / sizeof(rule[0]);
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
54 rreg = emallocz(len * sizeof(RReg));
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
55 for(i = 0; i < len; i++) {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
56 if(rule[i].clpattern) {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
57 reg = emallocz(sizeof(regex_t));
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
58 if(regcomp(reg, rule[i].clpattern, 0))
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
59 free(reg);
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
60 else
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
61 rreg[i].clregex = reg;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
62 }
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
63 if(rule[i].tpattern) {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
64 reg = emallocz(sizeof(regex_t));
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
65 if(regcomp(reg, rule[i].tpattern, 0))
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
66 free(reg);
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
67 else
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
68 rreg[i].tregex = reg;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
69 }
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
70 }
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
71 }
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
72
270
dacd3f3c5823 implemented restack behavior (floats are on top in tiled mode)
Anselm R.Garbe <arg@10ksloc.org>
parents: 267
diff changeset
73 void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 441
diff changeset
74 settags(Client *c, Client *trans) {
336
2a65e8b3d21a implemented class:inst:title matching
Anselm R. Garbe <arg@10kloc.org>
parents: 327
diff changeset
75 char prop[512];
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
76 unsigned int i, j;
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
77 regmatch_t tmp;
431
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
78 Bool matched = trans != NULL;
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
79 XClassHint ch;
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
80
431
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
81 if(matched) {
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
82 for(i = 0; i < ntags; i++)
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
83 c->tags[i] = trans->tags[i];
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
84 }
a230e4432bb7 moved transient_for tag inheritance to settags
Anselm R. Garbe <arg@10kloc.org>
parents: 430
diff changeset
85 else if(XGetClassHint(dpy, c->win, &ch)) {
336
2a65e8b3d21a implemented class:inst:title matching
Anselm R. Garbe <arg@10kloc.org>
parents: 327
diff changeset
86 snprintf(prop, sizeof(prop), "%s:%s:%s",
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
87 ch.res_class ? ch.res_class : "",
336
2a65e8b3d21a implemented class:inst:title matching
Anselm R. Garbe <arg@10kloc.org>
parents: 327
diff changeset
88 ch.res_name ? ch.res_name : "", c->name);
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
89 for(i = 0; !matched && i < len; i++)
336
2a65e8b3d21a implemented class:inst:title matching
Anselm R. Garbe <arg@10kloc.org>
parents: 327
diff changeset
90 if(rreg[i].clregex && !regexec(rreg[i].clregex, prop, 1, &tmp, 0)) {
191
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
91 c->isfloat = rule[i].isfloat;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
92 for(j = 0; rreg[i].tregex && j < ntags; j++) {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
93 if(!regexec(rreg[i].tregex, tags[j], 1, &tmp, 0)) {
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
94 matched = True;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
95 c->tags[j] = True;
56fee1dc9d53 switched to regexp matching for Rules
arg@10ksloc.org
parents: 178
diff changeset
96 }
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
97 }
114
dfa5cd0969a6 implemented regexp matching for rules
arg@10ksloc.org
parents: 104
diff changeset
98 }
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
99 if(ch.res_class)
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
100 XFree(ch.res_class);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
101 if(ch.res_name)
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
102 XFree(ch.res_name);
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
103 }
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
104 if(!matched)
261
d6fd632d861c implement multi-tag selection through button3 click on the specific tag
Anselm R.Garbe <arg@10ksloc.org>
parents: 240
diff changeset
105 for(i = 0; i < ntags; i++)
262
d659a2dce2b5 implemented viewextend and added M-S-C-n shortcuts for extending the current view... updated man page (works great!) nice feature
Anselm R.Garbe <arg@10ksloc.org>
parents: 261
diff changeset
106 c->tags[i] = seltag[i];
441
785bad5f21dd does this preserve z order for anthony?
Anselm R. Garbe <arg@10kloc.org>
parents: 440
diff changeset
107 for(c->weight = 0; c->weight < ntags && !c->tags[c->weight]; c->weight++);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
108 }
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
109
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
110 void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 441
diff changeset
111 tag(Arg *arg) {
284
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
112 unsigned int i;
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
113
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
114 if(!sel)
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
115 return;
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
116 for(i = 0; i < ntags; i++)
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
117 sel->tags[i] = False;
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
118 sel->tags[arg->i] = True;
441
785bad5f21dd does this preserve z order for anthony?
Anselm R. Garbe <arg@10kloc.org>
parents: 440
diff changeset
119 sel->weight = arg->i;
533
a5567a0d3011 do* has no Arg arument anymore (never called directly)
Anselm R. Garbe <arg@10kloc.org>
parents: 532
diff changeset
120 arrange();
284
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
121 }
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
122
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
123 void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 441
diff changeset
124 toggletag(Arg *arg) {
284
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
125 unsigned int i;
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
126
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
127 if(!sel)
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
128 return;
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
129 sel->tags[arg->i] = !sel->tags[arg->i];
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
130 for(i = 0; i < ntags && !sel->tags[i]; i++);
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
131 if(i == ntags)
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
132 sel->tags[arg->i] = True;
441
785bad5f21dd does this preserve z order for anthony?
Anselm R. Garbe <arg@10kloc.org>
parents: 440
diff changeset
133 sel->weight = (i == ntags) ? arg->i : i;
533
a5567a0d3011 do* has no Arg arument anymore (never called directly)
Anselm R. Garbe <arg@10kloc.org>
parents: 532
diff changeset
134 arrange();
284
5f5c56e104de changed replacetag into toggletag
Anselm R.Garbe <arg@10ksloc.org>
parents: 277
diff changeset
135 }