t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit cee56d38632bbac08e7f59d58c7c7ab1370be329
   DIR parent 7c4da2446531bfec2f9b32998604aa9ff2da11c3
   URI Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Mon, 19 Feb 2007 17:00:32 +0100
       
       renamed floating into swimming (this does not clash with C naming conventions and fits better the fish symbol) - also in man page
       Diffstat:
         M client.c                            |       8 ++++----
         M config.arg.h                        |       8 ++++----
         M config.default.h                    |       8 ++++----
         M dwm.1                               |      20 ++++++++++----------
         M dwm.h                               |       7 +++----
         M event.c                             |       8 ++++----
         M screen.c                            |     133 ++++++++++++++++---------------
       
       7 files changed, 96 insertions(+), 96 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       t@@ -253,8 +253,8 @@ manage(Window w, XWindowAttributes *wa) {
                updatetitle(c);
                for(t = clients; t && t->win != trans; t = t->next);
                settags(c, t);
       -        if(!c->isfloat)
       -                c->isfloat = (t != NULL) || c->isfixed;
       +        if(!c->swimming)
       +                c->swimming = (t != NULL) || c->isfixed;
                attach(c);
                attachstack(c);
                c->isbanned = True;
       t@@ -268,7 +268,7 @@ manage(Window w, XWindowAttributes *wa) {
        
        Client *
        nexttiled(Client *c) {
       -        for(; c && (c->isfloat || !isvisible(c)); c = c->next);
       +        for(; c && (c->swimming || !isvisible(c)); c = c->next);
                return c;
        }
        
       t@@ -440,7 +440,7 @@ zoom(Arg *arg) {
        
                if(!sel)
                        return;
       -        if(sel->isfloat || (lt->arrange == dofloat)) {
       +        if(sel->swimming || (lt->arrange == swim)) {
                        togglemax(sel);
                        return;
                }
   DIR diff --git a/config.arg.h b/config.arg.h
       t@@ -8,8 +8,8 @@ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
        #define LAYOUTS \
        static Layout layout[] = { \
                /* symbol                function */ \
       -        { "[]=",                dotile }, /* first entry is default */ \
       -        { "><>",                dofloat }, \
       +        { "[]=",                tile }, /* first entry is default */ \
       +        { "><>",                swim }, \
        };
        
        #define BORDERPX                1
       t@@ -64,7 +64,7 @@ static Key key[] = { \
                { MODKEY|ControlMask|ShiftMask,        XK_9,                toggletag,        { .i = 8 } }, \
                { MODKEY|ShiftMask,                XK_c,                killclient,        { 0 } }, \
                { MODKEY,                        XK_space,        togglelayout,        { 0 } }, \
       -        { MODKEY|ShiftMask,                XK_space,        togglefloat,        { 0 } }, \
       +        { MODKEY|ShiftMask,                XK_space,        toggleswimming,        { 0 } }, \
                { MODKEY,                        XK_0,                view,                { .i = -1 } }, \
                { MODKEY,                        XK_1,                view,                { .i = 0 } }, \
                { MODKEY,                        XK_2,                view,                { .i = 1 } }, \
       t@@ -89,7 +89,7 @@ static Key key[] = { \
        
        #define RULES \
        static Rule rule[] = { \
       -        /* class:instance:title regex        tags regex        isfloat */ \
       +        /* class:instance:title regex        tags regex        swimming */ \
                { "Firefox",                        "3",                False }, \
                { "Gimp",                        NULL,                True }, \
                { "MPlayer",                        NULL,                True }, \
   DIR diff --git a/config.default.h b/config.default.h
       t@@ -8,8 +8,8 @@ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
        #define LAYOUTS \
        Layout layout[] = { \
                /* symbol                function */ \
       -        { "[]=",                dotile }, /* first entry is default */ \
       -        { "><>",                dofloat }, \
       +        { "[]=",                tile }, /* first entry is default */ \
       +        { "><>",                swim }, \
        };
        
        #define BORDERPX                1
       t@@ -59,7 +59,7 @@ static Key key[] = { \
                { MODKEY|ControlMask|ShiftMask,        XK_9,                toggletag,        { .i = 8 } }, \
                { MODKEY|ShiftMask,                XK_c,                killclient,        { 0 } }, \
                { MODKEY,                        XK_space,        togglelayout,        { 0 } }, \
       -        { MODKEY|ShiftMask,                XK_space,        togglefloat,        { 0 } }, \
       +        { MODKEY|ShiftMask,                XK_space,        toggleswimming,        { 0 } }, \
                { MODKEY,                        XK_0,                view,                { .i = -1 } }, \
                { MODKEY,                        XK_1,                view,                { .i = 0 } }, \
                { MODKEY,                        XK_2,                view,                { .i = 1 } }, \
       t@@ -86,7 +86,7 @@ static Key key[] = { \
         * xprop | awk -F '"' '/^WM_CLASS/ { printf("%s:%s:",$4,$2) }; /^WM_NAME/ { printf("%s\n",$2) }' */
        #define RULES \
        static Rule rule[] = { \
       -        /* class:instance:title regex        tags regex        isfloat */ \
       +        /* class:instance:title regex        tags regex        swimming */ \
                { "Gimp",                        NULL,                True }, \
                { "MPlayer",                        NULL,                True }, \
                { "Acroread",                        NULL,                True }, \
   DIR diff --git a/dwm.1 b/dwm.1
       t@@ -6,13 +6,13 @@ dwm \- dynamic window manager
        .RB [ \-v ]
        .SH DESCRIPTION
        dwm is a dynamic window manager for X. It manages windows in tiling and
       -floating layouts. Either layout can be applied dynamically, optimizing the
       +swimming layouts. Either layout can be applied dynamically, optimizing the
        environment for the application in use and the task performed.
        .P
        In tiling layout windows are managed in a master and stacking area. The master
        area contains the windows which currently need most attention, whereas the
       -stacking area contains all other windows. In floating layout windows can be
       -resized and moved freely. Dialog windows are always managed floating,
       +stacking area contains all other windows. In swimming layout windows can be
       +resized and moved freely. Dialog windows are always managed swimming,
        regardless of the layout applied.
        .P
        Windows are grouped by tags. Each window can be tagged with one or multiple
       t@@ -38,7 +38,7 @@ is read and displayed in the status text area.
        .TP
        .B Button1
        click on a tag label to display all windows with that tag, click on the layout
       -label toggles between tiling and floating layout.
       +label toggles between tiling and swimming layout.
        .TP
        .B Button3
        click on a tag label adds/removes all windows with that tag to/from the view.
       t@@ -67,7 +67,7 @@ Focus next window.
        Focus previous window.
        .TP
        .B Mod1-Return
       -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (floating layout).
       +Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (swimming layout).
        .TP
        .B Mod1-g
        Grow master area (tiling layout only).
       t@@ -98,10 +98,10 @@ tag to/from current window.
        Close focused window.
        .TP
        .B Mod1-space
       -Toggle between tiling and floating layout (affects all windows).
       +Toggle between tiling and swimming layout (affects all windows).
        .TP
        .B Mod1-Shift-space
       -Toggle focused window between floating and non-floating state (tiling layout only).
       +Toggle focused window between swimming and non-swimming state (tiling layout only).
        .TP
        .B Mod1-[1..n]
        View all windows with
       t@@ -121,13 +121,13 @@ Quit dwm.
        .SS Mouse commands
        .TP
        .B Mod1-Button1
       -Move current window while dragging (floating layout only).
       +Move current window while dragging (swimming layout only).
        .TP
        .B Mod1-Button2
       -Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (floating layout).
       +Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (swimming layout).
        .TP
        .B Mod1-Button3
       -Resize current window while dragging (floating layout only).
       +Resize current window while dragging (swimming layout only).
        .SH CUSTOMIZATION
        dwm is customized by creating a custom config.h and (re)compiling the source
        code. This keeps it fast, secure and simple.
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -72,7 +72,7 @@ struct Client {
                int minax, minay, maxax, maxay;
                long flags; 
                unsigned int border;
       -        Bool isbanned, isfixed, isfloat, ismax;
       +        Bool isbanned, isfixed, ismax, swimming;
                Bool *tags;
                Client *next;
                Client *prev;
       t@@ -129,16 +129,15 @@ extern int xerror(Display *dsply, XErrorEvent *ee);        /* dwm's X error handler */
        
        /* screen.c */
        extern void compileregs(void);                        /* initialize regexps of rules defined in config.h */
       -extern void dofloat(void);                        /* arranges all windows floating */
       -extern void dotile(void);                        /* arranges all windows tiled */
        extern void incnmaster(Arg *arg);                /* increments nmaster with arg's index value */
        extern void initlayouts(void);                        /* initialize layout array */
        extern Bool isvisible(Client *c);                /* returns True if client is visible */
        extern void resizemaster(Arg *arg);                /* resizes the master percent with arg's index value */
        extern void restack(void);                        /* restores z layers of all clients */
        extern void settags(Client *c, Client *trans);        /* sets tags of c */
       +extern void swim(void);                                /* arranges all windows swimming */
        extern void tag(Arg *arg);                        /* tags c with arg's index */
       -extern void togglefloat(Arg *arg);                /* toggles focusesd client between floating/non-floating state */
       +extern void toggleswimming(Arg *arg);                /* toggles focusesd client between swimming/and non-swimming state */
        extern void togglelayout(Arg *arg);                /* toggles layout */
        extern void toggletag(Arg *arg);                /* toggles c tags with arg's index */
        extern void toggleview(Arg *arg);                /* toggles the tag with arg's index (in)visible */
   DIR diff --git a/event.c b/event.c
       t@@ -156,14 +156,14 @@ buttonpress(XEvent *e) {
                        focus(c);
                        if(CLEANMASK(ev->state) != MODKEY)
                                return;
       -                if(ev->button == Button1 && (lt->arrange == dofloat || c->isfloat)) {
       +                if(ev->button == Button1 && (lt->arrange == swim || c->swimming)) {
                                restack();
                                movemouse(c);
                        }
                        else if(ev->button == Button2)
                                zoom(NULL);
                        else if(ev->button == Button3
       -                && (lt->arrange == dofloat || c->isfloat) && !c->isfixed)
       +                && (lt->arrange == swim || c->swimming) && !c->isfixed)
                        {
                                restack();
                                resizemouse(c);
       t@@ -181,7 +181,7 @@ configurerequest(XEvent *e) {
                        c->ismax = False;
                        if(ev->value_mask & CWBorderWidth)
                                c->border = ev->border_width;
       -                if(c->isfixed || c->isfloat || (lt->arrange == dofloat)) {
       +                if(c->isfixed || c->swimming || (lt->arrange == swim)) {
                                if(ev->value_mask & CWX)
                                        c->x = ev->x;
                                if(ev->value_mask & CWY)
       t@@ -309,7 +309,7 @@ propertynotify(XEvent *e) {
                                default: break;
                                case XA_WM_TRANSIENT_FOR:
                                        XGetTransientForHint(dpy, c->win, &trans);
       -                                if(!c->isfloat && (c->isfloat = (trans != 0)))
       +                                if(!c->swimming && (c->swimming = (getclient(trans) != NULL)))
                                                lt->arrange();
                                        break;
                                case XA_WM_NORMAL_HINTS:
   DIR diff --git a/screen.c b/screen.c
       t@@ -19,7 +19,7 @@ Layout *lt = NULL;
        typedef struct {
                const char *prop;
                const char *tags;
       -        Bool isfloat;
       +        Bool swimming;
        } Rule;
        
        typedef struct {
       t@@ -27,7 +27,6 @@ typedef struct {
                regex_t *tagregex;
        } Regs;
        
       -LAYOUTS
        TAGS
        RULES
        
       t@@ -35,60 +34,8 @@ static Regs *regs = NULL;
        static unsigned int nrules = 0;
        static unsigned int nlayouts = 0;
        
       -/* extern */
       -
       -void
       -compileregs(void) {
       -        unsigned int i;
       -        regex_t *reg;
       -
       -        if(regs)
       -                return;
       -        nrules = sizeof rule / sizeof rule[0];
       -        regs = emallocz(nrules * sizeof(Regs));
       -        for(i = 0; i < nrules; i++) {
       -                if(rule[i].prop) {
       -                        reg = emallocz(sizeof(regex_t));
       -                        if(regcomp(reg, rule[i].prop, REG_EXTENDED))
       -                                free(reg);
       -                        else
       -                                regs[i].propregex = reg;
       -                }
       -                if(rule[i].tags) {
       -                        reg = emallocz(sizeof(regex_t));
       -                        if(regcomp(reg, rule[i].tags, REG_EXTENDED))
       -                                free(reg);
       -                        else
       -                                regs[i].tagregex = reg;
       -                }
       -        }
       -}
       -
       -void
       -dofloat(void) {
       -        Client *c;
       -
       -        for(c = clients; c; c = c->next) {
       -                if(isvisible(c)) {
       -                        if(c->isbanned)
       -                                XMoveWindow(dpy, c->win, c->x, c->y);
       -                        c->isbanned = False;
       -                        resize(c, c->x, c->y, c->w, c->h, True);
       -                }
       -                else {
       -                        c->isbanned = True;
       -                        XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
       -                }
       -        }
       -        if(!sel || !isvisible(sel)) {
       -                for(c = stack; c && !isvisible(c); c = c->snext);
       -                focus(c);
       -        }
       -        restack();
       -}
       -
       -void
       -dotile(void) {
       +static void
       +tile(void) {
                unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
                Client *c;
        
       t@@ -105,7 +52,7 @@ dotile(void) {
                                if(c->isbanned)
                                        XMoveWindow(dpy, c->win, c->x, c->y);
                                c->isbanned = False;
       -                        if(c->isfloat)
       +                        if(c->swimming)
                                        continue;
                                c->ismax = False;
                                nx = wax;
       t@@ -139,9 +86,40 @@ dotile(void) {
                restack();
        }
        
       +LAYOUTS
       +
       +/* extern */
       +
       +void
       +compileregs(void) {
       +        unsigned int i;
       +        regex_t *reg;
       +
       +        if(regs)
       +                return;
       +        nrules = sizeof rule / sizeof rule[0];
       +        regs = emallocz(nrules * sizeof(Regs));
       +        for(i = 0; i < nrules; i++) {
       +                if(rule[i].prop) {
       +                        reg = emallocz(sizeof(regex_t));
       +                        if(regcomp(reg, rule[i].prop, REG_EXTENDED))
       +                                free(reg);
       +                        else
       +                                regs[i].propregex = reg;
       +                }
       +                if(rule[i].tags) {
       +                        reg = emallocz(sizeof(regex_t));
       +                        if(regcomp(reg, rule[i].tags, REG_EXTENDED))
       +                                free(reg);
       +                        else
       +                                regs[i].tagregex = reg;
       +                }
       +        }
       +}
       +
        void
        incnmaster(Arg *arg) {
       -        if((lt->arrange == dofloat) || (nmaster + arg->i < 1)
       +        if((lt->arrange != tile) || (nmaster + arg->i < 1)
                || (wah / (nmaster + arg->i) <= 2 * BORDERPX))
                        return;
                nmaster += arg->i;
       t@@ -176,7 +154,7 @@ isvisible(Client *c) {
        
        void
        resizemaster(Arg *arg) {
       -        if(lt->arrange != dotile)
       +        if(lt->arrange != tile)
                        return;
                if(arg->i == 0)
                        master = MASTER;
       t@@ -197,10 +175,10 @@ restack(void) {
                drawstatus();
                if(!sel)
                        return;
       -        if(sel->isfloat || lt->arrange == dofloat)
       +        if(sel->swimming || lt->arrange == swim)
                        XRaiseWindow(dpy, sel->win);
       -        if(lt->arrange != dofloat) {
       -                if(!sel->isfloat)
       +        if(lt->arrange != swim) {
       +                if(!sel->swimming)
                                XLowerWindow(dpy, sel->win);
                        for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
                                if(c == sel)
       t@@ -230,7 +208,7 @@ settags(Client *c, Client *trans) {
                                        ch.res_name ? ch.res_name : "", c->name);
                        for(i = 0; i < nrules; i++)
                                if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
       -                                c->isfloat = rule[i].isfloat;
       +                                c->swimming = rule[i].swimming;
                                        for(j = 0; regs[i].tagregex && j < ntags; j++) {
                                                if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
                                                        matched = True;
       t@@ -249,6 +227,29 @@ settags(Client *c, Client *trans) {
        }
        
        void
       +swim(void) {
       +        Client *c;
       +
       +        for(c = clients; c; c = c->next) {
       +                if(isvisible(c)) {
       +                        if(c->isbanned)
       +                                XMoveWindow(dpy, c->win, c->x, c->y);
       +                        c->isbanned = False;
       +                        resize(c, c->x, c->y, c->w, c->h, True);
       +                }
       +                else {
       +                        c->isbanned = True;
       +                        XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
       +                }
       +        }
       +        if(!sel || !isvisible(sel)) {
       +                for(c = stack; c && !isvisible(c); c = c->snext);
       +                focus(c);
       +        }
       +        restack();
       +}
       +
       +void
        tag(Arg *arg) {
                unsigned int i;
        
       t@@ -262,10 +263,10 @@ tag(Arg *arg) {
        }
        
        void
       -togglefloat(Arg *arg) {
       -        if(!sel || lt->arrange == dofloat)
       +toggleswimming(Arg *arg) {
       +        if(!sel || lt->arrange == swim)
                        return;
       -        sel->isfloat = !sel->isfloat;
       +        sel->swimming = !sel->swimming;
                lt->arrange();
        }