]> git.mdlowis.com Git - proto/iwe.git/commitdiff
checkpoint commit
authorMichael D. Lowis <mike.lowis@gentex.com>
Wed, 28 Feb 2018 18:11:52 +0000 (13:11 -0500)
committerMichael D. Lowis <mike.lowis@gentex.com>
Wed, 28 Feb 2018 18:11:52 +0000 (13:11 -0500)
Makefile
config.mk
config/dwm.h
config/slock.h
dwm/dwm.c

index 8470aad95d288c62b07fb686b2e43a17d43b83c1..b1a6c5716c52f48ce80b5b833962162f6d8a4842 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,10 +4,12 @@ include config.mk
 
 all: dmenu/dmenu dmenu/stest dwm/dwm slock/slock st/st
 
-install:
-       #cp dmenu/dmenu ${PREFIX}/bin/
-       #cp dmenu/dmenu_run ${PREFIX}/bin/
-       #cp dmenu/dmenu_patches ${PREFIX}/bin/
+install: all
+       mkdir -p ${PREFIX}/bin
+       cp -f dmenu/{dmenu,dmenu_run,dmenu_path,stest} ${PREFIX}/bin/
+       cp -f dwm/dwm ${PREFIX}/bin/
+       cp -f slock/slock ${PREFIX}/bin/
+       cp -f st/st ${PREFIX}/bin/
 
 .c.o:
        ${CC} -c -o $@ ${CFLAGS} $<
index 2d8c29ab4e8e617da2f1bf78eaad7943f012e1ed..abe41d9e91b1fc02f7af229308302a600e96c2d4 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -4,19 +4,23 @@ VERSION = 0.1
 # paths
 PREFIX = /usr/local
 
-# osx
-#X11INC = /usr/X11/include
-#X11LIB = /usr/X11/lib
-#FTINC  = ${X11INC}/freetype2
-
-# linux
-FTINC  = /usr/include/freetype2
-X11INC = /usr/include/X11
-X11LIB = /usr/lib
+# basic os detection
+ifeq ("$(shell uname)","Darwin")
+       # osx
+       X11INC = /usr/X11/include
+       X11LIB = /usr/X11/lib
+       FTINC  = ${X11INC}/freetype2
+       LIBS   = -L${X11LIB} -lm -lX11 -lXft -lXrandr -lfontconfig
+else
+       # linux
+       X11INC = /usr/include/X11
+       X11LIB = /usr/lib
+       FTINC  = /usr/include/freetype2
+       LIBS   = -L${X11LIB} -lm -lX11 -lXft -lXrandr -lfontconfig -lcrypt -lutil
+endif
 
 # includes and libs
 INCS = -I${X11INC} -I${FTINC}
-LIBS = -L${X11LIB} -lm -lX11 -lXft -lXrandr -lfontconfig -lcrypt -lutil
 
 # flags
 CFLAGS   += -g -std=c99 -pedantic -Os ${INCS} ${CPPFLAGS}
@@ -27,6 +31,6 @@ CPPFLAGS += -DVERSION=\"${VERSION}\" \
                        -D_XOPEN_SOURCE=700 \
                        -D_POSIX_C_SOURCE=20080
 
-# Xinerama
+# xinerama
 CPPFLAGS += -DXINERAMA
 LDFLAGS  += -lXinerama
index c7b3ca02e57122f701821459753a61327b8d9174..5978bdbe3195d867aaf593f0860e5156dfc1be5f 100644 (file)
@@ -1,4 +1,5 @@
 /* See LICENSE file for copyright and license details. */
+#include "push.c"
 
 /* appearance */
 static const char *fonts[] = {
@@ -66,6 +67,8 @@ static Key keys[] = {
     { MODKEY,                       XK_b,      togglebar,      {0} },
     { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
     { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
+    { MODKEY|ShiftMask,             XK_j,      pushdown,       {0} },
+    { MODKEY|ShiftMask,             XK_k,      pushup,         {0} },
     { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
     { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
     { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
index 6fba2b63bda618936990feba94552298ce256986..c2a5da7ed6aeca68afebf4a0264d0214b17ea005 100644 (file)
@@ -3,9 +3,9 @@ static const char *user  = "nobody";
 static const char *group = "nogroup";
 
 static const char *colorname[NUMCOLS] = {
-       "black",     /* after initialization */
-       "#005577",   /* during input */
-       "#CC3333",   /* wrong password */
+    "black",     /* after initialization */
+    "#005577",   /* during input */
+    "black",     /* wrong password */
 };
 
 /* treat a cleared input like a wrong password */
index 7fe2127b916879a62a386a034553a74bdc12e316..05641ba1190f4ec3a908d1ffe37098730496d3ff 100644 (file)
--- a/dwm/dwm.c
+++ b/dwm/dwm.c
@@ -68,79 +68,79 @@ enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
        ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
 
 typedef union {
-       int i;
-       unsigned int ui;
-       float f;
-       const void *v;
+    int i;
+    unsigned int ui;
+    float f;
+    const void *v;
 } Arg;
 
 typedef struct {
-       unsigned int click;
-       unsigned int mask;
-       unsigned int button;
-       void (*func)(const Arg *arg);
-       const Arg arg;
+    unsigned int click;
+    unsigned int mask;
+    unsigned int button;
+    void (*func)(const Arg *arg);
+    const Arg arg;
 } Button;
 
 typedef struct Monitor Monitor;
 typedef struct Client Client;
 struct Client {
-       char name[256];
-       float mina, maxa;
-       int x, y, w, h;
-       int oldx, oldy, oldw, oldh;
-       int basew, baseh, incw, inch, maxw, maxh, minw, minh;
-       int bw, oldbw;
-       unsigned int tags;
-       int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
-       Client *next;
-       Client *snext;
-       Monitor *mon;
-       Window win;
+    char name[256];
+    float mina, maxa;
+    int x, y, w, h;
+    int oldx, oldy, oldw, oldh;
+    int basew, baseh, incw, inch, maxw, maxh, minw, minh;
+    int bw, oldbw;
+    unsigned int tags;
+    int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
+    Client *next;
+    Client *snext;
+    Monitor *mon;
+    Window win;
 };
 
 typedef struct {
-       unsigned int mod;
-       KeySym keysym;
-       void (*func)(const Arg *);
-       const Arg arg;
+    unsigned int mod;
+    KeySym keysym;
+    void (*func)(const Arg *);
+    const Arg arg;
 } Key;
 
 typedef struct {
-       const char *symbol;
-       void (*arrange)(Monitor *);
+    const char *symbol;
+    void (*arrange)(Monitor *);
 } Layout;
 
 typedef struct Pertag Pertag;
 struct Monitor {
-       char ltsymbol[16];
-       float mfact;
-       int nmaster;
-       int num;
-       int by;               /* bar geometry */
-       int mx, my, mw, mh;   /* screen size */
-       int wx, wy, ww, wh;   /* window area  */
-       unsigned int seltags;
-       unsigned int sellt;
-       unsigned int tagset[2];
-       int showbar;
-       int topbar;
-       Client *clients;
-       Client *sel;
-       Client *stack;
-       Monitor *next;
-       Window barwin;
-       const Layout *lt[2];
-       Pertag *pertag;
+    char ltsymbol[16];
+    float mfact;
+    int nmaster;
+    int num;
+    int by;               /* bar geometry */
+    int mx, my, mw, mh;   /* screen size */
+    int wx, wy, ww, wh;   /* window area  */
+    unsigned int seltags;
+    unsigned int sellt;
+    unsigned int tagset[2];
+    int showbar;
+    int topbar;
+    Client *clients;
+    Client *sel;
+    Client *stack;
+    Monitor *next;
+    Window barwin;
+    const Layout *lt[2];
+    Pertag *pertag;
 };
 
 typedef struct {
-       const char *class;
-       const char *instance;
-       const char *title;
-       unsigned int tags;
-       int isfloating;
-       int monitor;
+    const char *class;
+    const char *instance;
+    const char *title;
+    unsigned int tags;
+    int isfloating;
+    int monitor;
 } Rule;
 
 /* function declarations */
@@ -149,7 +149,6 @@ static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interac
 static void arrange(Monitor *m);
 static void arrangemon(Monitor *m);
 static void attach(Client *c);
-static void attachabove(Client *c);
 static void attachstack(Client *c);
 static void buttonpress(XEvent *e);
 static void checkotherwm(void);
@@ -246,20 +245,20 @@ static int bh, blw = 0;      /* bar geometry */
 static int (*xerrorxlib)(Display *, XErrorEvent *);
 static unsigned int numlockmask = 0;
 static void (*handler[LASTEvent]) (XEvent *) = {
-       [ButtonPress] = buttonpress,
-       [ClientMessage] = clientmessage,
-       [ConfigureRequest] = configurerequest,
-       [ConfigureNotify] = configurenotify,
-       [DestroyNotify] = destroynotify,
-       [EnterNotify] = enternotify,
-       [Expose] = expose,
-       [FocusIn] = focusin,
-       [KeyPress] = keypress,
-       [MappingNotify] = mappingnotify,
-       [MapRequest] = maprequest,
-       [MotionNotify] = motionnotify,
-       [PropertyNotify] = propertynotify,
-       [UnmapNotify] = unmapnotify
+    [ButtonPress] = buttonpress,
+    [ClientMessage] = clientmessage,
+    [ConfigureRequest] = configurerequest,
+    [ConfigureNotify] = configurenotify,
+    [DestroyNotify] = destroynotify,
+    [EnterNotify] = enternotify,
+    [Expose] = expose,
+    [FocusIn] = focusin,
+    [KeyPress] = keypress,
+    [MappingNotify] = mappingnotify,
+    [MapRequest] = maprequest,
+    [MotionNotify] = motionnotify,
+    [PropertyNotify] = propertynotify,
+    [UnmapNotify] = unmapnotify
 };
 static Atom wmatom[WMLast], netatom[NetLast];
 static int running = 1;
@@ -274,13 +273,13 @@ static Window root;
 #include "config.h"
 
 struct Pertag {
-       unsigned int curtag, prevtag; /* current and previous tag */
-       int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */
-       float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */
-       unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */
-       const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes  */
-       Bool showbars[LENGTH(tags) + 1]; /* display bar for the current tag */
-       Client *prevzooms[LENGTH(tags) + 1]; /* store zoom information */
+    unsigned int curtag, prevtag; /* current and previous tag */
+    int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */
+    float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */
+    unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */
+    const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes  */
+    Bool showbars[LENGTH(tags) + 1]; /* display bar for the current tag */
+    Client *prevzooms[LENGTH(tags) + 1]; /* store zoom information */
 };
 
 /* compile-time check if all tags fit into an unsigned int bit array. */
@@ -290,1881 +289,1880 @@ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
 void
 applyrules(Client *c)
 {
-       const char *class, *instance;
-       unsigned int i;
-       const Rule *r;
-       Monitor *m;
-       XClassHint ch = { NULL, NULL };
-
-       /* rule matching */
-       c->isfloating = 0;
-       c->tags = 0;
-       XGetClassHint(dpy, c->win, &ch);
-       class    = ch.res_class ? ch.res_class : broken;
-       instance = ch.res_name  ? ch.res_name  : broken;
-
-       for (i = 0; i < LENGTH(rules); i++) {
-               r = &rules[i];
-               if ((!r->title || strstr(c->name, r->title))
-               && (!r->class || strstr(class, r->class))
-               && (!r->instance || strstr(instance, r->instance)))
-               {
-                       c->isfloating = r->isfloating;
-                       c->tags |= r->tags;
-                       for (m = mons; m && m->num != r->monitor; m = m->next);
-                       if (m)
-                               c->mon = m;
-               }
-       }
-       if (ch.res_class)
-               XFree(ch.res_class);
-       if (ch.res_name)
-               XFree(ch.res_name);
-       c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
+    const char *class, *instance;
+    unsigned int i;
+    const Rule *r;
+    Monitor *m;
+    XClassHint ch = { NULL, NULL };
+
+    /* rule matching */
+    c->isfloating = 0;
+    c->tags = 0;
+    XGetClassHint(dpy, c->win, &ch);
+    class    = ch.res_class ? ch.res_class : broken;
+    instance = ch.res_name  ? ch.res_name  : broken;
+
+    for (i = 0; i < LENGTH(rules); i++) {
+        r = &rules[i];
+        if ((!r->title || strstr(c->name, r->title))
+        && (!r->class || strstr(class, r->class))
+        && (!r->instance || strstr(instance, r->instance)))
+        {
+            c->isfloating = r->isfloating;
+            c->tags |= r->tags;
+            for (m = mons; m && m->num != r->monitor; m = m->next);
+            if (m)
+                c->mon = m;
+        }
+    }
+    if (ch.res_class)
+        XFree(ch.res_class);
+    if (ch.res_name)
+        XFree(ch.res_name);
+    c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
 }
 
 int
 applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
 {
-       int baseismin;
-       Monitor *m = c->mon;
-
-       /* set minimum possible */
-       *w = MAX(1, *w);
-       *h = MAX(1, *h);
-       if (interact) {
-               if (*x > sw)
-                       *x = sw - WIDTH(c);
-               if (*y > sh)
-                       *y = sh - HEIGHT(c);
-               if (*x + *w + 2 * c->bw < 0)
-                       *x = 0;
-               if (*y + *h + 2 * c->bw < 0)
-                       *y = 0;
-       } else {
-               if (*x >= m->wx + m->ww)
-                       *x = m->wx + m->ww - WIDTH(c);
-               if (*y >= m->wy + m->wh)
-                       *y = m->wy + m->wh - HEIGHT(c);
-               if (*x + *w + 2 * c->bw <= m->wx)
-                       *x = m->wx;
-               if (*y + *h + 2 * c->bw <= m->wy)
-                       *y = m->wy;
-       }
-       if (*h < bh)
-               *h = bh;
-       if (*w < bh)
-               *w = bh;
-       if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
-               /* see last two sentences in ICCCM 4.1.2.3 */
-               baseismin = c->basew == c->minw && c->baseh == c->minh;
-               if (!baseismin) { /* temporarily remove base dimensions */
-                       *w -= c->basew;
-                       *h -= c->baseh;
-               }
-               /* adjust for aspect limits */
-               if (c->mina > 0 && c->maxa > 0) {
-                       if (c->maxa < (float)*w / *h)
-                               *w = *h * c->maxa + 0.5;
-                       else if (c->mina < (float)*h / *w)
-                               *h = *w * c->mina + 0.5;
-               }
-               if (baseismin) { /* increment calculation requires this */
-                       *w -= c->basew;
-                       *h -= c->baseh;
-               }
-               /* adjust for increment value */
-               if (c->incw)
-                       *w -= *w % c->incw;
-               if (c->inch)
-                       *h -= *h % c->inch;
-               /* restore base dimensions */
-               *w = MAX(*w + c->basew, c->minw);
-               *h = MAX(*h + c->baseh, c->minh);
-               if (c->maxw)
-                       *w = MIN(*w, c->maxw);
-               if (c->maxh)
-                       *h = MIN(*h, c->maxh);
-       }
-       return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
+    int baseismin;
+    Monitor *m = c->mon;
+
+    /* set minimum possible */
+    *w = MAX(1, *w);
+    *h = MAX(1, *h);
+    if (interact) {
+        if (*x > sw)
+            *x = sw - WIDTH(c);
+        if (*y > sh)
+            *y = sh - HEIGHT(c);
+        if (*x + *w + 2 * c->bw < 0)
+            *x = 0;
+        if (*y + *h + 2 * c->bw < 0)
+            *y = 0;
+    } else {
+        if (*x >= m->wx + m->ww)
+            *x = m->wx + m->ww - WIDTH(c);
+        if (*y >= m->wy + m->wh)
+            *y = m->wy + m->wh - HEIGHT(c);
+        if (*x + *w + 2 * c->bw <= m->wx)
+            *x = m->wx;
+        if (*y + *h + 2 * c->bw <= m->wy)
+            *y = m->wy;
+    }
+    if (*h < bh)
+        *h = bh;
+    if (*w < bh)
+        *w = bh;
+    if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
+        /* see last two sentences in ICCCM 4.1.2.3 */
+        baseismin = c->basew == c->minw && c->baseh == c->minh;
+        if (!baseismin) { /* temporarily remove base dimensions */
+            *w -= c->basew;
+            *h -= c->baseh;
+        }
+        /* adjust for aspect limits */
+        if (c->mina > 0 && c->maxa > 0) {
+            if (c->maxa < (float)*w / *h)
+                *w = *h * c->maxa + 0.5;
+            else if (c->mina < (float)*h / *w)
+                *h = *w * c->mina + 0.5;
+        }
+        if (baseismin) { /* increment calculation requires this */
+            *w -= c->basew;
+            *h -= c->baseh;
+        }
+        /* adjust for increment value */
+        if (c->incw)
+            *w -= *w % c->incw;
+        if (c->inch)
+            *h -= *h % c->inch;
+        /* restore base dimensions */
+        *w = MAX(*w + c->basew, c->minw);
+        *h = MAX(*h + c->baseh, c->minh);
+        if (c->maxw)
+            *w = MIN(*w, c->maxw);
+        if (c->maxh)
+            *h = MIN(*h, c->maxh);
+    }
+    return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
 }
 
 void
 arrange(Monitor *m)
 {
-       if (m)
-               showhide(m->stack);
-       else for (m = mons; m; m = m->next)
-               showhide(m->stack);
-       if (m) {
-               arrangemon(m);
-               restack(m);
-       } else for (m = mons; m; m = m->next)
-               arrangemon(m);
+    if (m)
+        showhide(m->stack);
+    else for (m = mons; m; m = m->next)
+        showhide(m->stack);
+    if (m) {
+        arrangemon(m);
+        restack(m);
+    } else for (m = mons; m; m = m->next)
+        arrangemon(m);
 }
 
 void
 arrangemon(Monitor *m)
 {
-       strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
-       if (m->lt[m->sellt]->arrange)
-               m->lt[m->sellt]->arrange(m);
+    strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
+    if (m->lt[m->sellt]->arrange)
+        m->lt[m->sellt]->arrange(m);
 }
 
 void
 attach(Client *c)
 {
-       c->next = c->mon->clients;
-       c->mon->clients = c;
-}
-
-void
-attachabove(Client *c)
-{
-       if(c->mon->sel == NULL || c->mon->sel == c->mon->clients || c->mon->sel->isfloating) {
-               attach(c);
-               return;
-       }
-
-       Client *at;
-       for(at = c->mon->clients; at->next != c->mon->sel; at = at->next);
-       c->next = at->next;
-       at->next = c;
+    c->next = c->mon->clients;
+    c->mon->clients = c;
+    pushup(NULL);
 }
 
 void
 attachstack(Client *c)
 {
-       c->snext = c->mon->stack;
-       c->mon->stack = c;
+#if 0
+    if (!c->mon->stack) {
+        c->snext = c->mon->stack;
+        c->mon->stack = c;
+    } else {
+        Client* curr = c->mon->stack;
+        while (curr->snext)
+            curr = curr->snext;
+        curr->snext = c;
+    }
+#else
+    c->snext = c->mon->stack;
+    c->mon->stack = c;
+#endif
 }
 
 void
 buttonpress(XEvent *e)
 {
-       unsigned int i, x, click;
-       Arg arg = {0};
-       Client *c;
-       Monitor *m;
-       XButtonPressedEvent *ev = &e->xbutton;
-
-       click = ClkRootWin;
-       /* focus monitor if necessary */
-       if ((m = wintomon(ev->window)) && m != selmon) {
-               unfocus(selmon->sel, 1);
-               selmon = m;
-               focus(NULL);
-       }
-       if (ev->window == selmon->barwin) {
-               i = x = 0;
-               do
-                       x += TEXTW(tags[i]);
-               while (ev->x >= x && ++i < LENGTH(tags));
-               if (i < LENGTH(tags)) {
-                       click = ClkTagBar;
-                       arg.ui = 1 << i;
-               } else if (ev->x < x + blw)
-                       click = ClkLtSymbol;
-               else if (ev->x > selmon->ww - TEXTW(stext))
-                       click = ClkStatusText;
-               else
-                       click = ClkWinTitle;
-       } else if ((c = wintoclient(ev->window))) {
-               focus(c);
-               click = ClkClientWin;
-       }
-       for (i = 0; i < LENGTH(buttons); i++)
-               if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
-               && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
-                       buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
+    unsigned int i, x, click;
+    Arg arg = {0};
+    Client *c;
+    Monitor *m;
+    XButtonPressedEvent *ev = &e->xbutton;
+
+    click = ClkRootWin;
+    /* focus monitor if necessary */
+    if ((m = wintomon(ev->window)) && m != selmon) {
+        unfocus(selmon->sel, 1);
+        selmon = m;
+        focus(NULL);
+    }
+    if (ev->window == selmon->barwin) {
+        i = x = 0;
+        do
+            x += TEXTW(tags[i]);
+        while (ev->x >= x && ++i < LENGTH(tags));
+        if (i < LENGTH(tags)) {
+            click = ClkTagBar;
+            arg.ui = 1 << i;
+        } else if (ev->x < x + blw)
+            click = ClkLtSymbol;
+        else if (ev->x > selmon->ww - TEXTW(stext))
+            click = ClkStatusText;
+        else
+            click = ClkWinTitle;
+    } else if ((c = wintoclient(ev->window))) {
+        focus(c);
+        click = ClkClientWin;
+    }
+    for (i = 0; i < LENGTH(buttons); i++)
+        if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
+        && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
+            buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
 }
 
 void
 checkotherwm(void)
 {
-       xerrorxlib = XSetErrorHandler(xerrorstart);
-       /* this causes an error if some other window manager is running */
-       XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
-       XSync(dpy, False);
-       XSetErrorHandler(xerror);
-       XSync(dpy, False);
+    xerrorxlib = XSetErrorHandler(xerrorstart);
+    /* this causes an error if some other window manager is running */
+    XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
+    XSync(dpy, False);
+    XSetErrorHandler(xerror);
+    XSync(dpy, False);
 }
 
 void
 cleanup(void)
 {
-       Arg a = {.ui = ~0};
-       Layout foo = { "", NULL };
-       Monitor *m;
-       size_t i;
-
-       view(&a);
-       selmon->lt[selmon->sellt] = &foo;
-       for (m = mons; m; m = m->next)
-               while (m->stack)
-                       unmanage(m->stack, 0);
-       XUngrabKey(dpy, AnyKey, AnyModifier, root);
-       while (mons)
-               cleanupmon(mons);
-       for (i = 0; i < CurLast; i++)
-               drw_cur_free(drw, cursor[i]);
-       for (i = 0; i < SchemeLast; i++) {
-               drw_clr_free(scheme[i].border);
-               drw_clr_free(scheme[i].bg);
-               drw_clr_free(scheme[i].fg);
-       }
-       drw_free(drw);
-       XSync(dpy, False);
-       XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
-       XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+    Arg a = {.ui = ~0};
+    Layout foo = { "", NULL };
+    Monitor *m;
+    size_t i;
+
+    view(&a);
+    selmon->lt[selmon->sellt] = &foo;
+    for (m = mons; m; m = m->next)
+        while (m->stack)
+            unmanage(m->stack, 0);
+    XUngrabKey(dpy, AnyKey, AnyModifier, root);
+    while (mons)
+        cleanupmon(mons);
+    for (i = 0; i < CurLast; i++)
+        drw_cur_free(drw, cursor[i]);
+    for (i = 0; i < SchemeLast; i++) {
+        drw_clr_free(scheme[i].border);
+        drw_clr_free(scheme[i].bg);
+        drw_clr_free(scheme[i].fg);
+    }
+    drw_free(drw);
+    XSync(dpy, False);
+    XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
+    XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
 }
 
 void
 cleanupmon(Monitor *mon)
 {
-       Monitor *m;
+    Monitor *m;
 
-       if (mon == mons)
-               mons = mons->next;
-       else {
-               for (m = mons; m && m->next != mon; m = m->next);
-               m->next = mon->next;
-       }
-       XUnmapWindow(dpy, mon->barwin);
-       XDestroyWindow(dpy, mon->barwin);
-       free(mon);
+    if (mon == mons)
+        mons = mons->next;
+    else {
+        for (m = mons; m && m->next != mon; m = m->next);
+        m->next = mon->next;
+    }
+    XUnmapWindow(dpy, mon->barwin);
+    XDestroyWindow(dpy, mon->barwin);
+    free(mon);
 }
 
 void
 clearurgent(Client *c)
 {
-       XWMHints *wmh;
+    XWMHints *wmh;
 
-       c->isurgent = 0;
-       if (!(wmh = XGetWMHints(dpy, c->win)))
-               return;
-       wmh->flags &= ~XUrgencyHint;
-       XSetWMHints(dpy, c->win, wmh);
-       XFree(wmh);
+    c->isurgent = 0;
+    if (!(wmh = XGetWMHints(dpy, c->win)))
+        return;
+    wmh->flags &= ~XUrgencyHint;
+    XSetWMHints(dpy, c->win, wmh);
+    XFree(wmh);
 }
 
 void
 clientmessage(XEvent *e)
 {
-       XClientMessageEvent *cme = &e->xclient;
-       Client *c = wintoclient(cme->window);
-       int i;
+    XClientMessageEvent *cme = &e->xclient;
+    Client *c = wintoclient(cme->window);
+    int i;
 
-       if (!c)
-               return;
-       if (cme->message_type == netatom[NetWMState]) {
-               if (cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen])
-                       setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */
-                                     || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
-       } else if (cme->message_type == netatom[NetActiveWindow]) {
-               if (!ISVISIBLE(c)) {
-                       c->mon->seltags ^= 1;
-                       c->mon->tagset[c->mon->seltags] = c->tags;
-                       for(i=0; !(c->tags & 1 << i); i++);
-                       view(&(Arg){.ui = 1 << i});
-               }
-               pop(c);
-       }
+    if (!c)
+        return;
+    if (cme->message_type == netatom[NetWMState]) {
+        if (cme->data.l[1] == netatom[NetWMFullscreen] || cme->data.l[2] == netatom[NetWMFullscreen])
+            setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD    */
+                          || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
+    } else if (cme->message_type == netatom[NetActiveWindow]) {
+        if (!ISVISIBLE(c)) {
+            c->mon->seltags ^= 1;
+            c->mon->tagset[c->mon->seltags] = c->tags;
+            for(i=0; !(c->tags & 1 << i); i++);
+            view(&(Arg){.ui = 1 << i});
+        }
+        pop(c);
+    }
 }
 
 void
 configure(Client *c)
 {
-       XConfigureEvent ce;
+    XConfigureEvent ce;
 
-       ce.type = ConfigureNotify;
-       ce.display = dpy;
-       ce.event = c->win;
-       ce.window = c->win;
-       ce.x = c->x;
-       ce.y = c->y;
-       ce.width = c->w;
-       ce.height = c->h;
-       ce.border_width = c->bw;
-       ce.above = None;
-       ce.override_redirect = False;
-       XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
+    ce.type = ConfigureNotify;
+    ce.display = dpy;
+    ce.event = c->win;
+    ce.window = c->win;
+    ce.x = c->x;
+    ce.y = c->y;
+    ce.width = c->w;
+    ce.height = c->h;
+    ce.border_width = c->bw;
+    ce.above = None;
+    ce.override_redirect = False;
+    XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
 }
 
 void
 configurenotify(XEvent *e)
 {
-       Monitor *m;
-       XConfigureEvent *ev = &e->xconfigure;
-       int dirty;
+    Monitor *m;
+    XConfigureEvent *ev = &e->xconfigure;
+    int dirty;
 
-       /* TODO: updategeom handling sucks, needs to be simplified */
-       if (ev->window == root) {
-               dirty = (sw != ev->width || sh != ev->height);
-               sw = ev->width;
-               sh = ev->height;
-               if (updategeom() || dirty) {
-                       drw_resize(drw, sw, bh);
-                       updatebars();
-                       for (m = mons; m; m = m->next)
-                               XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
-                       focus(NULL);
-                       arrange(NULL);
-               }
-       }
+    /* TODO: updategeom handling sucks, needs to be simplified */
+    if (ev->window == root) {
+        dirty = (sw != ev->width || sh != ev->height);
+        sw = ev->width;
+        sh = ev->height;
+        if (updategeom() || dirty) {
+            drw_resize(drw, sw, bh);
+            updatebars();
+            for (m = mons; m; m = m->next)
+                XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
+            focus(NULL);
+            arrange(NULL);
+        }
+    }
 }
 
 void
 configurerequest(XEvent *e)
 {
-       Client *c;
-       Monitor *m;
-       XConfigureRequestEvent *ev = &e->xconfigurerequest;
-       XWindowChanges wc;
-
-       if ((c = wintoclient(ev->window))) {
-               if (ev->value_mask & CWBorderWidth)
-                       c->bw = ev->border_width;
-               else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
-                       m = c->mon;
-                       if (ev->value_mask & CWX) {
-                               c->oldx = c->x;
-                               c->x = m->mx + ev->x;
-                       }
-                       if (ev->value_mask & CWY) {
-                               c->oldy = c->y;
-                               c->y = m->my + ev->y;
-                       }
-                       if (ev->value_mask & CWWidth) {
-                               c->oldw = c->w;
-                               c->w = ev->width;
-                       }
-                       if (ev->value_mask & CWHeight) {
-                               c->oldh = c->h;
-                               c->h = ev->height;
-                       }
-                       if ((c->x + c->w) > m->mx + m->mw && c->isfloating)
-                               c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */
-                       if ((c->y + c->h) > m->my + m->mh && c->isfloating)
-                               c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */
-                       if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
-                               configure(c);
-                       if (ISVISIBLE(c))
-                               XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
-               } else
-                       configure(c);
-       } else {
-               wc.x = ev->x;
-               wc.y = ev->y;
-               wc.width = ev->width;
-               wc.height = ev->height;
-               wc.border_width = ev->border_width;
-               wc.sibling = ev->above;
-               wc.stack_mode = ev->detail;
-               XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
-       }
-       XSync(dpy, False);
+    Client *c;
+    Monitor *m;
+    XConfigureRequestEvent *ev = &e->xconfigurerequest;
+    XWindowChanges wc;
+
+    if ((c = wintoclient(ev->window))) {
+        if (ev->value_mask & CWBorderWidth)
+            c->bw = ev->border_width;
+        else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
+            m = c->mon;
+            if (ev->value_mask & CWX) {
+                c->oldx = c->x;
+                c->x = m->mx + ev->x;
+            }
+            if (ev->value_mask & CWY) {
+                c->oldy = c->y;
+                c->y = m->my + ev->y;
+            }
+            if (ev->value_mask & CWWidth) {
+                c->oldw = c->w;
+                c->w = ev->width;
+            }
+            if (ev->value_mask & CWHeight) {
+                c->oldh = c->h;
+                c->h = ev->height;
+            }
+            if ((c->x + c->w) > m->mx + m->mw && c->isfloating)
+                c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */
+            if ((c->y + c->h) > m->my + m->mh && c->isfloating)
+                c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */
+            if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
+                configure(c);
+            if (ISVISIBLE(c))
+                XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
+        } else
+            configure(c);
+    } else {
+        wc.x = ev->x;
+        wc.y = ev->y;
+        wc.width = ev->width;
+        wc.height = ev->height;
+        wc.border_width = ev->border_width;
+        wc.sibling = ev->above;
+        wc.stack_mode = ev->detail;
+        XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
+    }
+    XSync(dpy, False);
 }
 
 Monitor *
 createmon(void)
 {
-       Monitor *m;
-       int i;
+    Monitor *m;
+    int i;
 
-       m = ecalloc(1, sizeof(Monitor));
-       m->tagset[0] = m->tagset[1] = 1;
-       m->mfact = mfact;
-       m->nmaster = nmaster;
-       m->showbar = showbar;
-       m->topbar = topbar;
-       m->lt[0] = &layouts[0];
-       m->lt[1] = &layouts[1 % LENGTH(layouts)];
-       strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
-       if (!(m->pertag = (Pertag *)calloc(1, sizeof(Pertag))))
-               die("fatal: could not malloc() %u bytes\n", sizeof(Pertag));
-       m->pertag->curtag = m->pertag->prevtag = 1;
-       for(i=0; i <= LENGTH(tags); i++) {
-               /* init nmaster */
-               m->pertag->nmasters[i] = m->nmaster;
+    m = ecalloc(1, sizeof(Monitor));
+    m->tagset[0] = m->tagset[1] = 1;
+    m->mfact = mfact;
+    m->nmaster = nmaster;
+    m->showbar = showbar;
+    m->topbar = topbar;
+    m->lt[0] = &layouts[0];
+    m->lt[1] = &layouts[1 % LENGTH(layouts)];
+    strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
+    if (!(m->pertag = (Pertag *)calloc(1, sizeof(Pertag))))
+        die("fatal: could not malloc() %u bytes\n", sizeof(Pertag));
+    m->pertag->curtag = m->pertag->prevtag = 1;
+    for(i=0; i <= LENGTH(tags); i++) {
+        /* init nmaster */
+        m->pertag->nmasters[i] = m->nmaster;
 
-               /* init mfacts */
-               m->pertag->mfacts[i] = m->mfact;
+        /* init mfacts */
+        m->pertag->mfacts[i] = m->mfact;
 
-               /* init layouts */
-               m->pertag->ltidxs[i][0] = m->lt[0];
-               m->pertag->ltidxs[i][1] = m->lt[1];
-               m->pertag->sellts[i] = m->sellt;
+        /* init layouts */
+        m->pertag->ltidxs[i][0] = m->lt[0];
+        m->pertag->ltidxs[i][1] = m->lt[1];
+        m->pertag->sellts[i] = m->sellt;
 
-               /* init showbar */
-               m->pertag->showbars[i] = m->showbar;
+        /* init showbar */
+        m->pertag->showbars[i] = m->showbar;
 
-               /* swap focus and zoomswap*/
-               m->pertag->prevzooms[i] = NULL;
-       }
-       return m;
+        /* swap focus and zoomswap*/
+        m->pertag->prevzooms[i] = NULL;
+    }
+    return m;
 }
 
 void
 destroynotify(XEvent *e)
 {
-       Client *c;
-       XDestroyWindowEvent *ev = &e->xdestroywindow;
+    Client *c;
+    XDestroyWindowEvent *ev = &e->xdestroywindow;
 
-       if ((c = wintoclient(ev->window)))
-               unmanage(c, 1);
+    if ((c = wintoclient(ev->window)))
+        unmanage(c, 1);
 }
 
 void
 detach(Client *c)
 {
-       Client **tc;
+    Client **tc;
 
-       for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
-       *tc = c->next;
+    for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
+    *tc = c->next;
 }
 
 void
 detachstack(Client *c)
 {
-       Client **tc, *t;
+    Client **tc, *t;
 
-       for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
-       *tc = c->snext;
+    for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
+    *tc = c->snext;
 
-       if (c == c->mon->sel) {
-               for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
-               c->mon->sel = t;
-       }
+    if (c == c->mon->sel) {
+        for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
+        c->mon->sel = t;
+    }
 }
 
 Monitor *
 dirtomon(int dir)
 {
-       Monitor *m = NULL;
+    Monitor *m = NULL;
 
-       if (dir > 0) {
-               if (!(m = selmon->next))
-                       m = mons;
-       } else if (selmon == mons)
-               for (m = mons; m->next; m = m->next);
-       else
-               for (m = mons; m->next != selmon; m = m->next);
-       return m;
+    if (dir > 0) {
+        if (!(m = selmon->next))
+            m = mons;
+    } else if (selmon == mons)
+        for (m = mons; m->next; m = m->next);
+    else
+        for (m = mons; m->next != selmon; m = m->next);
+    return m;
 }
 
 void
 drawbar(Monitor *m)
 {
-       int x, xx, w, dx;
-       unsigned int i, occ = 0, urg = 0;
-       Client *c;
-
-       dx = (drw->fonts[0]->ascent + drw->fonts[0]->descent + 2) / 4;
-
-       for (c = m->clients; c; c = c->next) {
-               occ |= c->tags;
-               if (c->isurgent)
-                       urg |= c->tags;
-       }
-       x = 0;
-       for (i = 0; i < LENGTH(tags); i++) {
-               w = TEXTW(tags[i]);
-               drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
-               drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);
-               drw_rect(drw, x + 1, 1, dx, dx, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
-                          occ & 1 << i, urg & 1 << i);
-               x += w;
-       }
-       w = blw = TEXTW(m->ltsymbol);
-       drw_setscheme(drw, &scheme[SchemeNorm]);
-       drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
-       x += w;
-       xx = x;
-       if (m == selmon) { /* status is only drawn on selected monitor */
-               w = TEXTW(stext);
-               x = m->ww - w;
-               if (x < xx) {
-                       x = xx;
-                       w = m->ww - xx;
-               }
-               drw_text(drw, x, 0, w, bh, stext, 0);
-       } else
-               x = m->ww;
-       if ((w = x - xx) > bh) {
-               x = xx;
-               if (m->sel) {
-                       drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
-                       drw_text(drw, x, 0, w, bh, m->sel->name, 0);
-                       drw_rect(drw, x + 1, 1, dx, dx, m->sel->isfixed, m->sel->isfloating, 0);
-               } else {
-                       drw_setscheme(drw, &scheme[SchemeNorm]);
-                       drw_rect(drw, x, 0, w, bh, 1, 0, 1);
-               }
-       }
-       drw_map(drw, m->barwin, 0, 0, m->ww, bh);
+    int x, xx, w, dx;
+    unsigned int i, occ = 0, urg = 0;
+    Client *c;
+
+    dx = (drw->fonts[0]->ascent + drw->fonts[0]->descent + 2) / 4;
+
+    for (c = m->clients; c; c = c->next) {
+        occ |= c->tags;
+        if (c->isurgent)
+            urg |= c->tags;
+    }
+    x = 0;
+    for (i = 0; i < LENGTH(tags); i++) {
+        w = TEXTW(tags[i]);
+        drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+        drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);
+        drw_rect(drw, x + 1, 1, dx, dx, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+                   occ & 1 << i, urg & 1 << i);
+        x += w;
+    }
+    w = blw = TEXTW(m->ltsymbol);
+    drw_setscheme(drw, &scheme[SchemeNorm]);
+    drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+    x += w;
+    xx = x;
+    if (m == selmon) { /* status is only drawn on selected monitor */
+        w = TEXTW(stext);
+        x = m->ww - w;
+        if (x < xx) {
+            x = xx;
+            w = m->ww - xx;
+        }
+        drw_text(drw, x, 0, w, bh, stext, 0);
+    } else
+        x = m->ww;
+    if ((w = x - xx) > bh) {
+        x = xx;
+        if (m->sel) {
+            drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
+            drw_text(drw, x, 0, w, bh, m->sel->name, 0);
+            drw_rect(drw, x + 1, 1, dx, dx, m->sel->isfixed, m->sel->isfloating, 0);
+        } else {
+            drw_setscheme(drw, &scheme[SchemeNorm]);
+            drw_rect(drw, x, 0, w, bh, 1, 0, 1);
+        }
+    }
+    drw_map(drw, m->barwin, 0, 0, m->ww, bh);
 }
 
 void
 drawbars(void)
 {
-       Monitor *m;
+    Monitor *m;
 
-       for (m = mons; m; m = m->next)
-               drawbar(m);
+    for (m = mons; m; m = m->next)
+        drawbar(m);
 }
 
 void
 enternotify(XEvent *e)
 {
-       Client *c;
-       Monitor *m;
-       XCrossingEvent *ev = &e->xcrossing;
+    Client *c;
+    Monitor *m;
+    XCrossingEvent *ev = &e->xcrossing;
 
-       if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
-               return;
-       c = wintoclient(ev->window);
-       m = c ? c->mon : wintomon(ev->window);
-       if (m != selmon) {
-               unfocus(selmon->sel, 1);
-               selmon = m;
-       } else if (!c || c == selmon->sel)
-               return;
-       focus(c);
+    if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
+        return;
+    c = wintoclient(ev->window);
+    m = c ? c->mon : wintomon(ev->window);
+    if (m != selmon) {
+        unfocus(selmon->sel, 1);
+        selmon = m;
+    } else if (!c || c == selmon->sel)
+        return;
+    focus(c);
 }
 
 void
 expose(XEvent *e)
 {
-       Monitor *m;
-       XExposeEvent *ev = &e->xexpose;
+    Monitor *m;
+    XExposeEvent *ev = &e->xexpose;
 
-       if (ev->count == 0 && (m = wintomon(ev->window)))
-               drawbar(m);
+    if (ev->count == 0 && (m = wintomon(ev->window)))
+        drawbar(m);
 }
 
 void
 focus(Client *c)
 {
-       if (!c || !ISVISIBLE(c))
-               for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
-       /* was if (selmon->sel) */
-       if (selmon->sel && selmon->sel != c)
-               unfocus(selmon->sel, 0);
-       if (c) {
-               if (c->mon != selmon)
-                       selmon = c->mon;
-               if (c->isurgent)
-                       clearurgent(c);
-               detachstack(c);
-               attachstack(c);
-               grabbuttons(c, 1);
-               XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
-               setfocus(c);
-       } else {
-               XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
-               XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
-       }
-       selmon->sel = c;
-       drawbars();
+    if (!c || !ISVISIBLE(c))
+        for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
+    /* was if (selmon->sel) */
+    if (selmon->sel && selmon->sel != c)
+        unfocus(selmon->sel, 0);
+    if (c) {
+        if (c->mon != selmon)
+            selmon = c->mon;
+        if (c->isurgent)
+            clearurgent(c);
+        detachstack(c);
+        attachstack(c);
+        grabbuttons(c, 1);
+        XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
+        setfocus(c);
+    } else {
+        XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+        XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+    }
+    selmon->sel = c;
+    drawbars();
 }
 
 /* there are some broken focus acquiring clients */
 void
 focusin(XEvent *e)
 {
-       XFocusChangeEvent *ev = &e->xfocus;
+    XFocusChangeEvent *ev = &e->xfocus;
 
-       if (selmon->sel && ev->window != selmon->sel->win)
-               setfocus(selmon->sel);
+    if (selmon->sel && ev->window != selmon->sel->win)
+        setfocus(selmon->sel);
 }
 
 void
 focusmon(const Arg *arg)
 {
-       Monitor *m;
+    Monitor *m;
 
-       if (!mons->next)
-               return;
-       if ((m = dirtomon(arg->i)) == selmon)
-               return;
-       unfocus(selmon->sel, 0); /* s/1/0/ fixes input focus issues
-                                       in gedit and anjuta */
-       selmon = m;
-       focus(NULL);
+    if (!mons->next)
+        return;
+    if ((m = dirtomon(arg->i)) == selmon)
+        return;
+    unfocus(selmon->sel, 0); /* s/1/0/ fixes input focus issues
+                    in gedit and anjuta */
+    selmon = m;
+    focus(NULL);
 }
 
 void
 focusstack(const Arg *arg)
 {
-       Client *c = NULL, *i;
-
-       if (!selmon->sel)
-               return;
-       if (arg->i > 0) {
-               for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
-               if (!c)
-                       for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
-       } else {
-               for (i = selmon->clients; i != selmon->sel; i = i->next)
-                       if (ISVISIBLE(i))
-                               c = i;
-               if (!c)
-                       for (; i; i = i->next)
-                               if (ISVISIBLE(i))
-                                       c = i;
-       }
-       if (c) {
-               focus(c);
-               restack(selmon);
-       }
+    Client *c = NULL, *i;
+
+    if (!selmon->sel)
+        return;
+    if (arg->i > 0) {
+        for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
+        if (!c)
+            for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
+    } else {
+        for (i = selmon->clients; i != selmon->sel; i = i->next)
+            if (ISVISIBLE(i))
+                c = i;
+        if (!c)
+            for (; i; i = i->next)
+                if (ISVISIBLE(i))
+                    c = i;
+    }
+    if (c) {
+        focus(c);
+        restack(selmon);
+    }
 }
 
 Atom
 getatomprop(Client *c, Atom prop)
 {
-       int di;
-       unsigned long dl;
-       unsigned char *p = NULL;
-       Atom da, atom = None;
+    int di;
+    unsigned long dl;
+    unsigned char *p = NULL;
+    Atom da, atom = None;
 
-       if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM,
-                             &da, &di, &dl, &dl, &p) == Success && p) {
-               atom = *(Atom *)p;
-               XFree(p);
-       }
-       return atom;
+    if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM,
+                          &da, &di, &dl, &dl, &p) == Success && p) {
+        atom = *(Atom *)p;
+        XFree(p);
+    }
+    return atom;
 }
 
 int
 getrootptr(int *x, int *y)
 {
-       int di;
-       unsigned int dui;
-       Window dummy;
+    int di;
+    unsigned int dui;
+    Window dummy;
 
-       return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
+    return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
 }
 
 long
 getstate(Window w)
 {
-       int format;
-       long result = -1;
-       unsigned char *p = NULL;
-       unsigned long n, extra;
-       Atom real;
+    int format;
+    long result = -1;
+    unsigned char *p = NULL;
+    unsigned long n, extra;
+    Atom real;
 
-       if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
-                             &real, &format, &n, &extra, (unsigned char **)&p) != Success)
-               return -1;
-       if (n != 0)
-               result = *p;
-       XFree(p);
-       return result;
+    if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
+                          &real, &format, &n, &extra, (unsigned char **)&p) != Success)
+        return -1;
+    if (n != 0)
+        result = *p;
+    XFree(p);
+    return result;
 }
 
 int
 gettextprop(Window w, Atom atom, char *text, unsigned int size)
 {
-       char **list = NULL;
-       int n;
-       XTextProperty name;
-
-       if (!text || size == 0)
-               return 0;
-       text[0] = '\0';
-       XGetTextProperty(dpy, w, &name, atom);
-       if (!name.nitems)
-               return 0;
-       if (name.encoding == XA_STRING)
-               strncpy(text, (char *)name.value, size - 1);
-       else {
-               if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
-                       strncpy(text, *list, size - 1);
-                       XFreeStringList(list);
-               }
-       }
-       text[size - 1] = '\0';
-       XFree(name.value);
-       return 1;
+    char **list = NULL;
+    int n;
+    XTextProperty name;
+
+    if (!text || size == 0)
+        return 0;
+    text[0] = '\0';
+    XGetTextProperty(dpy, w, &name, atom);
+    if (!name.nitems)
+        return 0;
+    if (name.encoding == XA_STRING)
+        strncpy(text, (char *)name.value, size - 1);
+    else {
+        if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
+            strncpy(text, *list, size - 1);
+            XFreeStringList(list);
+        }
+    }
+    text[size - 1] = '\0';
+    XFree(name.value);
+    return 1;
 }
 
 void
 grabbuttons(Client *c, int focused)
 {
-       updatenumlockmask();
-       {
-               unsigned int i, j;
-               unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
-               XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
-               if (focused) {
-                       for (i = 0; i < LENGTH(buttons); i++)
-                               if (buttons[i].click == ClkClientWin)
-                                       for (j = 0; j < LENGTH(modifiers); j++)
-                                               XGrabButton(dpy, buttons[i].button,
-                                                           buttons[i].mask | modifiers[j],
-                                                           c->win, False, BUTTONMASK,
-                                                           GrabModeAsync, GrabModeSync, None, None);
-               } else
-                       XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
-                                   BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
-       }
+    updatenumlockmask();
+    {
+        unsigned int i, j;
+        unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
+        XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
+        if (focused) {
+            for (i = 0; i < LENGTH(buttons); i++)
+                if (buttons[i].click == ClkClientWin)
+                    for (j = 0; j < LENGTH(modifiers); j++)
+                        XGrabButton(dpy, buttons[i].button,
+                                    buttons[i].mask | modifiers[j],
+                                    c->win, False, BUTTONMASK,
+                                    GrabModeAsync, GrabModeSync, None, None);
+        } else
+            XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
+                        BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
+    }
 }
 
 void
 grabkeys(void)
 {
-       updatenumlockmask();
-       {
-               unsigned int i, j;
-               unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
-               KeyCode code;
+    updatenumlockmask();
+    {
+        unsigned int i, j;
+        unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
+        KeyCode code;
 
-               XUngrabKey(dpy, AnyKey, AnyModifier, root);
-               for (i = 0; i < LENGTH(keys); i++)
-                       if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
-                               for (j = 0; j < LENGTH(modifiers); j++)
-                                       XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
-                                                True, GrabModeAsync, GrabModeAsync);
-       }
+        XUngrabKey(dpy, AnyKey, AnyModifier, root);
+        for (i = 0; i < LENGTH(keys); i++)
+            if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
+                for (j = 0; j < LENGTH(modifiers); j++)
+                    XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
+                         True, GrabModeAsync, GrabModeAsync);
+    }
 }
 
 void
 incnmaster(const Arg *arg)
 {
-       selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0);
-       arrange(selmon);
+    selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0);
+    arrange(selmon);
 }
 
 #ifdef XINERAMA
 static int
 isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
 {
-       while (n--)
-               if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
-               && unique[n].width == info->width && unique[n].height == info->height)
-                       return 0;
-       return 1;
+    while (n--)
+        if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
+        && unique[n].width == info->width && unique[n].height == info->height)
+            return 0;
+    return 1;
 }
 #endif /* XINERAMA */
 
 void
 keypress(XEvent *e)
 {
-       unsigned int i;
-       KeySym keysym;
-       XKeyEvent *ev;
+    unsigned int i;
+    KeySym keysym;
+    XKeyEvent *ev;
 
-       ev = &e->xkey;
-       keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
-       for (i = 0; i < LENGTH(keys); i++)
-               if (keysym == keys[i].keysym
-               && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
-               && keys[i].func)
-                       keys[i].func(&(keys[i].arg));
+    ev = &e->xkey;
+    keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
+    for (i = 0; i < LENGTH(keys); i++)
+        if (keysym == keys[i].keysym
+        && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
+        && keys[i].func)
+            keys[i].func(&(keys[i].arg));
 }
 
 void
 killclient(const Arg *arg)
 {
-       if (!selmon->sel)
-               return;
-       if (!sendevent(selmon->sel, wmatom[WMDelete])) {
-               XGrabServer(dpy);
-               XSetErrorHandler(xerrordummy);
-               XSetCloseDownMode(dpy, DestroyAll);
-               XKillClient(dpy, selmon->sel->win);
-               XSync(dpy, False);
-               XSetErrorHandler(xerror);
-               XUngrabServer(dpy);
-       }
+    if (!selmon->sel)
+        return;
+    if (!sendevent(selmon->sel, wmatom[WMDelete])) {
+        XGrabServer(dpy);
+        XSetErrorHandler(xerrordummy);
+        XSetCloseDownMode(dpy, DestroyAll);
+        XKillClient(dpy, selmon->sel->win);
+        XSync(dpy, False);
+        XSetErrorHandler(xerror);
+        XUngrabServer(dpy);
+    }
 }
 
 void
 manage(Window w, XWindowAttributes *wa)
 {
-       Client *c, *t = NULL;
-       Window trans = None;
-       XWindowChanges wc;
-
-       c = ecalloc(1, sizeof(Client));
-       c->win = w;
-       updatetitle(c);
-       if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
-               c->mon = t->mon;
-               c->tags = t->tags;
-       } else {
-               c->mon = selmon;
-               applyrules(c);
-       }
-       /* geometry */
-       c->x = c->oldx = wa->x;
-       c->y = c->oldy = wa->y;
-       c->w = c->oldw = wa->width;
-       c->h = c->oldh = wa->height;
-       c->oldbw = wa->border_width;
-
-       if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
-               c->x = c->mon->mx + c->mon->mw - WIDTH(c);
-       if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
-               c->y = c->mon->my + c->mon->mh - HEIGHT(c);
-       c->x = MAX(c->x, c->mon->mx);
-       /* only fix client y-offset, if the client center might cover the bar */
-       c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
-                  && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
-       c->bw = borderpx;
-
-       wc.border_width = c->bw;
-       XConfigureWindow(dpy, w, CWBorderWidth, &wc);
-       XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
-       configure(c); /* propagates border_width, if size doesn't change */
-       updatewindowtype(c);
-       updatesizehints(c);
-       updatewmhints(c);
-       XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
-       grabbuttons(c, 0);
-       if (!c->isfloating)
-               c->isfloating = c->oldstate = trans != None || c->isfixed;
-       if (c->isfloating)
-               XRaiseWindow(dpy, c->win);
-       attachabove(c);
-       attachstack(c);
-       XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
-                       (unsigned char *) &(c->win), 1);
-       XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
-       setclientstate(c, NormalState);
-       if (c->mon == selmon)
-               unfocus(selmon->sel, 0);
-       c->mon->sel = c;
-       arrange(c->mon);
-       XMapWindow(dpy, c->win);
-       focus(NULL);
+    Client *c, *t = NULL;
+    Window trans = None;
+    XWindowChanges wc;
+
+    c = ecalloc(1, sizeof(Client));
+    c->win = w;
+    updatetitle(c);
+    if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
+        c->mon = t->mon;
+        c->tags = t->tags;
+    } else {
+        c->mon = selmon;
+        applyrules(c);
+    }
+    /* geometry */
+    c->x = c->oldx = wa->x;
+    c->y = c->oldy = wa->y;
+    c->w = c->oldw = wa->width;
+    c->h = c->oldh = wa->height;
+    c->oldbw = wa->border_width;
+
+    if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
+        c->x = c->mon->mx + c->mon->mw - WIDTH(c);
+    if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
+        c->y = c->mon->my + c->mon->mh - HEIGHT(c);
+    c->x = MAX(c->x, c->mon->mx);
+    /* only fix client y-offset, if the client center might cover the bar */
+    c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
+               && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
+    c->bw = borderpx;
+
+    wc.border_width = c->bw;
+    XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+    XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
+    configure(c); /* propagates border_width, if size doesn't change */
+    updatewindowtype(c);
+    updatesizehints(c);
+    updatewmhints(c);
+    XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
+    grabbuttons(c, 0);
+    if (!c->isfloating)
+        c->isfloating = c->oldstate = trans != None || c->isfixed;
+    if (c->isfloating)
+        XRaiseWindow(dpy, c->win);
+    attach(c);
+    attachstack(c);
+    XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
+                    (unsigned char *) &(c->win), 1);
+    XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
+    setclientstate(c, NormalState);
+    if (c->mon == selmon)
+        unfocus(selmon->sel, 0);
+    c->mon->sel = c;
+    arrange(c->mon);
+    XMapWindow(dpy, c->win);
+    focus(NULL);
 }
 
 void
 mappingnotify(XEvent *e)
 {
-       XMappingEvent *ev = &e->xmapping;
+    XMappingEvent *ev = &e->xmapping;
 
-       XRefreshKeyboardMapping(ev);
-       if (ev->request == MappingKeyboard)
-               grabkeys();
+    XRefreshKeyboardMapping(ev);
+    if (ev->request == MappingKeyboard)
+        grabkeys();
 }
 
 void
 maprequest(XEvent *e)
 {
-       static XWindowAttributes wa;
-       XMapRequestEvent *ev = &e->xmaprequest;
+    static XWindowAttributes wa;
+    XMapRequestEvent *ev = &e->xmaprequest;
 
-       if (!XGetWindowAttributes(dpy, ev->window, &wa))
-               return;
-       if (wa.override_redirect)
-               return;
-       if (!wintoclient(ev->window))
-               manage(ev->window, &wa);
+    if (!XGetWindowAttributes(dpy, ev->window, &wa))
+        return;
+    if (wa.override_redirect)
+        return;
+    if (!wintoclient(ev->window))
+        manage(ev->window, &wa);
 }
 
 void
 monocle(Monitor *m)
 {
-       unsigned int n = 0;
-       Client *c;
+    unsigned int n = 0;
+    Client *c;
 
-       for (c = m->clients; c; c = c->next)
-               if (ISVISIBLE(c))
-                       n++;
-       if (n > 0) /* override layout symbol */
-               snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
-       for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
-               resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
+    for (c = m->clients; c; c = c->next)
+        if (ISVISIBLE(c))
+            n++;
+    if (n > 0) /* override layout symbol */
+        snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
+    for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
+        resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
 }
 
 void
 motionnotify(XEvent *e)
 {
-       static Monitor *mon = NULL;
-       Monitor *m;
-       XMotionEvent *ev = &e->xmotion;
+    static Monitor *mon = NULL;
+    Monitor *m;
+    XMotionEvent *ev = &e->xmotion;
 
-       if (ev->window != root)
-               return;
-       if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
-               unfocus(selmon->sel, 1);
-               selmon = m;
-               focus(NULL);
-       }
-       mon = m;
+    if (ev->window != root)
+        return;
+    if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+        unfocus(selmon->sel, 1);
+        selmon = m;
+        focus(NULL);
+    }
+    mon = m;
 }
 
 void
 movemouse(const Arg *arg)
 {
-       int x, y, ocx, ocy, nx, ny;
-       Client *c;
-       Monitor *m;
-       XEvent ev;
-       Time lasttime = 0;
-
-       if (!(c = selmon->sel))
-               return;
-       if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
-               return;
-       restack(selmon);
-       ocx = c->x;
-       ocy = c->y;
-       if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
-       None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess)
-               return;
-       if (!getrootptr(&x, &y))
-               return;
-       do {
-               XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
-               switch(ev.type) {
-               case ConfigureRequest:
-               case Expose:
-               case MapRequest:
-                       handler[ev.type](&ev);
-                       break;
-               case MotionNotify:
-                       if ((ev.xmotion.time - lasttime) <= (1000 / 60))
-                               continue;
-                       lasttime = ev.xmotion.time;
-
-                       nx = ocx + (ev.xmotion.x - x);
-                       ny = ocy + (ev.xmotion.y - y);
-                       if (nx >= selmon->wx && nx <= selmon->wx + selmon->ww
-                       && ny >= selmon->wy && ny <= selmon->wy + selmon->wh) {
-                               if (abs(selmon->wx - nx) < snap)
-                                       nx = selmon->wx;
-                               else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
-                                       nx = selmon->wx + selmon->ww - WIDTH(c);
-                               if (abs(selmon->wy - ny) < snap)
-                                       ny = selmon->wy;
-                               else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
-                                       ny = selmon->wy + selmon->wh - HEIGHT(c);
-                               if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
-                               && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
-                                       togglefloating(NULL);
-                       }
-                       if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
-                               resize(c, nx, ny, c->w, c->h, 1);
-                       break;
-               }
-       } while (ev.type != ButtonRelease);
-       XUngrabPointer(dpy, CurrentTime);
-       if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
-               sendmon(c, m);
-               selmon = m;
-               focus(NULL);
-       }
+    int x, y, ocx, ocy, nx, ny;
+    Client *c;
+    Monitor *m;
+    XEvent ev;
+    Time lasttime = 0;
+
+    if (!(c = selmon->sel))
+        return;
+    if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
+        return;
+    restack(selmon);
+    ocx = c->x;
+    ocy = c->y;
+    if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
+    None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess)
+        return;
+    if (!getrootptr(&x, &y))
+        return;
+    do {
+        XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
+        switch(ev.type) {
+        case ConfigureRequest:
+        case Expose:
+        case MapRequest:
+            handler[ev.type](&ev);
+            break;
+        case MotionNotify:
+            if ((ev.xmotion.time - lasttime) <= (1000 / 60))
+                continue;
+            lasttime = ev.xmotion.time;
+
+            nx = ocx + (ev.xmotion.x - x);
+            ny = ocy + (ev.xmotion.y - y);
+            if (nx >= selmon->wx && nx <= selmon->wx + selmon->ww
+            && ny >= selmon->wy && ny <= selmon->wy + selmon->wh) {
+                if (abs(selmon->wx - nx) < snap)
+                    nx = selmon->wx;
+                else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
+                    nx = selmon->wx + selmon->ww - WIDTH(c);
+                if (abs(selmon->wy - ny) < snap)
+                    ny = selmon->wy;
+                else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
+                    ny = selmon->wy + selmon->wh - HEIGHT(c);
+                if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
+                && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
+                    togglefloating(NULL);
+            }
+            if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+                resize(c, nx, ny, c->w, c->h, 1);
+            break;
+        }
+    } while (ev.type != ButtonRelease);
+    XUngrabPointer(dpy, CurrentTime);
+    if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
+        sendmon(c, m);
+        selmon = m;
+        focus(NULL);
+    }
 }
 
 Client *
 nexttiled(Client *c)
 {
-       for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
-       return c;
+    for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
+    return c;
 }
 
 void
 pop(Client *c)
 {
-       detach(c);
-       attach(c);
-       focus(c);
-       arrange(c->mon);
+    detach(c);
+    attach(c);
+    focus(c);
+    arrange(c->mon);
 }
 
 void
 propertynotify(XEvent *e)
 {
-       Client *c;
-       Window trans;
-       XPropertyEvent *ev = &e->xproperty;
-
-       if ((ev->window == root) && (ev->atom == XA_WM_NAME))
-               updatestatus();
-       else if (ev->state == PropertyDelete)
-               return; /* ignore */
-       else if ((c = wintoclient(ev->window))) {
-               switch(ev->atom) {
-               default: break;
-               case XA_WM_TRANSIENT_FOR:
-                       if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
-                          (c->isfloating = (wintoclient(trans)) != NULL))
-                               arrange(c->mon);
-                       break;
-               case XA_WM_NORMAL_HINTS:
-                       updatesizehints(c);
-                       break;
-               case XA_WM_HINTS:
-                       updatewmhints(c);
-                       drawbars();
-                       break;
-               }
-               if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
-                       updatetitle(c);
-                       if (c == c->mon->sel)
-                               drawbar(c->mon);
-               }
-               if (ev->atom == netatom[NetWMWindowType])
-                       updatewindowtype(c);
-       }
+    Client *c;
+    Window trans;
+    XPropertyEvent *ev = &e->xproperty;
+
+    if ((ev->window == root) && (ev->atom == XA_WM_NAME))
+        updatestatus();
+    else if (ev->state == PropertyDelete)
+        return; /* ignore */
+    else if ((c = wintoclient(ev->window))) {
+        switch(ev->atom) {
+        default: break;
+        case XA_WM_TRANSIENT_FOR:
+            if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
+               (c->isfloating = (wintoclient(trans)) != NULL))
+                arrange(c->mon);
+            break;
+        case XA_WM_NORMAL_HINTS:
+            updatesizehints(c);
+            break;
+        case XA_WM_HINTS:
+            updatewmhints(c);
+            drawbars();
+            break;
+        }
+        if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
+            updatetitle(c);
+            if (c == c->mon->sel)
+                drawbar(c->mon);
+        }
+        if (ev->atom == netatom[NetWMWindowType])
+            updatewindowtype(c);
+    }
 }
 
 void
 quit(const Arg *arg)
 {
-       running = 0;
+    running = 0;
 }
 
 Monitor *
 recttomon(int x, int y, int w, int h)
 {
-       Monitor *m, *r = selmon;
-       int a, area = 0;
+    Monitor *m, *r = selmon;
+    int a, area = 0;
 
-       for (m = mons; m; m = m->next)
-               if ((a = INTERSECT(x, y, w, h, m)) > area) {
-                       area = a;
-                       r = m;
-               }
-       return r;
+    for (m = mons; m; m = m->next)
+        if ((a = INTERSECT(x, y, w, h, m)) > area) {
+            area = a;
+            r = m;
+        }
+    return r;
 }
 
 void
 resize(Client *c, int x, int y, int w, int h, int interact)
 {
-       if (applysizehints(c, &x, &y, &w, &h, interact))
-               resizeclient(c, x, y, w, h);
+    if (applysizehints(c, &x, &y, &w, &h, interact))
+        resizeclient(c, x, y, w, h);
 }
 
 void
 resizeclient(Client *c, int x, int y, int w, int h)
 {
-       XWindowChanges wc;
+    XWindowChanges wc;
 
-       c->oldx = c->x; c->x = wc.x = x;
-       c->oldy = c->y; c->y = wc.y = y;
-       c->oldw = c->w; c->w = wc.width = w;
-       c->oldh = c->h; c->h = wc.height = h;
-       wc.border_width = c->bw;
-       XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
-       configure(c);
-       XSync(dpy, False);
+    c->oldx = c->x; c->x = wc.x = x;
+    c->oldy = c->y; c->y = wc.y = y;
+    c->oldw = c->w; c->w = wc.width = w;
+    c->oldh = c->h; c->h = wc.height = h;
+    wc.border_width = c->bw;
+    XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+    configure(c);
+    XSync(dpy, False);
 }
 
 void
 resizemouse(const Arg *arg)
 {
-       int ocx, ocy, nw, nh;
-       Client *c;
-       Monitor *m;
-       XEvent ev;
-       Time lasttime = 0;
-
-       if (!(c = selmon->sel))
-               return;
-       if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
-               return;
-       restack(selmon);
-       ocx = c->x;
-       ocy = c->y;
-       if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
-                       None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess)
-               return;
-       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
-       do {
-               XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
-               switch(ev.type) {
-               case ConfigureRequest:
-               case Expose:
-               case MapRequest:
-                       handler[ev.type](&ev);
-                       break;
-               case MotionNotify:
-                       if ((ev.xmotion.time - lasttime) <= (1000 / 60))
-                               continue;
-                       lasttime = ev.xmotion.time;
-
-                       nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
-                       nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
-                       if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
-                       && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
-                       {
-                               if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
-                               && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
-                                       togglefloating(NULL);
-                       }
-                       if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
-                               resize(c, c->x, c->y, nw, nh, 1);
-                       break;
-               }
-       } while (ev.type != ButtonRelease);
-       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
-       XUngrabPointer(dpy, CurrentTime);
-       while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
-       if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
-               sendmon(c, m);
-               selmon = m;
-               focus(NULL);
-       }
+    int ocx, ocy, nw, nh;
+    Client *c;
+    Monitor *m;
+    XEvent ev;
+    Time lasttime = 0;
+
+    if (!(c = selmon->sel))
+        return;
+    if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
+        return;
+    restack(selmon);
+    ocx = c->x;
+    ocy = c->y;
+    if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
+                    None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess)
+        return;
+    XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
+    do {
+        XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
+        switch(ev.type) {
+        case ConfigureRequest:
+        case Expose:
+        case MapRequest:
+            handler[ev.type](&ev);
+            break;
+        case MotionNotify:
+            if ((ev.xmotion.time - lasttime) <= (1000 / 60))
+                continue;
+            lasttime = ev.xmotion.time;
+
+            nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
+            nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
+            if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
+            && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
+            {
+                if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
+                && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
+                    togglefloating(NULL);
+            }
+            if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+                resize(c, c->x, c->y, nw, nh, 1);
+            break;
+        }
+    } while (ev.type != ButtonRelease);
+    XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
+    XUngrabPointer(dpy, CurrentTime);
+    while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+    if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
+        sendmon(c, m);
+        selmon = m;
+        focus(NULL);
+    }
 }
 
 void
 restack(Monitor *m)
 {
-       Client *c;
-       XEvent ev;
-       XWindowChanges wc;
-
-       drawbar(m);
-       if (!m->sel)
-               return;
-       if (m->sel->isfloating || !m->lt[m->sellt]->arrange)
-               XRaiseWindow(dpy, m->sel->win);
-       if (m->lt[m->sellt]->arrange) {
-               wc.stack_mode = Below;
-               wc.sibling = m->barwin;
-               for (c = m->stack; c; c = c->snext)
-                       if (!c->isfloating && ISVISIBLE(c)) {
-                               XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
-                               wc.sibling = c->win;
-                       }
-       }
-       XSync(dpy, False);
-       while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+    Client *c;
+    XEvent ev;
+    XWindowChanges wc;
+
+    drawbar(m);
+    if (!m->sel)
+        return;
+    if (m->sel->isfloating || !m->lt[m->sellt]->arrange)
+        XRaiseWindow(dpy, m->sel->win);
+    if (m->lt[m->sellt]->arrange) {
+        wc.stack_mode = Below;
+        wc.sibling = m->barwin;
+        for (c = m->stack; c; c = c->snext)
+            if (!c->isfloating && ISVISIBLE(c)) {
+                XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
+                wc.sibling = c->win;
+            }
+    }
+    XSync(dpy, False);
+    while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
 }
 
 void
 run(void)
 {
-       XEvent ev;
-       /* main event loop */
-       XSync(dpy, False);
-       while (running && !XNextEvent(dpy, &ev))
-               if (handler[ev.type])
-                       handler[ev.type](&ev); /* call handler */
+    XEvent ev;
+    /* main event loop */
+    XSync(dpy, False);
+    while (running && !XNextEvent(dpy, &ev))
+        if (handler[ev.type])
+            handler[ev.type](&ev); /* call handler */
 }
 
 void
 scan(void)
 {
-       unsigned int i, num;
-       Window d1, d2, *wins = NULL;
-       XWindowAttributes wa;
-
-       if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
-               for (i = 0; i < num; i++) {
-                       if (!XGetWindowAttributes(dpy, wins[i], &wa)
-                       || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
-                               continue;
-                       if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
-                               manage(wins[i], &wa);
-               }
-               for (i = 0; i < num; i++) { /* now the transients */
-                       if (!XGetWindowAttributes(dpy, wins[i], &wa))
-                               continue;
-                       if (XGetTransientForHint(dpy, wins[i], &d1)
-                       && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
-                               manage(wins[i], &wa);
-               }
-               if (wins)
-                       XFree(wins);
-       }
+    unsigned int i, num;
+    Window d1, d2, *wins = NULL;
+    XWindowAttributes wa;
+
+    if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
+        for (i = 0; i < num; i++) {
+            if (!XGetWindowAttributes(dpy, wins[i], &wa)
+            || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
+                continue;
+            if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
+                manage(wins[i], &wa);
+        }
+        for (i = 0; i < num; i++) { /* now the transients */
+            if (!XGetWindowAttributes(dpy, wins[i], &wa))
+                continue;
+            if (XGetTransientForHint(dpy, wins[i], &d1)
+            && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
+                manage(wins[i], &wa);
+        }
+        if (wins)
+            XFree(wins);
+    }
 }
 
 void
 sendmon(Client *c, Monitor *m)
 {
-       if (c->mon == m)
-               return;
-       unfocus(c, 1);
-       detach(c);
-       detachstack(c);
-       c->mon = m;
-       c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
-       attachabove(c);
-       attachstack(c);
-       focus(NULL);
-       arrange(NULL);
+    if (c->mon == m)
+        return;
+    unfocus(c, 1);
+    detach(c);
+    detachstack(c);
+    c->mon = m;
+    c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
+    attach(c);
+    attachstack(c);
+    focus(NULL);
+    arrange(NULL);
 }
 
 void
 setclientstate(Client *c, long state)
 {
-       long data[] = { state, None };
+    long data[] = { state, None };
 
-       XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
-                       PropModeReplace, (unsigned char *)data, 2);
+    XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
+            PropModeReplace, (unsigned char *)data, 2);
 }
 
 int
 sendevent(Client *c, Atom proto)
 {
-       int n;
-       Atom *protocols;
-       int exists = 0;
-       XEvent ev;
-
-       if (XGetWMProtocols(dpy, c->win, &protocols, &n)) {
-               while (!exists && n--)
-                       exists = protocols[n] == proto;
-               XFree(protocols);
-       }
-       if (exists) {
-               ev.type = ClientMessage;
-               ev.xclient.window = c->win;
-               ev.xclient.message_type = wmatom[WMProtocols];
-               ev.xclient.format = 32;
-               ev.xclient.data.l[0] = proto;
-               ev.xclient.data.l[1] = CurrentTime;
-               XSendEvent(dpy, c->win, False, NoEventMask, &ev);
-       }
-       return exists;
+    int n;
+    Atom *protocols;
+    int exists = 0;
+    XEvent ev;
+
+    if (XGetWMProtocols(dpy, c->win, &protocols, &n)) {
+        while (!exists && n--)
+            exists = protocols[n] == proto;
+        XFree(protocols);
+    }
+    if (exists) {
+        ev.type = ClientMessage;
+        ev.xclient.window = c->win;
+        ev.xclient.message_type = wmatom[WMProtocols];
+        ev.xclient.format = 32;
+        ev.xclient.data.l[0] = proto;
+        ev.xclient.data.l[1] = CurrentTime;
+        XSendEvent(dpy, c->win, False, NoEventMask, &ev);
+    }
+    return exists;
 }
 
 void
 setfocus(Client *c)
 {
-       if (!c->neverfocus) {
-               XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
-               XChangeProperty(dpy, root, netatom[NetActiveWindow],
-                               XA_WINDOW, 32, PropModeReplace,
-                               (unsigned char *) &(c->win), 1);
-       }
-       sendevent(c, wmatom[WMTakeFocus]);
+    if (!c->neverfocus) {
+        XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
+        XChangeProperty(dpy, root, netatom[NetActiveWindow],
+                        XA_WINDOW, 32, PropModeReplace,
+                        (unsigned char *) &(c->win), 1);
+    }
+    sendevent(c, wmatom[WMTakeFocus]);
 }
 
 void
 setfullscreen(Client *c, int fullscreen)
 {
-       if (fullscreen && !c->isfullscreen) {
-               XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
-                               PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
-               c->isfullscreen = 1;
-               c->oldstate = c->isfloating;
-               c->oldbw = c->bw;
-               c->bw = 0;
-               c->isfloating = 1;
-               resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
-               XRaiseWindow(dpy, c->win);
-       } else if (!fullscreen && c->isfullscreen){
-               XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
-                               PropModeReplace, (unsigned char*)0, 0);
-               c->isfullscreen = 0;
-               c->isfloating = c->oldstate;
-               c->bw = c->oldbw;
-               c->x = c->oldx;
-               c->y = c->oldy;
-               c->w = c->oldw;
-               c->h = c->oldh;
-               resizeclient(c, c->x, c->y, c->w, c->h);
-               arrange(c->mon);
-       }
+    if (fullscreen && !c->isfullscreen) {
+        XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
+                        PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
+        c->isfullscreen = 1;
+        c->oldstate = c->isfloating;
+        c->oldbw = c->bw;
+        c->bw = 0;
+        c->isfloating = 1;
+        resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
+        XRaiseWindow(dpy, c->win);
+    } else if (!fullscreen && c->isfullscreen){
+        XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
+                        PropModeReplace, (unsigned char*)0, 0);
+        c->isfullscreen = 0;
+        c->isfloating = c->oldstate;
+        c->bw = c->oldbw;
+        c->x = c->oldx;
+        c->y = c->oldy;
+        c->w = c->oldw;
+        c->h = c->oldh;
+        resizeclient(c, c->x, c->y, c->w, c->h);
+        arrange(c->mon);
+    }
 }
 
 void
 setlayout(const Arg *arg)
 {
-       if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) {
-               selmon->pertag->sellts[selmon->pertag->curtag] ^= 1;
-               selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
-       }
-       if (arg && arg->v)
-               selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v;
-       selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
-       strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
-       if (selmon->sel)
-               arrange(selmon);
-       else
-               drawbar(selmon);
+    if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) {
+        selmon->pertag->sellts[selmon->pertag->curtag] ^= 1;
+        selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
+    }
+    if (arg && arg->v)
+        selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v;
+    selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
+    strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+    if (selmon->sel)
+        arrange(selmon);
+    else
+        drawbar(selmon);
 }
 
 /* arg > 1.0 will set mfact absolutly */
 void
 setmfact(const Arg *arg)
 {
-       float f;
+    float f;
 
-       if (!arg || !selmon->lt[selmon->sellt]->arrange)
-               return;
-       f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
-       if (f < 0.1 || f > 0.9)
-               return;
-       selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
-       arrange(selmon);
+    if (!arg || !selmon->lt[selmon->sellt]->arrange)
+        return;
+    f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+    if (f < 0.1 || f > 0.9)
+        return;
+    selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
+    arrange(selmon);
 }
 
 void
 setup(void)
 {
-       XSetWindowAttributes wa;
-
-       /* clean up any zombies immediately */
-       sigchld(0);
-
-       /* init screen */
-       screen = DefaultScreen(dpy);
-       sw = DisplayWidth(dpy, screen);
-       sh = DisplayHeight(dpy, screen);
-       root = RootWindow(dpy, screen);
-       drw = drw_create(dpy, screen, root, sw, sh);
-       drw_load_fonts(drw, fonts, LENGTH(fonts));
-       if (!drw->fontcount)
-               die("no fonts could be loaded.\n");
-       bh = drw->fonts[0]->h + 2;
-       updategeom();
-       /* init atoms */
-       wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
-       wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
-       wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
-       wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
-       netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
-       netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
-       netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
-       netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
-       netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
-       netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
-       netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
-       netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
-       /* init cursors */
-       cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
-       cursor[CurResize] = drw_cur_create(drw, XC_sizing);
-       cursor[CurMove] = drw_cur_create(drw, XC_fleur);
-       /* init appearance */
-       scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
-       scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
-       scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
-       scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
-       scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
-       scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
-       /* init bars */
-       updatebars();
-       updatestatus();
-       /* EWMH support per view */
-       XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
-                       PropModeReplace, (unsigned char *) netatom, NetLast);
-       XDeleteProperty(dpy, root, netatom[NetClientList]);
-       /* select for events */
-       wa.cursor = cursor[CurNormal]->cursor;
-       wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask|PointerMotionMask
-                       |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
-       XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
-       XSelectInput(dpy, root, wa.event_mask);
-       grabkeys();
-       focus(NULL);
+    XSetWindowAttributes wa;
+
+    /* clean up any zombies immediately */
+    sigchld(0);
+
+    /* init screen */
+    screen = DefaultScreen(dpy);
+    sw = DisplayWidth(dpy, screen);
+    sh = DisplayHeight(dpy, screen);
+    root = RootWindow(dpy, screen);
+    drw = drw_create(dpy, screen, root, sw, sh);
+    drw_load_fonts(drw, fonts, LENGTH(fonts));
+    if (!drw->fontcount)
+        die("no fonts could be loaded.\n");
+    bh = drw->fonts[0]->h + 2;
+    updategeom();
+    /* init atoms */
+    wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
+    wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
+    wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
+    wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
+    netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
+    netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
+    netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
+    netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
+    netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
+    netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
+    netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
+    netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
+    /* init cursors */
+    cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
+    cursor[CurResize] = drw_cur_create(drw, XC_sizing);
+    cursor[CurMove] = drw_cur_create(drw, XC_fleur);
+    /* init appearance */
+    scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
+    scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
+    scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
+    scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
+    scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
+    scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
+    /* init bars */
+    updatebars();
+    updatestatus();
+    /* EWMH support per view */
+    XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
+            PropModeReplace, (unsigned char *) netatom, NetLast);
+    XDeleteProperty(dpy, root, netatom[NetClientList]);
+    /* select for events */
+    wa.cursor = cursor[CurNormal]->cursor;
+    wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask|PointerMotionMask
+                    |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
+    XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
+    XSelectInput(dpy, root, wa.event_mask);
+    grabkeys();
+    focus(NULL);
 }
 
 void
 showhide(Client *c)
 {
-       if (!c)
-               return;
-       if (ISVISIBLE(c)) {
-               /* show clients top down */
-               XMoveWindow(dpy, c->win, c->x, c->y);
-               if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
-                       resize(c, c->x, c->y, c->w, c->h, 0);
-               showhide(c->snext);
-       } else {
-               /* hide clients bottom up */
-               showhide(c->snext);
-               XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y);
-       }
+    if (!c)
+        return;
+    if (ISVISIBLE(c)) {
+        /* show clients top down */
+        XMoveWindow(dpy, c->win, c->x, c->y);
+        if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
+            resize(c, c->x, c->y, c->w, c->h, 0);
+        showhide(c->snext);
+    } else {
+        /* hide clients bottom up */
+        showhide(c->snext);
+        XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y);
+    }
 }
 
 void
 sigchld(int unused)
 {
-       if (signal(SIGCHLD, sigchld) == SIG_ERR)
-               die("can't install SIGCHLD handler:");
-       while (0 < waitpid(-1, NULL, WNOHANG));
+    if (signal(SIGCHLD, sigchld) == SIG_ERR)
+        die("can't install SIGCHLD handler:");
+    while (0 < waitpid(-1, NULL, WNOHANG));
 }
 
 void
 spawn(const Arg *arg)
 {
-       if (arg->v == dmenucmd)
-               dmenumon[0] = '0' + selmon->num;
-       if (fork() == 0) {
-               if (dpy)
-                       close(ConnectionNumber(dpy));
-               setsid();
-               execvp(((char **)arg->v)[0], (char **)arg->v);
-               fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
-               perror(" failed");
-               exit(EXIT_SUCCESS);
-       }
+    if (arg->v == dmenucmd)
+        dmenumon[0] = '0' + selmon->num;
+    if (fork() == 0) {
+        if (dpy)
+            close(ConnectionNumber(dpy));
+        setsid();
+        execvp(((char **)arg->v)[0], (char **)arg->v);
+        fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
+        perror(" failed");
+        exit(EXIT_SUCCESS);
+    }
 }
 
 void
 tag(const Arg *arg)
 {
-       if (selmon->sel && arg->ui & TAGMASK) {
-               selmon->sel->tags = arg->ui & TAGMASK;
-               focus(NULL);
-               arrange(selmon);
-       }
+    if (selmon->sel && arg->ui & TAGMASK) {
+        selmon->sel->tags = arg->ui & TAGMASK;
+        focus(NULL);
+        arrange(selmon);
+    }
 }
 
 void
 tagmon(const Arg *arg)
 {
-       if (!selmon->sel || !mons->next)
-               return;
-       sendmon(selmon->sel, dirtomon(arg->i));
+    if (!selmon->sel || !mons->next)
+        return;
+    sendmon(selmon->sel, dirtomon(arg->i));
 }
 
 void
 tile(Monitor *m)
 {
-       unsigned int i, n, h, mw, my, ty;
-       Client *c;
+    unsigned int i, n, h, mw, my, ty;
+    Client *c;
 
-       for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
-       if (n == 0)
-               return;
+    for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+    if (n == 0)
+        return;
 
-       if (n > m->nmaster)
-               mw = m->nmaster ? m->ww * m->mfact : 0;
-       else
-               mw = m->ww;
-       for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
-               if (i < m->nmaster) {
-                       h = (m->wh - my) / (MIN(n, m->nmaster) - i);
-                       resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
-                       my += HEIGHT(c);
-               } else {
-                       h = (m->wh - ty) / (n - i);
-                       resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
-                       ty += HEIGHT(c);
-               }
+    if (n > m->nmaster)
+        mw = m->nmaster ? m->ww * m->mfact : 0;
+    else
+        mw = m->ww;
+    for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+        if (i < m->nmaster) {
+            h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+            resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
+            my += HEIGHT(c);
+        } else {
+            h = (m->wh - ty) / (n - i);
+            resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
+            ty += HEIGHT(c);
+        }
 }
 
 void
 togglebar(const Arg *arg)
 {
-       selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar;
-       updatebarpos(selmon);
-       XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
-       arrange(selmon);
+    selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar;
+    updatebarpos(selmon);
+    XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
+    arrange(selmon);
 }
 
 void
 togglefloating(const Arg *arg)
 {
-       if (!selmon->sel)
-               return;
-       if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
-               return;
-       selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
-       if (selmon->sel->isfloating)
-               resize(selmon->sel, selmon->sel->x, selmon->sel->y,
-                      selmon->sel->w, selmon->sel->h, 0);
-       arrange(selmon);
+    if (!selmon->sel)
+        return;
+    if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
+        return;
+    selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
+    if (selmon->sel->isfloating)
+        resize(selmon->sel, selmon->sel->x, selmon->sel->y,
+               selmon->sel->w, selmon->sel->h, 0);
+    arrange(selmon);
 }
 
 void
 toggletag(const Arg *arg)
 {
-       unsigned int newtags;
+    unsigned int newtags;
 
-       if (!selmon->sel)
-               return;
-       newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
-       if (newtags) {
-               selmon->sel->tags = newtags;
-               focus(NULL);
-               arrange(selmon);
-       }
+    if (!selmon->sel)
+        return;
+    newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+    if (newtags) {
+        selmon->sel->tags = newtags;
+        focus(NULL);
+        arrange(selmon);
+    }
 }
 
 void
 toggleview(const Arg *arg)
 {
-       unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
-       int i;
-
-       if (newtagset) {
-               if (newtagset == ~0) {
-                       selmon->pertag->prevtag = selmon->pertag->curtag;
-                       selmon->pertag->curtag = 0;
-               }
-               /* test if the user did not select the same tag */
-               if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) {
-                       selmon->pertag->prevtag = selmon->pertag->curtag;
-                       for (i=0; !(newtagset & 1 << i); i++) ;
-                       selmon->pertag->curtag = i + 1;
-               }
-               selmon->tagset[selmon->seltags] = newtagset;
-
-               /* apply settings for this view */
-               selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
-               selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
-               selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
-               selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
-               selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
-               if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
-                       togglebar(NULL);
-               focus(NULL);
-               arrange(selmon);
-       }
+    unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
+    int i;
+
+    if (newtagset) {
+        if (newtagset == ~0) {
+            selmon->pertag->prevtag = selmon->pertag->curtag;
+            selmon->pertag->curtag = 0;
+        }
+        /* test if the user did not select the same tag */
+        if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) {
+            selmon->pertag->prevtag = selmon->pertag->curtag;
+            for (i=0; !(newtagset & 1 << i); i++) ;
+            selmon->pertag->curtag = i + 1;
+        }
+        selmon->tagset[selmon->seltags] = newtagset;
+
+        /* apply settings for this view */
+        selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
+        selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
+        selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
+        selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
+        selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
+        if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
+            togglebar(NULL);
+        focus(NULL);
+        arrange(selmon);
+    }
 }
 
 void
 unfocus(Client *c, int setfocus)
 {
-       if (!c)
-               return;
-       grabbuttons(c, 0);
-       XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
-       if (setfocus) {
-               XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
-               XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
-       }
+    if (!c)
+        return;
+    grabbuttons(c, 0);
+    XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
+    if (setfocus) {
+        XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+        XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+    }
 }
 
 void
 unmanage(Client *c, int destroyed)
 {
-       Monitor *m = c->mon;
-       XWindowChanges wc;
-
-       /* The server grab construct avoids race conditions. */
-       detach(c);
-       detachstack(c);
-       if (!destroyed) {
-               wc.border_width = c->oldbw;
-               XGrabServer(dpy);
-               XSetErrorHandler(xerrordummy);
-               XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
-               XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
-               setclientstate(c, WithdrawnState);
-               XSync(dpy, False);
-               XSetErrorHandler(xerror);
-               XUngrabServer(dpy);
-       }
-       free(c);
-       focus(NULL);
-       updateclientlist();
-       arrange(m);
+    Monitor *m = c->mon;
+    XWindowChanges wc;
+
+    /* The server grab construct avoids race conditions. */
+    detach(c);
+    detachstack(c);
+    if (!destroyed) {
+        wc.border_width = c->oldbw;
+        XGrabServer(dpy);
+        XSetErrorHandler(xerrordummy);
+        XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
+        XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
+        setclientstate(c, WithdrawnState);
+        XSync(dpy, False);
+        XSetErrorHandler(xerror);
+        XUngrabServer(dpy);
+    }
+    free(c);
+    focus(NULL);
+    updateclientlist();
+    arrange(m);
 }
 
 void
 unmapnotify(XEvent *e)
 {
-       Client *c;
-       XUnmapEvent *ev = &e->xunmap;
+    Client *c;
+    XUnmapEvent *ev = &e->xunmap;
 
-       if ((c = wintoclient(ev->window))) {
-               if (ev->send_event)
-                       setclientstate(c, WithdrawnState);
-               else
-                       unmanage(c, 0);
-       }
+    if ((c = wintoclient(ev->window))) {
+        if (ev->send_event)
+            setclientstate(c, WithdrawnState);
+        else
+            unmanage(c, 0);
+    }
 }
 
 void
 updatebars(void)
 {
-       Monitor *m;
-       XSetWindowAttributes wa = {
-               .override_redirect = True,
-               .background_pixmap = ParentRelative,
-               .event_mask = ButtonPressMask|ExposureMask
-       };
-       for (m = mons; m; m = m->next) {
-               if (m->barwin)
-                       continue;
-               m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
-                                         CopyFromParent, DefaultVisual(dpy, screen),
-                                         CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
-               XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
-               XMapRaised(dpy, m->barwin);
-       }
+    Monitor *m;
+    XSetWindowAttributes wa = {
+        .override_redirect = True,
+        .background_pixmap = ParentRelative,
+        .event_mask = ButtonPressMask|ExposureMask
+    };
+    for (m = mons; m; m = m->next) {
+        if (m->barwin)
+            continue;
+        m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen),
+                                  CopyFromParent, DefaultVisual(dpy, screen),
+                                  CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
+        XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
+        XMapRaised(dpy, m->barwin);
+    }
 }
 
 void
 updatebarpos(Monitor *m)
 {
-       m->wy = m->my;
-       m->wh = m->mh;
-       if (m->showbar) {
-               m->wh -= bh;
-               m->by = m->topbar ? m->wy : m->wy + m->wh;
-               m->wy = m->topbar ? m->wy + bh : m->wy;
-       } else
-               m->by = -bh;
+    m->wy = m->my;
+    m->wh = m->mh;
+    if (m->showbar) {
+        m->wh -= bh;
+        m->by = m->topbar ? m->wy : m->wy + m->wh;
+        m->wy = m->topbar ? m->wy + bh : m->wy;
+    } else
+        m->by = -bh;
 }
 
 void
 updateclientlist()
 {
-       Client *c;
-       Monitor *m;
+    Client *c;
+    Monitor *m;
 
-       XDeleteProperty(dpy, root, netatom[NetClientList]);
-       for (m = mons; m; m = m->next)
-               for (c = m->clients; c; c = c->next)
-                       XChangeProperty(dpy, root, netatom[NetClientList],
-                                       XA_WINDOW, 32, PropModeAppend,
-                                       (unsigned char *) &(c->win), 1);
+    XDeleteProperty(dpy, root, netatom[NetClientList]);
+    for (m = mons; m; m = m->next)
+        for (c = m->clients; c; c = c->next)
+            XChangeProperty(dpy, root, netatom[NetClientList],
+                            XA_WINDOW, 32, PropModeAppend,
+                            (unsigned char *) &(c->win), 1);
 }
 
 int
 updategeom(void)
 {
-       int dirty = 0;
+    int dirty = 0;
 
 #ifdef XINERAMA
-       if (XineramaIsActive(dpy)) {
-               int i, j, n, nn;
-               Client *c;
-               Monitor *m;
-               XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
-               XineramaScreenInfo *unique = NULL;
-
-               for (n = 0, m = mons; m; m = m->next, n++);
-               /* only consider unique geometries as separate screens */
-               unique = ecalloc(nn, sizeof(XineramaScreenInfo));
-               for (i = 0, j = 0; i < nn; i++)
-                       if (isuniquegeom(unique, j, &info[i]))
-                               memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
-               XFree(info);
-               nn = j;
-               if (n <= nn) {
-                       for (i = 0; i < (nn - n); i++) { /* new monitors available */
-                               for (m = mons; m && m->next; m = m->next);
-                               if (m)
-                                       m->next = createmon();
-                               else
-                                       mons = createmon();
-                       }
-                       for (i = 0, m = mons; i < nn && m; m = m->next, i++)
-                               if (i >= n
-                               || (unique[i].x_org != m->mx || unique[i].y_org != m->my
-                                   || unique[i].width != m->mw || unique[i].height != m->mh))
-                               {
-                                       dirty = 1;
-                                       m->num = i;
-                                       m->mx = m->wx = unique[i].x_org;
-                                       m->my = m->wy = unique[i].y_org;
-                                       m->mw = m->ww = unique[i].width;
-                                       m->mh = m->wh = unique[i].height;
-                                       updatebarpos(m);
-                               }
-               } else {
-                       /* less monitors available nn < n */
-                       for (i = nn; i < n; i++) {
-                               for (m = mons; m && m->next; m = m->next);
-                               while (m->clients) {
-                                       dirty = 1;
-                                       c = m->clients;
-                                       m->clients = c->next;
-                                       detachstack(c);
-                                       c->mon = mons;
-                                       attachabove(c);
-                                       attachstack(c);
-                               }
-                               if (m == selmon)
-                                       selmon = mons;
-                               cleanupmon(m);
-                       }
-               }
-               free(unique);
-       } else
+    if (XineramaIsActive(dpy)) {
+        int i, j, n, nn;
+        Client *c;
+        Monitor *m;
+        XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
+        XineramaScreenInfo *unique = NULL;
+
+        for (n = 0, m = mons; m; m = m->next, n++);
+        /* only consider unique geometries as separate screens */
+        unique = ecalloc(nn, sizeof(XineramaScreenInfo));
+        for (i = 0, j = 0; i < nn; i++)
+            if (isuniquegeom(unique, j, &info[i]))
+                memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
+        XFree(info);
+        nn = j;
+        if (n <= nn) {
+            for (i = 0; i < (nn - n); i++) { /* new monitors available */
+                for (m = mons; m && m->next; m = m->next);
+                if (m)
+                    m->next = createmon();
+                else
+                    mons = createmon();
+            }
+            for (i = 0, m = mons; i < nn && m; m = m->next, i++)
+                if (i >= n
+                || (unique[i].x_org != m->mx || unique[i].y_org != m->my
+                    || unique[i].width != m->mw || unique[i].height != m->mh))
+                {
+                    dirty = 1;
+                    m->num = i;
+                    m->mx = m->wx = unique[i].x_org;
+                    m->my = m->wy = unique[i].y_org;
+                    m->mw = m->ww = unique[i].width;
+                    m->mh = m->wh = unique[i].height;
+                    updatebarpos(m);
+                }
+        } else {
+            /* less monitors available nn < n */
+            for (i = nn; i < n; i++) {
+                for (m = mons; m && m->next; m = m->next);
+                while (m->clients) {
+                    dirty = 1;
+                    c = m->clients;
+                    m->clients = c->next;
+                    detachstack(c);
+                    c->mon = mons;
+                    attach(c);
+                    attachstack(c);
+                }
+                if (m == selmon)
+                    selmon = mons;
+                cleanupmon(m);
+            }
+        }
+        free(unique);
+    } else
 #endif /* XINERAMA */
-       /* default monitor setup */
-       {
-               if (!mons)
-                       mons = createmon();
-               if (mons->mw != sw || mons->mh != sh) {
-                       dirty = 1;
-                       mons->mw = mons->ww = sw;
-                       mons->mh = mons->wh = sh;
-                       updatebarpos(mons);
-               }
-       }
-       if (dirty) {
-               selmon = mons;
-               selmon = wintomon(root);
-       }
-       return dirty;
+    /* default monitor setup */
+    {
+        if (!mons)
+            mons = createmon();
+        if (mons->mw != sw || mons->mh != sh) {
+            dirty = 1;
+            mons->mw = mons->ww = sw;
+            mons->mh = mons->wh = sh;
+            updatebarpos(mons);
+        }
+    }
+    if (dirty) {
+        selmon = mons;
+        selmon = wintomon(root);
+    }
+    return dirty;
 }
 
 void
 updatenumlockmask(void)
 {
-       unsigned int i, j;
-       XModifierKeymap *modmap;
+    unsigned int i, j;
+    XModifierKeymap *modmap;
 
-       numlockmask = 0;
-       modmap = XGetModifierMapping(dpy);
-       for (i = 0; i < 8; i++)
-               for (j = 0; j < modmap->max_keypermod; j++)
-                       if (modmap->modifiermap[i * modmap->max_keypermod + j]
-                          == XKeysymToKeycode(dpy, XK_Num_Lock))
-                               numlockmask = (1 << i);
-       XFreeModifiermap(modmap);
+    numlockmask = 0;
+    modmap = XGetModifierMapping(dpy);
+    for (i = 0; i < 8; i++)
+        for (j = 0; j < modmap->max_keypermod; j++)
+            if (modmap->modifiermap[i * modmap->max_keypermod + j]
+               == XKeysymToKeycode(dpy, XK_Num_Lock))
+                numlockmask = (1 << i);
+    XFreeModifiermap(modmap);
 }
 
 void
 updatesizehints(Client *c)
 {
-       long msize;
-       XSizeHints size;
-
-       if (!XGetWMNormalHints(dpy, c->win, &size, &msize))
-               /* size is uninitialized, ensure that size.flags aren't used */
-               size.flags = PSize;
-       if (size.flags & PBaseSize) {
-               c->basew = size.base_width;
-               c->baseh = size.base_height;
-       } else if (size.flags & PMinSize) {
-               c->basew = size.min_width;
-               c->baseh = size.min_height;
-       } else
-               c->basew = c->baseh = 0;
-       if (size.flags & PResizeInc) {
-               c->incw = size.width_inc;
-               c->inch = size.height_inc;
-       } else
-               c->incw = c->inch = 0;
-       if (size.flags & PMaxSize) {
-               c->maxw = size.max_width;
-               c->maxh = size.max_height;
-       } else
-               c->maxw = c->maxh = 0;
-       if (size.flags & PMinSize) {
-               c->minw = size.min_width;
-               c->minh = size.min_height;
-       } else if (size.flags & PBaseSize) {
-               c->minw = size.base_width;
-               c->minh = size.base_height;
-       } else
-               c->minw = c->minh = 0;
-       if (size.flags & PAspect) {
-               c->mina = (float)size.min_aspect.y / size.min_aspect.x;
-               c->maxa = (float)size.max_aspect.x / size.max_aspect.y;
-       } else
-               c->maxa = c->mina = 0.0;
-       c->isfixed = (c->maxw && c->minw && c->maxh && c->minh
-                    && c->maxw == c->minw && c->maxh == c->minh);
+    long msize;
+    XSizeHints size;
+
+    if (!XGetWMNormalHints(dpy, c->win, &size, &msize))
+        /* size is uninitialized, ensure that size.flags aren't used */
+        size.flags = PSize;
+    if (size.flags & PBaseSize) {
+        c->basew = size.base_width;
+        c->baseh = size.base_height;
+    } else if (size.flags & PMinSize) {
+        c->basew = size.min_width;
+        c->baseh = size.min_height;
+    } else
+        c->basew = c->baseh = 0;
+    if (size.flags & PResizeInc) {
+        c->incw = size.width_inc;
+        c->inch = size.height_inc;
+    } else
+        c->incw = c->inch = 0;
+    if (size.flags & PMaxSize) {
+        c->maxw = size.max_width;
+        c->maxh = size.max_height;
+    } else
+        c->maxw = c->maxh = 0;
+    if (size.flags & PMinSize) {
+        c->minw = size.min_width;
+        c->minh = size.min_height;
+    } else if (size.flags & PBaseSize) {
+        c->minw = size.base_width;
+        c->minh = size.base_height;
+    } else
+        c->minw = c->minh = 0;
+    if (size.flags & PAspect) {
+        c->mina = (float)size.min_aspect.y / size.min_aspect.x;
+        c->maxa = (float)size.max_aspect.x / size.max_aspect.y;
+    } else
+        c->maxa = c->mina = 0.0;
+    c->isfixed = (c->maxw && c->minw && c->maxh && c->minh
+                 && c->maxw == c->minw && c->maxh == c->minh);
 }
 
 void
 updatetitle(Client *c)
 {
-       if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
-               gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
-       if (c->name[0] == '\0') /* hack to mark broken clients */
-               strcpy(c->name, broken);
+    if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
+        gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
+    if (c->name[0] == '\0') /* hack to mark broken clients */
+        strcpy(c->name, broken);
 }
 
 void
 updatestatus(void)
 {
-       if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
-               strcpy(stext, "dwm-"VERSION);
-       drawbar(selmon);
+    if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
+        strcpy(stext, "dwm-"VERSION);
+    drawbar(selmon);
 }
 
 void
 updatewindowtype(Client *c)
 {
-       Atom state = getatomprop(c, netatom[NetWMState]);
-       Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
+    Atom state = getatomprop(c, netatom[NetWMState]);
+    Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
 
-       if (state == netatom[NetWMFullscreen])
-               setfullscreen(c, 1);
-       if (wtype == netatom[NetWMWindowTypeDialog])
-               c->isfloating = 1;
+    if (state == netatom[NetWMFullscreen])
+        setfullscreen(c, 1);
+    if (wtype == netatom[NetWMWindowTypeDialog])
+        c->isfloating = 1;
 }
 
 void
 updatewmhints(Client *c)
 {
-       XWMHints *wmh;
+    XWMHints *wmh;
 
-       if ((wmh = XGetWMHints(dpy, c->win))) {
-               if (c == selmon->sel && wmh->flags & XUrgencyHint) {
-                       wmh->flags &= ~XUrgencyHint;
-                       XSetWMHints(dpy, c->win, wmh);
-               } else
-                       c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
-               if (wmh->flags & InputHint)
-                       c->neverfocus = !wmh->input;
-               else
-                       c->neverfocus = 0;
-               XFree(wmh);
-       }
+    if ((wmh = XGetWMHints(dpy, c->win))) {
+        if (c == selmon->sel && wmh->flags & XUrgencyHint) {
+            wmh->flags &= ~XUrgencyHint;
+            XSetWMHints(dpy, c->win, wmh);
+        } else
+            c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
+        if (wmh->flags & InputHint)
+            c->neverfocus = !wmh->input;
+        else
+            c->neverfocus = 0;
+        XFree(wmh);
+    }
 }
 
 void
 view(const Arg *arg)
 {
-       int i;
-       unsigned int tmptag;
-
-       if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
-               return;
-       selmon->seltags ^= 1; /* toggle sel tagset */
-       if (arg->ui & TAGMASK) {
-               selmon->pertag->prevtag = selmon->pertag->curtag;
-               selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
-               if (arg->ui == ~0)
-                       selmon->pertag->curtag = 0;
-               else {
-                       for (i=0; !(arg->ui & 1 << i); i++) ;
-                       selmon->pertag->curtag = i + 1;
-               }
-       } else {
-               tmptag = selmon->pertag->prevtag;
-               selmon->pertag->prevtag = selmon->pertag->curtag;
-               selmon->pertag->curtag = tmptag;
-       }
-       selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
-       selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
-       selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
-       selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
-       selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
-       if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
-               togglebar(NULL);
-       focus(NULL);
-       arrange(selmon);
+    int i;
+    unsigned int tmptag;
+
+    if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+        return;
+    selmon->seltags ^= 1; /* toggle sel tagset */
+    if (arg->ui & TAGMASK) {
+        selmon->pertag->prevtag = selmon->pertag->curtag;
+        selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+        if (arg->ui == ~0)
+            selmon->pertag->curtag = 0;
+        else {
+            for (i=0; !(arg->ui & 1 << i); i++) ;
+            selmon->pertag->curtag = i + 1;
+        }
+    } else {
+        tmptag = selmon->pertag->prevtag;
+        selmon->pertag->prevtag = selmon->pertag->curtag;
+        selmon->pertag->curtag = tmptag;
+    }
+    selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
+    selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
+    selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
+    selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
+    selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
+    if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
+        togglebar(NULL);
+    focus(NULL);
+    arrange(selmon);
 }
 
 Client *
 wintoclient(Window w)
 {
-       Client *c;
-       Monitor *m;
+    Client *c;
+    Monitor *m;
 
-       for (m = mons; m; m = m->next)
-               for (c = m->clients; c; c = c->next)
-                       if (c->win == w)
-                               return c;
-       return NULL;
+    for (m = mons; m; m = m->next)
+        for (c = m->clients; c; c = c->next)
+            if (c->win == w)
+                return c;
+    return NULL;
 }
 
 Monitor *
 wintomon(Window w)
 {
-       int x, y;
-       Client *c;
-       Monitor *m;
+    int x, y;
+    Client *c;
+    Monitor *m;
 
-       if (w == root && getrootptr(&x, &y))
-               return recttomon(x, y, 1, 1);
-       for (m = mons; m; m = m->next)
-               if (w == m->barwin)
-                       return m;
-       if ((c = wintoclient(w)))
-               return c->mon;
-       return selmon;
+    if (w == root && getrootptr(&x, &y))
+        return recttomon(x, y, 1, 1);
+    for (m = mons; m; m = m->next)
+        if (w == m->barwin)
+            return m;
+    if ((c = wintoclient(w)))
+        return c->mon;
+    return selmon;
 }
 
 /* There's no way to check accesses to destroyed windows, thus those cases are
@@ -2173,25 +2171,25 @@ wintomon(Window w)
 int
 xerror(Display *dpy, XErrorEvent *ee)
 {
-       if (ee->error_code == BadWindow
-       || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
-       || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
-       || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
-       || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
-       || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
-       || (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
-       || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
-       || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
-               return 0;
-       fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
-                       ee->request_code, ee->error_code);
-       return xerrorxlib(dpy, ee); /* may call exit */
+    if (ee->error_code == BadWindow
+    || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
+    || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
+    || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
+    || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
+    || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
+    || (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
+    || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
+    || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
+        return 0;
+    fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
+            ee->request_code, ee->error_code);
+    return xerrorxlib(dpy, ee); /* may call exit */
 }
 
 int
 xerrordummy(Display *dpy, XErrorEvent *ee)
 {
-       return 0;
+    return 0;
 }
 
 /* Startup Error handler to check if another window manager
@@ -2199,40 +2197,40 @@ xerrordummy(Display *dpy, XErrorEvent *ee)
 int
 xerrorstart(Display *dpy, XErrorEvent *ee)
 {
-       die("dwm: another window manager is already running\n");
-       return -1;
+    die("dwm: another window manager is already running\n");
+    return -1;
 }
 
 void
 zoom(const Arg *arg)
 {
-       Client *c = selmon->sel;
+    Client *c = selmon->sel;
 
-       if (!selmon->lt[selmon->sellt]->arrange
-       || (selmon->sel && selmon->sel->isfloating))
-               return;
-       if (c == nexttiled(selmon->clients))
-               if (!c || !(c = nexttiled(c->next)))
-                       return;
-       pop(c);
+    if (!selmon->lt[selmon->sellt]->arrange
+    || (selmon->sel && selmon->sel->isfloating))
+        return;
+    if (c == nexttiled(selmon->clients))
+        if (!c || !(c = nexttiled(c->next)))
+            return;
+    pop(c);
 }
 
 int
 main(int argc, char *argv[])
 {
-       if (argc == 2 && !strcmp("-v", argv[1]))
-               die("dwm-"VERSION "\n");
-       else if (argc != 1)
-               die("usage: dwm [-v]\n");
-       if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
-               fputs("warning: no locale support\n", stderr);
-       if (!(dpy = XOpenDisplay(NULL)))
-               die("dwm: cannot open display\n");
-       checkotherwm();
-       setup();
-       scan();
-       run();
-       cleanup();
-       XCloseDisplay(dpy);
-       return EXIT_SUCCESS;
+    if (argc == 2 && !strcmp("-v", argv[1]))
+        die("dwm-"VERSION "\n");
+    else if (argc != 1)
+        die("usage: dwm [-v]\n");
+    if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
+        fputs("warning: no locale support\n", stderr);
+    if (!(dpy = XOpenDisplay(NULL)))
+        die("dwm: cannot open display\n");
+    checkotherwm();
+    setup();
+    scan();
+    run();
+    cleanup();
+    XCloseDisplay(dpy);
+    return EXIT_SUCCESS;
 }