diff -urp dwm-6.1/dwm.c dwm-6.1-patched/dwm.c --- dwm-6.1/dwm.c 2015-11-09 06:39:37.000000000 +0800 +++ dwm-6.1-patched/dwm.c 2016-03-24 23:56:35.435047948 +0800 @@ -206,6 +206,7 @@ static void setup(void); static void showhide(Client *c); static void sigchld(int unused); static void spawn(const Arg *arg); +static void switchcol(const Arg *arg); static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void tile(Monitor *); @@ -1645,6 +1646,35 @@ spawn(const Arg *arg) } } +void +switchcol(const Arg *arg) +{ + Client *c, *t; + int col = 0; + int i; + + if (!selmon->sel) + return; + for (i = 0, c = nexttiled(selmon->clients); c ; + c = nexttiled(c->next), i++) { + if (c == selmon->sel) + col = (i + 1) > selmon->nmaster; + } + if (i <= selmon->nmaster) + return; + for (c = selmon->stack; c; c = c->snext) { + if (!ISVISIBLE(c)) + continue; + for (i = 0, t = nexttiled(selmon->clients); t && t != c; + t = nexttiled(t->next), i++); + if (t && (i + 1 > selmon->nmaster) != col) { + focus(c); + restack(selmon); + break; + } + } +} + void tag(const Arg *arg) {