dwm-push-20160731-56a31dc.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-push-20160731-56a31dc.diff (1514B)
       ---
            1 URL: http://dwm.suckless.org/patches/push
            2 pushup and pushdown provide a way to move clients inside the clients list.
            3 
            4 Index: dwm/push.c
            5 ===================================================================
            6 --- /dev/null
            7 +++ dwm/push.c
            8 @@ -0,0 +1,67 @@
            9 +Client *
           10 +nextc(Client *c, float f) {
           11 +        if(!f)
           12 +                return nexttiled(c);
           13 +
           14 +        for(; c && !ISVISIBLE(c); c = c->next);
           15 +        return c;
           16 +}
           17 +
           18 +static Client *
           19 +prevc(Client *c, float f) {
           20 +        Client *p, *r;
           21 +
           22 +        for(p = selmon->clients, r = NULL; c && p && p != c; p = p->next)
           23 +                if((f || !p->isfloating) && ISVISIBLE(p))
           24 +                        r = p;
           25 +        return r;
           26 +}
           27 +
           28 +static void
           29 +pushup(const Arg *arg) {
           30 +        Client *sel = selmon->sel;
           31 +        Client *c;
           32 +
           33 +        if(!sel || (sel->isfloating && !arg->f))
           34 +                return;
           35 +        if((c = prevc(sel, arg->f))) {
           36 +                /* attach before c */
           37 +                detach(sel);
           38 +                sel->next = c;
           39 +                if(selmon->clients == c)
           40 +                        selmon->clients = sel;
           41 +                else {
           42 +                        for(c = selmon->clients; c->next != sel->next; c = c->next);
           43 +                        c->next = sel;
           44 +                }
           45 +        } else {
           46 +                /* move to the end */
           47 +                for(c = sel; c->next; c = c->next);
           48 +                detach(sel);
           49 +                sel->next = NULL;
           50 +                c->next = sel;
           51 +        }
           52 +        focus(sel);
           53 +        arrange(selmon);
           54 +}
           55 +
           56 +static void
           57 +pushdown(const Arg *arg) {
           58 +        Client *sel = selmon->sel;
           59 +        Client *c;
           60 +
           61 +        if(!sel || (sel->isfloating && !arg->f))
           62 +                return;
           63 +        if((c = nextc(sel->next, arg->f))) {
           64 +                /* attach after c */
           65 +                detach(sel);
           66 +                sel->next = c->next;
           67 +                c->next = sel;
           68 +        } else {
           69 +                /* move to the front */
           70 +                detach(sel);
           71 +                attach(sel);
           72 +        }
           73 +        focus(sel);
           74 +        arrange(selmon);
           75 +}