new config + uselessgap
[azarus-dwm.git] / push.diff
blob29256d42daefbbeadd0c3cef3806530a8fcc5f1a
1 URL: http://dwm.suckless.org/patches/push
2 pushup and pushdown provide a way to move clients inside the clients list.
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);
14 + for(; c && !ISVISIBLE(c); c = c->next);
15 + return c;
18 +static Client *
19 +prevc(Client *c, float f) {
20 + Client *p, *r;
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;
28 +static void
29 +pushup(const Arg *arg) {
30 + Client *sel = selmon->sel;
31 + Client *c;
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);
56 +static void
57 +pushdown(const Arg *arg) {
58 + Client *sel = selmon->sel;
59 + Client *c;
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);