diff --git a/config.def.h b/config.def.h index 95ecb05..d74e84f 100644 --- a/config.def.h +++ b/config.def.h @@ -195,6 +195,8 @@ static Key keys[] = { { 0, XF86XK_AudioMute, 0, spawn, {.v = volumeToggle } }, { 0, XF86XK_MonBrightnessUp, 0, spawn, {.v = brightnessUp } }, { 0, XF86XK_MonBrightnessDown, 0, spawn, {.v = brightnessDown } }, + { MODKEY, XK_Right, 0, shiftview, {.i = 1 } }, + { MODKEY, XK_Left, 0, shiftview, {.i = -1 } }, // On the pinephone, I want a single press of the power button to put the phone in sleep mode. // I want a double press to toggle the keyboard // I want a hold press to bring up the power menu diff --git a/dwm.c b/dwm.c index cd1419b..34a8a60 100644 --- a/dwm.c +++ b/dwm.c @@ -221,6 +221,7 @@ static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); static void seturgent(Client *c, int urg); +static void shiftview(const Arg *arg); static void showhide(Client *c); static void sigchld(int unused); static void spawn(const Arg *arg); @@ -1873,6 +1874,26 @@ seturgent(Client *c, int urg) XFree(wmh); } +/** Function to shift the current view to the left/right + * + * @param: "arg->i" stores the number of tags to shift right (positive value) + * or left (negative value) + */ +void +shiftview(const Arg *arg) { + Arg shifted; + + if(arg->i > 0) // left circular shift + shifted.ui = (selmon->tagset[selmon->seltags] << arg->i) + | (selmon->tagset[selmon->seltags] >> (LENGTH(tags) - arg->i)); + + else // right circular shift + shifted.ui = selmon->tagset[selmon->seltags] >> (- arg->i) + | selmon->tagset[selmon->seltags] << (LENGTH(tags) + arg->i); + + view(&shifted); +} + void showhide(Client *c) {