| dwm-push-20160731-56a31dc.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| 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 lis… | |
| 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->nex… | |
| 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; … | |
| 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 +} |