diff --git a/README.md b/README.md index 62472d0..abecc35 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6 ### Changelog: +2022-07-04 - Added the shift-tools patch(es) with individual toggles + 2022-06-20 - Added the renamed scratchpads patch 2022-06-17 - Ported the seamless restart feature from dusk into dwm-flexipatch @@ -621,6 +623,9 @@ Browsing patches? There is a [map of patches](https://coggle.it/diagram/X9IiSSM6 - [setborderpx](https://dwm.suckless.org/patches/setborderpx/) - this patch allows border pixels to be changed during runtime + - [shift-tools](https://dwm.suckless.org/patches/shift-tools/) + - a group of functions that shift clients or views left or right + - [shiftview](https://github.com/chau-bao-long/dotfiles/blob/master/suckless/dwm/shiftview.diff) - adds keybindings for left and right circular shift through tags - also see focusadjacenttag diff --git a/README.org b/README.org index 53e52e8..f918a33 100644 --- a/README.org +++ b/README.org @@ -133,6 +133,10 @@ - [[#self-restart][Self Restart]] - [[#send-monitor-keep-focus][Send Monitor Keep Focus]] - [[#set-border-pixels][Set Border Pixels]] + - [[#shift-both][Shift Both]] + - [[#shift-swap-tags][Shift Swap Tags]] + - [[#shift-tag][Shift Tag]] + - [[#shift-tag-clients][Shift Tag Clients]] - [[#shift-view][Shift View]] - [[#size-hints][Size Hints]] - [[#sort-screens][Sort Screens]] @@ -291,6 +295,8 @@ Browsing patches? There is a [[https://coggle.it/diagram/X9IiSSM6PTWOM9Wz][map o ** Changelog +2022-07-04 - Added the shift-tools patch(es) with individual toggles + 2022-06-20 - Added the renamed scratchpads patch 2022-06-17 - Ported the seamless restart feature from dusk into dwm-flexipatch @@ -892,6 +898,9 @@ Browsing patches? There is a [[https://coggle.it/diagram/X9IiSSM6PTWOM9Wz][map o - [[https://dwm.suckless.org/patches/setborderpx/][setborderpx]] - this patch allows border pixels to be changed during runtime + - [[https://dwm.suckless.org/patches/shift-tools/][shift-tools]] + - a group of functions that shift clients or views left or right + - [[https://github.com/chau-bao-long/dotfiles/blob/master/suckless/dwm/shiftview.diff][shiftview]] - adds keybindings for left and right circular shift through tags - also see focusadjacenttag @@ -2679,6 +2688,47 @@ https://dwm.suckless.org/patches/setborderpx/ #define SETBORDERPX_PATCH 0 #+END_SRC + +*** Shift Both + +Combines shifttag and shiftview. Basically moves the window to the next/prev tag and follows it. Also see the focusadjacenttag patch. + +https://dwm.suckless.org/patches/shift-tools/ + +#+BEGIN_SRC c :tangle patches.def.h +#define SHIFTBOTH_PATCH 0 +#+END_SRC + +*** Shift Swap Tags + +Swaps all the clients on the current tag with all the client on the next/prev tag. Depends on the swaptags patch. + +https://dwm.suckless.org/patches/shift-tools/ + +#+BEGIN_SRC c :tangle patches.def.h +#define SHIFTSWAPTAGS_PATCH 0 +#+END_SRC + +*** Shift Tag + +Moves the current selected client to the adjacent tag. Also see the focusadjacenttag patch. + +https://dwm.suckless.org/patches/shift-tools/ + +#+BEGIN_SRC c :tangle patches.def.h +#define SHIFTTAG_PATCH 0 +#+END_SRC + +*** Shift Tag Clients + +Moves the current selected client to the adjacent tag that has at least one client, if none then it acts as shifttag. + +https://dwm.suckless.org/patches/shift-tools/ + +#+BEGIN_SRC c :tangle patches.def.h +#define SHIFTTAGCLIENTS_PATCH 0 +#+END_SRC + *** Shift View **** Main @@ -4710,6 +4760,16 @@ static Key keys[] = { { MODKEY, XK_Tab, view, {0} }, + #if SHIFTTAG_PATCH + { MODKEY|ShiftMask, XK_Left, shifttag, { .i = -1 } }, // note keybinding conflict with focusadjacenttag tagtoleft + { MODKEY|ShiftMask, XK_Right, shifttag, { .i = +1 } }, // note keybinding conflict with focusadjacenttag tagtoright + #endif // SHIFTTAG_PATCH + + #if SHIFTTAGCLIENTS_PATCH + { MODKEY|ShiftMask|ControlMask, XK_Left, shifttagclients, { .i = -1 } }, + { MODKEY|ShiftMask|ControlMask, XK_Right, shifttagclients, { .i = +1 } }, + #endif // SHIFTTAGCLIENTS_PATCH + #if SHIFTVIEW_PATCH { MODKEY|ShiftMask, XK_Tab, shiftview, { .i = -1 } }, { MODKEY|ShiftMask, XK_backslash, shiftview, { .i = +1 } }, @@ -4720,6 +4780,16 @@ static Key keys[] = { { MODKEY|Mod1Mask, XK_backslash, shiftviewclients, { .i = +1 } }, #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTBOTH_PATCH + { MODKEY|ControlMask, XK_Left, shiftboth, { .i = -1 } }, // note keybinding conflict with focusadjacenttag tagandviewtoleft + { MODKEY|ControlMask, XK_Right, shiftboth, { .i = +1 } }, // note keybinding conflict with focusadjacenttag tagandviewtoright + #endif // SHIFTBOTH_PATCH + + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + { MODKEY|Mod4Mask|ShiftMask, XK_Left, shiftswaptags, { .i = -1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_Right, shiftswaptags, { .i = +1 } }, + #endif // SHIFTSWAPTAGS_PATCH + #if BAR_WINTITLEACTIONS_PATCH { MODKEY|ControlMask, XK_z, showhideclient, {0} }, #endif // BAR_WINTITLEACTIONS_PATCH @@ -4848,8 +4918,8 @@ static Key keys[] = { #if FOCUSADJACENTTAG_PATCH { MODKEY, XK_Left, viewtoleft, {0} }, // note keybinding conflict with focusdir { MODKEY, XK_Right, viewtoright, {0} }, // note keybinding conflict with focusdir - { MODKEY|ShiftMask, XK_Left, tagtoleft, {0} }, - { MODKEY|ShiftMask, XK_Right, tagtoright, {0} }, + { MODKEY|ShiftMask, XK_Left, tagtoleft, {0} }, // note keybinding conflict with shifttag + { MODKEY|ShiftMask, XK_Right, tagtoright, {0} }, // note keybinding conflict with shifttag { MODKEY|ControlMask, XK_Left, tagandviewtoleft, {0} }, { MODKEY|ControlMask, XK_Right, tagandviewtoright, {0} }, #endif // FOCUSADJACENTTAG_PATCH @@ -5200,12 +5270,24 @@ static Signal signals[] = { { "viewall", viewallex }, { "viewex", viewex }, { "toggleview", toggleview }, + #if SHIFTBOTH_PATCH + { "shiftboth", shiftboth }, + #endif // SHIFTBOTH_PATCH + #if SHIFTTAG_PATCH + { "shifttag", shifttag }, + #endif // SHIFTTAG_PATCH + #if SHIFTTAGCLIENTS_PATCH + { "shifttagclients", shifttagclients }, + #endif // SHIFTTAGCLIENTS_PATCH #if SHIFTVIEW_PATCH { "shiftview", shiftview }, #endif // SHIFTVIEW_PATCH #if SHIFTVIEW_CLIENTS_PATCH { "shiftviewclients", shiftviewclients }, #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + { "shiftswaptags", shiftswaptags }, + #endif // SHIFTSWAPTAGS_PATCH #if SELFRESTART_PATCH { "self_restart", self_restart }, #endif // SELFRESTART_PATCH @@ -5390,12 +5472,24 @@ static IPCCommand ipccommands[] = { #if SETBORDERPX_PATCH IPCCOMMAND( setborderpx, 1, {ARG_TYPE_SINT} ), #endif // SETBORDERPX_PATCH + #if SHIFTBOTH_PATCH + IPCCOMMAND( shiftboth, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTBOTH_PATCH + #if SHIFTTAG_PATCH + IPCCOMMAND( shifttag, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTTAG_PATCH + #if SHIFTTAGCLIENTS_PATCH + IPCCOMMAND( shifttagclients, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTVIEWCLIENTS_PATCH #if SHIFTVIEW_PATCH IPCCOMMAND( shiftview, 1, {ARG_TYPE_SINT} ), #endif // SHIFTVIEW_PATCH #if SHIFTVIEW_CLIENTS_PATCH IPCCOMMAND( shiftviewclients, 1, {ARG_TYPE_SINT} ), #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + IPCCOMMAND( shiftswaptags, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTSWAPTAGS_PATCH #if STACKER_PATCH IPCCOMMAND( pushstack, 1, {ARG_TYPE_SINT} ), #endif // STACKER_PATCH diff --git a/config.def.h b/config.def.h index fd7106c..0b0173f 100644 --- a/config.def.h +++ b/config.def.h @@ -1030,6 +1030,16 @@ static Key keys[] = { { MODKEY, XK_Tab, view, {0} }, + #if SHIFTTAG_PATCH + { MODKEY|ShiftMask, XK_Left, shifttag, { .i = -1 } }, // note keybinding conflict with focusadjacenttag tagtoleft + { MODKEY|ShiftMask, XK_Right, shifttag, { .i = +1 } }, // note keybinding conflict with focusadjacenttag tagtoright + #endif // SHIFTTAG_PATCH + + #if SHIFTTAGCLIENTS_PATCH + { MODKEY|ShiftMask|ControlMask, XK_Left, shifttagclients, { .i = -1 } }, + { MODKEY|ShiftMask|ControlMask, XK_Right, shifttagclients, { .i = +1 } }, + #endif // SHIFTTAGCLIENTS_PATCH + #if SHIFTVIEW_PATCH { MODKEY|ShiftMask, XK_Tab, shiftview, { .i = -1 } }, { MODKEY|ShiftMask, XK_backslash, shiftview, { .i = +1 } }, @@ -1040,6 +1050,16 @@ static Key keys[] = { { MODKEY|Mod1Mask, XK_backslash, shiftviewclients, { .i = +1 } }, #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTBOTH_PATCH + { MODKEY|ControlMask, XK_Left, shiftboth, { .i = -1 } }, // note keybinding conflict with focusadjacenttag tagandviewtoleft + { MODKEY|ControlMask, XK_Right, shiftboth, { .i = +1 } }, // note keybinding conflict with focusadjacenttag tagandviewtoright + #endif // SHIFTBOTH_PATCH + + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + { MODKEY|Mod4Mask|ShiftMask, XK_Left, shiftswaptags, { .i = -1 } }, + { MODKEY|Mod4Mask|ShiftMask, XK_Right, shiftswaptags, { .i = +1 } }, + #endif // SHIFTSWAPTAGS_PATCH + #if BAR_WINTITLEACTIONS_PATCH { MODKEY|ControlMask, XK_z, showhideclient, {0} }, #endif // BAR_WINTITLEACTIONS_PATCH @@ -1168,8 +1188,8 @@ static Key keys[] = { #if FOCUSADJACENTTAG_PATCH { MODKEY, XK_Left, viewtoleft, {0} }, // note keybinding conflict with focusdir { MODKEY, XK_Right, viewtoright, {0} }, // note keybinding conflict with focusdir - { MODKEY|ShiftMask, XK_Left, tagtoleft, {0} }, - { MODKEY|ShiftMask, XK_Right, tagtoright, {0} }, + { MODKEY|ShiftMask, XK_Left, tagtoleft, {0} }, // note keybinding conflict with shifttag + { MODKEY|ShiftMask, XK_Right, tagtoright, {0} }, // note keybinding conflict with shifttag { MODKEY|ControlMask, XK_Left, tagandviewtoleft, {0} }, { MODKEY|ControlMask, XK_Right, tagandviewtoright, {0} }, #endif // FOCUSADJACENTTAG_PATCH @@ -1514,12 +1534,24 @@ static Signal signals[] = { { "viewall", viewallex }, { "viewex", viewex }, { "toggleview", toggleview }, + #if SHIFTBOTH_PATCH + { "shiftboth", shiftboth }, + #endif // SHIFTBOTH_PATCH + #if SHIFTTAG_PATCH + { "shifttag", shifttag }, + #endif // SHIFTTAG_PATCH + #if SHIFTTAGCLIENTS_PATCH + { "shifttagclients", shifttagclients }, + #endif // SHIFTTAGCLIENTS_PATCH #if SHIFTVIEW_PATCH { "shiftview", shiftview }, #endif // SHIFTVIEW_PATCH #if SHIFTVIEW_CLIENTS_PATCH { "shiftviewclients", shiftviewclients }, #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + { "shiftswaptags", shiftswaptags }, + #endif // SHIFTSWAPTAGS_PATCH #if SELFRESTART_PATCH { "self_restart", self_restart }, #endif // SELFRESTART_PATCH @@ -1702,12 +1734,24 @@ static IPCCommand ipccommands[] = { #if SETBORDERPX_PATCH IPCCOMMAND( setborderpx, 1, {ARG_TYPE_SINT} ), #endif // SETBORDERPX_PATCH + #if SHIFTBOTH_PATCH + IPCCOMMAND( shiftboth, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTBOTH_PATCH + #if SHIFTTAG_PATCH + IPCCOMMAND( shifttag, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTTAG_PATCH + #if SHIFTTAGCLIENTS_PATCH + IPCCOMMAND( shifttagclients, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTVIEWCLIENTS_PATCH #if SHIFTVIEW_PATCH IPCCOMMAND( shiftview, 1, {ARG_TYPE_SINT} ), #endif // SHIFTVIEW_PATCH #if SHIFTVIEW_CLIENTS_PATCH IPCCOMMAND( shiftviewclients, 1, {ARG_TYPE_SINT} ), #endif // SHIFTVIEW_CLIENTS_PATCH + #if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH + IPCCOMMAND( shiftswaptags, 1, {ARG_TYPE_SINT} ), + #endif // SHIFTSWAPTAGS_PATCH #if STACKER_PATCH IPCCOMMAND( pushstack, 1, {ARG_TYPE_SINT} ), #endif // STACKER_PATCH diff --git a/patch/include.c b/patch/include.c index 17f2e81..5318ea2 100644 --- a/patch/include.c +++ b/patch/include.c @@ -232,6 +232,18 @@ #if SETBORDERPX_PATCH #include "setborderpx.c" #endif +#if SHIFTBOTH_PATCH +#include "shiftboth.c" +#endif +#if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH +#include "shiftswaptags.c" +#endif +#if SHIFTTAG_PATCH +#include "shifttag.c" +#endif +#if SHIFTTAGCLIENTS_PATCH +#include "shifttagclients.c" +#endif #if SHIFTVIEW_PATCH #include "shiftview.c" #endif diff --git a/patch/include.h b/patch/include.h index 0cf267a..6803c5d 100644 --- a/patch/include.h +++ b/patch/include.h @@ -234,6 +234,18 @@ #if SETBORDERPX_PATCH #include "setborderpx.h" #endif +#if SHIFTBOTH_PATCH +#include "shiftboth.h" +#endif +#if SHIFTSWAPTAGS_PATCH && SWAPTAGS_PATCH +#include "shiftswaptags.h" +#endif +#if SHIFTTAG_PATCH +#include "shifttag.h" +#endif +#if SHIFTTAGCLIENTS_PATCH +#include "shifttagclients.h" +#endif #if SHIFTVIEW_PATCH #include "shiftview.h" #endif diff --git a/patch/shiftboth.c b/patch/shiftboth.c new file mode 100644 index 0000000..5c7c916 --- /dev/null +++ b/patch/shiftboth.c @@ -0,0 +1,21 @@ +void +shiftboth(const Arg *arg) +{ + Arg shifted; + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui = selmon->tagset[selmon->seltags]; + #else + shifted.ui = selmon->tagset[selmon->seltags]; + #endif // SCRATCHPADS_PATCH + + if (arg->i > 0) /* left circular shift */ + shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (NUMTAGS - arg->i))); + else /* right circular shift */ + shifted.ui = ((shifted.ui >> -arg->i) | (shifted.ui << (NUMTAGS + arg->i))); + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui &= ~SPTAGMASK; + #endif // SCRATCHPADS_PATCH + + tag(&shifted); + view(&shifted); +} diff --git a/patch/shiftboth.h b/patch/shiftboth.h new file mode 100644 index 0000000..7a9b8c2 --- /dev/null +++ b/patch/shiftboth.h @@ -0,0 +1 @@ +static void shiftboth(const Arg *arg); diff --git a/patch/shiftswaptags.c b/patch/shiftswaptags.c new file mode 100644 index 0000000..d9f797a --- /dev/null +++ b/patch/shiftswaptags.c @@ -0,0 +1,20 @@ +/* swaps "tags" (all the clients) with the next/prev tag. */ +void +shiftswaptags(const Arg *arg) +{ + Arg shifted; + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui = selmon->tagset[selmon->seltags]; + #else + shifted.ui = selmon->tagset[selmon->seltags]; + #endif // SCRATCHPADS_PATCH + + if (arg->i > 0) /* left circular shift */ + shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (NUMTAGS - arg->i))); + else /* right circular shift */ + shifted.ui = ((shifted.ui >> -arg->i) | (shifted.ui << (NUMTAGS + arg->i))); + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui &= ~SPTAGMASK; + #endif // SCRATCHPADS_PATCH + swaptags(&shifted); +} diff --git a/patch/shiftswaptags.h b/patch/shiftswaptags.h new file mode 100644 index 0000000..1977e36 --- /dev/null +++ b/patch/shiftswaptags.h @@ -0,0 +1 @@ +static void shiftswaptags(const Arg *arg); diff --git a/patch/shifttag.c b/patch/shifttag.c new file mode 100644 index 0000000..97365f1 --- /dev/null +++ b/patch/shifttag.c @@ -0,0 +1,20 @@ +/* Sends a window to the next/prev tag */ +void +shifttag(const Arg *arg) +{ + Arg shifted; + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui = selmon->tagset[selmon->seltags]; + #else + shifted.ui = selmon->tagset[selmon->seltags]; + #endif // SCRATCHPADS_PATCH + + if (arg->i > 0) /* left circular shift */ + shifted.ui = ((shifted.ui << arg->i) | (shifted.ui >> (NUMTAGS - arg->i))); + else /* right circular shift */ + shifted.ui = ((shifted.ui >> -arg->i) | (shifted.ui << (NUMTAGS + arg->i))); + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui &= ~SPTAGMASK; + #endif // SCRATCHPADS_PATCH + tag(&shifted); +} diff --git a/patch/shifttag.h b/patch/shifttag.h new file mode 100644 index 0000000..624787f --- /dev/null +++ b/patch/shifttag.h @@ -0,0 +1 @@ +static void shifttag(const Arg *arg); diff --git a/patch/shifttagclients.c b/patch/shifttagclients.c new file mode 100644 index 0000000..e8da31d --- /dev/null +++ b/patch/shifttagclients.c @@ -0,0 +1,49 @@ +/* Sends a window to the next/prev tag that has a client, else it moves it to the next/prev one. */ +void +shifttagclients(const Arg *arg) +{ + Arg shifted; + Client *c; + unsigned int tagmask = 0; + + #if TAGSYNC_PATCH + Monitor *origselmon = selmon; + for (selmon = mons; selmon; selmon = selmon->next) + #endif // TAGSYNC_PATCH + for (c = selmon->clients; c; c = c->next) { + if (c == selmon->sel) + continue; + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + if (!(c->tags & SPTAGMASK)) + tagmask = tagmask | c->tags; + #elif SCRATCHPAD_ALT_1_PATCH + if (!(c->tags & SCRATCHPAD_MASK)) + tagmask = tagmask | c->tags; + #else + tagmask = tagmask | c->tags; + #endif // SCRATCHPADS_PATCH + } + #if TAGSYNC_PATCH + selmon = origselmon; + #endif // TAGSYNC_PATCH + + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; + #else + shifted.ui = selmon->tagset[selmon->seltags]; + #endif // SCRATCHPADS_PATCH + + do { + if (arg->i > 0) // left circular shift + shifted.ui = (shifted.ui << arg->i) + | (shifted.ui >> (NUMTAGS - arg->i)); + else // right circular shift + shifted.ui = (shifted.ui >> -arg->i) + | (shifted.ui << (NUMTAGS + arg->i)); + #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH + shifted.ui &= ~SPTAGMASK; + #endif // SCRATCHPADS_PATCH + } while (tagmask && !(shifted.ui & tagmask)); + + tag(&shifted); +} diff --git a/patch/shifttagclients.h b/patch/shifttagclients.h new file mode 100644 index 0000000..43049a0 --- /dev/null +++ b/patch/shifttagclients.h @@ -0,0 +1 @@ +static void shifttagclients(const Arg *arg); diff --git a/patch/shiftviewclients.c b/patch/shiftviewclients.c index 5755e7c..f64f42b 100644 --- a/patch/shiftviewclients.c +++ b/patch/shiftviewclients.c @@ -10,6 +10,8 @@ shiftviewclients(const Arg *arg) for (selmon = mons; selmon; selmon = selmon->next) #endif // TAGSYNC_PATCH for (c = selmon->clients; c; c = c->next) { + if (c == selmon->sel) + continue; #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH if (!(c->tags & SPTAGMASK)) tagmask = tagmask | c->tags; @@ -44,4 +46,3 @@ shiftviewclients(const Arg *arg) view(&shifted); } - diff --git a/patch/swaptags.c b/patch/swaptags.c index 7e1e920..d2341ef 100644 --- a/patch/swaptags.c +++ b/patch/swaptags.c @@ -28,4 +28,3 @@ swaptags(const Arg *arg) view(&((Arg) { .ui = newtag })); } - diff --git a/patches.def.h b/patches.def.h index 13c23fa..8c7ce35 100644 --- a/patches.def.h +++ b/patches.def.h @@ -267,6 +267,14 @@ #define SETBORDERPX_PATCH 0 +#define SHIFTBOTH_PATCH 0 + +#define SHIFTSWAPTAGS_PATCH 0 + +#define SHIFTTAG_PATCH 0 + +#define SHIFTTAGCLIENTS_PATCH 0 + #define SHIFTVIEW_PATCH 0 #define SHIFTVIEW_CLIENTS_PATCH 0