+tile(const char *arg) {
+ static double master = MASTER;
+ double delta;
+ unsigned int i, n, nx, ny, nw, nh, mw, th;
+ Client *c;
+
+ if(lt->arrange != tile)
+ return;
+
+ /* arg handling, manipulate master */
+ if(arg && (1 == sscanf(arg, "%lf", &delta))) {
+ if(delta + master > 0.1 && delta + master < 0.9)
+ master += delta;
+ }
+
+ for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
+ n++;
+
+ /* window geoms */
+ mw = (n == 1) ? waw : master * waw;
+ th = (n > 1) ? wah / (n - 1) : 0;
+ if(n > 1 && th < bh)
+ th = wah;
+
+ nx = wax;
+ ny = way;
+ for(i = 0, c = clients; c; c = c->next)
+ if(isvisible(c)) {
+ unban(c);
+ if(c->isfloating)
+ continue;
+ c->ismax = False;
+ if(i == 0) { /* master */
+ nw = mw - 2 * c->border;
+ nh = wah - 2 * c->border;
+ }
+ else { /* tile window */
+ if(i == 1) {
+ ny = way;
+ nx += mw;
+ }
+ nw = waw - mw - 2 * c->border;
+ if(i + 1 == n) /* remainder */
+ nh = (way + wah) - ny - 2 * c->border;
+ else
+ nh = th - 2 * c->border;
+ }
+ resize(c, nx, ny, nw, nh, False);
+ if(n > 1 && th != wah)
+ ny += nh;
+ i++;
+ }
+ else
+ ban(c);
+ focus(NULL);
+ restack();
+}
+
+void
+togglebar(const char *arg) {
+ if(bpos == BarOff)
+ bpos = (BARPOS == BarOff) ? BarTop : BARPOS;
+ else
+ bpos = BarOff;
+ updatebarpos();
+ lt->arrange(NULL);
+}
+
+void
+togglemax(const char *arg) {