dwm-zoomswap-20160731-56a31dc.diff (2457B)
1 Author: Jan Christoph Ebersbach <jceb@e-jc.de> 2 URL: http://dwm.suckless.org/patches/zoomswap 3 This patch swaps the current window with the previous master when zooming. 4 5 Index: dwm/dwm.c 6 =================================================================== 7 --- dwm/dwm.c.orig 8 +++ dwm/dwm.c 9 @@ -236,6 +236,7 @@ static int xerrorstart(Display *dpy, XEr 10 static void zoom(const Arg *arg); 11 12 /* variables */ 13 +static Client *prevzoom = NULL; 14 static const char broken[] = "broken"; 15 static char stext[256]; 16 static int screen; 17 @@ -2109,14 +2110,38 @@ void 18 zoom(const Arg *arg) 19 { 20 Client *c = selmon->sel; 21 + Client *at = NULL, *cold, *cprevious = NULL; 22 23 if (!selmon->lt[selmon->sellt]->arrange 24 || (selmon->sel && selmon->sel->isfloating)) 25 return; 26 - if (c == nexttiled(selmon->clients)) 27 - if (!c || !(c = nexttiled(c->next))) 28 - return; 29 - pop(c); 30 + if (c == nexttiled(selmon->clients)) { 31 + at = findbefore(prevzoom); 32 + if (at) 33 + cprevious = nexttiled(at->next); 34 + if (!cprevious || cprevious != prevzoom) { 35 + prevzoom = NULL; 36 + if(!c || !(c = nexttiled(c->next))) 37 + return; 38 + } else 39 + c = cprevious; 40 + } 41 + cold = nexttiled(selmon->clients); 42 + if (c != cold && !at) 43 + at = findbefore(c); 44 + detach(c); 45 + attach(c); 46 + /* swap windows instead of pushing the previous one down */ 47 + if (c != cold && at) { 48 + prevzoom = cold; 49 + if(cold && at != cold) { 50 + detach(cold); 51 + cold->next = at->next; 52 + at->next = cold; 53 + } 54 + } 55 + focus(c); 56 + arrange(c->mon); 57 } 58 59 int 60 Index: dwm/zoomswap.c 61 =================================================================== 62 --- /dev/null 63 +++ dwm/zoomswap.c 64 @@ -0,0 +1,10 @@ 65 +static Client * findbefore(Client *c); 66 + 67 +Client * 68 +findbefore(Client *c) { 69 + Client *tmp; 70 + if(c == selmon->clients) 71 + return NULL; 72 + for(tmp = selmon->clients; tmp && tmp->next != c; tmp = tmp->next) ; 73 + return tmp; 74 +} 75 Index: dwm/config.def.h 76 =================================================================== 77 --- dwm/config.def.h.orig 78 +++ dwm/config.def.h 79 @@ -59,6 +59,7 @@ static char dmenumon[2] = "0"; /* compon 80 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; 81 static const char *termcmd[] = { "st", NULL }; 82 83 +#include "zoomswap.c" 84 static Key keys[] = { 85 /* modifier key function argument */ 86 { MODKEY, XK_p, spawn, {.v = dmenucmd } },