From 7c23a59c38d01a0fae1edf360b4553fe3a0d9e23 Mon Sep 17 00:00:00 2001 From: bakkeby Date: Sat, 7 Sep 2019 22:42:01 +0200 Subject: [PATCH] Adding rotatestack patch --- README.md | 5 ++++- config.def.h | 4 ++++ patch/include.c | 4 ++++ patch/include.h | 6 +++++- patch/rotatestack.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ patch/rotatestack.h | 3 +++ patches.h | 5 +++++ 7 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 patch/rotatestack.c create mode 100644 patch/rotatestack.h diff --git a/README.md b/README.md index c6d5b97..4bbdeea 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t ### Changelog: -2019-09-07 - Added cyclelayouts patch +2019-09-07 - Added cyclelayouts, resizecorners and rotatestack patch 2019-09-06 - Added attachabove, attachaside, attachbelow, attachbottom, autostart, fancybar, focusonnetactive and losefullscreen patches @@ -59,6 +59,9 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t - by default, windows only resize from the bottom right corner - with this patch the mouse is warped to the nearest corner and you resize from there + - [rotatestack](https://dwm.suckless.org/patches/rotatestack/) + - let's you rotate through the stack using keyboard shortcuts + - [systray](https://dwm.suckless.org/patches/systray/) - adds system tray in the status bar diff --git a/config.def.h b/config.def.h index 170f1db..1514554 100644 --- a/config.def.h +++ b/config.def.h @@ -84,6 +84,10 @@ static Key keys[] = { { MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } }, + #if ROTATESTACK_PATCH + { MODKEY|ShiftMask, XK_j, rotatestack, {.i = +1 } }, + { MODKEY|ShiftMask, XK_k, rotatestack, {.i = -1 } }, + #endif // ROTATESTACK_PATCH { MODKEY, XK_i, incnmaster, {.i = +1 } }, { MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_h, setmfact, {.f = -0.05} }, diff --git a/patch/include.c b/patch/include.c index 0c59c0f..b5cf100 100644 --- a/patch/include.c +++ b/patch/include.c @@ -18,6 +18,10 @@ #include "pertag.c" #endif +#if ROTATESTACK_PATCH +#include "rotatestack.c" +#endif + #if SYSTRAY_PATCH #include "systray.c" #endif diff --git a/patch/include.h b/patch/include.h index 17d6c9e..e324b55 100644 --- a/patch/include.h +++ b/patch/include.h @@ -12,7 +12,11 @@ #if CYCLELAYOUTS_PATCH #include "cyclelayouts.h" -#endif // CYCLELAYOUTS_PATCH +#endif + +#if ROTATESTACK_PATCH +#include "rotatestack.h" +#endif #if SYSTRAY_PATCH #include "systray.h" diff --git a/patch/rotatestack.c b/patch/rotatestack.c new file mode 100644 index 0000000..d2f7d50 --- /dev/null +++ b/patch/rotatestack.c @@ -0,0 +1,52 @@ +void +enqueue(Client *c) +{ + Client *l; + for (l = c->mon->clients; l && l->next; l = l->next); + if (l) { + l->next = c; + c->next = NULL; + } +} + +void +enqueuestack(Client *c) +{ + Client *l; + for (l = c->mon->stack; l && l->snext; l = l->snext); + if (l) { + l->snext = c; + c->snext = NULL; + } +} + +void +rotatestack(const Arg *arg) +{ + Client *c = NULL, *f; + + if (!selmon->sel) + return; + f = selmon->sel; + if (arg->i > 0) { + for (c = nexttiled(selmon->clients); c && nexttiled(c->next); c = nexttiled(c->next)); + if (c){ + detach(c); + attach(c); + detachstack(c); + attachstack(c); + } + } else { + if ((c = nexttiled(selmon->clients))){ + detach(c); + enqueue(c); + detachstack(c); + enqueuestack(c); + } + } + if (c){ + arrange(selmon); + focus(f); + restack(selmon); + } +} \ No newline at end of file diff --git a/patch/rotatestack.h b/patch/rotatestack.h new file mode 100644 index 0000000..c0661fa --- /dev/null +++ b/patch/rotatestack.h @@ -0,0 +1,3 @@ +static void enqueue(Client *c); +static void enqueuestack(Client *c); +static void rotatestack(const Arg *arg); \ No newline at end of file diff --git a/patches.h b/patches.h index 7d1fc5d..ece7226 100644 --- a/patches.h +++ b/patches.h @@ -87,6 +87,11 @@ */ #define RESIZECORNERS_PATCH 0 +/* This patch let's you rotate through the stack using keyboard shortcuts. + * https://dwm.suckless.org/patches/rotatestack/ + */ +#define ROTATESTACK_PATCH 0 + /* The systray patch adds systray for the status bar. * https://dwm.suckless.org/patches/systray/ */