+void
+settags(Client *c)
+{
+ char classinst[256];
+ static unsigned int len = sizeof(rule) / sizeof(rule[0]);
+ unsigned int i, j;
+ regex_t regex;
+ regmatch_t tmp;
+ Bool matched = False;
+ XClassHint ch;
+
+ if(XGetClassHint(dpy, c->win, &ch)) {
+ snprintf(classinst, sizeof(classinst), "%s:%s",
+ ch.res_class ? ch.res_class : "",
+ ch.res_name ? ch.res_name : "");
+ for(i = 0; !matched && i < len; i++) {
+ if(!regcomp(®ex, rule[i].pattern, 0)) {
+ if(!regexec(®ex, classinst, 1, &tmp, 0)) {
+ for(j = 0; j < TLast; j++) {
+ if(rule[i].tags[j])
+ matched = True;
+ c->tags[j] = rule[i].tags[j];
+ }
+ c->isfloat = rule[i].isfloat;
+ }
+ regfree(®ex);
+ }
+ }
+ if(ch.res_class)
+ XFree(ch.res_class);
+ if(ch.res_name)
+ XFree(ch.res_name);
+ }
+ if(!matched)
+ c->tags[tsel] = tags[tsel];
+}
+
+void
+togglemode(Arg *arg)
+{
+ arrange = arrange == dofloat ? dotile : dofloat;
+ arrange(NULL);
+}
+
+void
+view(Arg *arg)
+{
+ tsel = arg->i;
+ arrange(NULL);
+ drawall();
+}
+
+void
+viewnext(Arg *arg)
+{
+ arg->i = (tsel < TLast-1) ? tsel+1 : 0;
+ view(arg);
+}
+
+void
+viewprev(Arg *arg)
+{
+ arg->i = (tsel > 0) ? tsel-1 : TLast-1;
+ view(arg);
+}