+void
+settags(Client *c)
+{
+ char classinst[256];
+ unsigned int i, j;
+ 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(rreg[i].clregex && !regexec(rreg[i].clregex, classinst, 1, &tmp, 0)) {
+ c->isfloat = rule[i].isfloat;
+ for(j = 0; rreg[i].tregex && j < ntags; j++) {
+ if(!regexec(rreg[i].tregex, tags[j], 1, &tmp, 0)) {
+ matched = True;
+ c->tags[j] = True;
+ }
+ }
+ }
+ if(ch.res_class)
+ XFree(ch.res_class);
+ if(ch.res_name)
+ XFree(ch.res_name);
+ }
+ if(!matched)
+ c->tags[tsel] = True;
+}
+
+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 < ntags-1) ? tsel+1 : 0;
+ view(arg);
+}
+
+void
+viewprev(Arg *arg)
+{
+ arg->i = (tsel > 0) ? tsel-1 : ntags-1;
+ view(arg);
+}