dwm-layoutscroll-6.2.diff (1989B)
1 diff --git a/config.def.h b/config.def.h 2 index 4c56466..11ee7b5 100644 3 --- a/config.def.h 4 +++ b/config.def.h 5 @@ -90,6 +90,8 @@ static Key keys[] = { 6 { MODKEY, XK_period, focusmon, {.i = +1 } }, 7 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, 8 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, 9 + { MODKEY|ShiftMask, XK_h, layoutscroll, {.i = -1 } }, 10 + { MODKEY|ShiftMask, XK_l, layoutscroll, {.i = +1 } }, 11 TAGKEYS( XK_1, 0) 12 TAGKEYS( XK_2, 1) 13 TAGKEYS( XK_3, 2) 14 diff --git a/dwm.c b/dwm.c 15 index 1e37fcf..24effbc 100644 16 --- a/dwm.c 17 +++ b/dwm.c 18 @@ -148,6 +148,7 @@ struct Monitor { 19 Monitor *next; 20 Window barwin; 21 const Layout *lt[2]; 22 + int ltcur; /* current layout */ 23 }; 24 25 typedef struct { 26 @@ -227,6 +228,7 @@ static void sendmon(Client *c, Monitor *m); 27 static void setclientstate(Client *c, long state); 28 static void setfocus(Client *c); 29 static void setfullscreen(Client *c, int fullscreen); 30 +static void layoutscroll(const Arg *arg); 31 static void setlayout(const Arg *arg); 32 static void setmfact(const Arg *arg); 33 static void setup(void); 34 @@ -725,6 +727,7 @@ createmon(void) 35 m->nmaster = nmaster; 36 m->showbar = showbar; 37 m->topbar = topbar; 38 + m->ltcur = 0; 39 m->lt[0] = &layouts[0]; 40 m->lt[1] = &layouts[1 % LENGTH(layouts)]; 41 strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); 42 @@ -1667,6 +1670,25 @@ setfullscreen(Client *c, int fullscreen) 43 } 44 } 45 46 +void 47 +layoutscroll(const Arg *arg) 48 +{ 49 + if (!arg || !arg->i) 50 + return; 51 + int switchto = selmon->ltcur + arg->i; 52 + int l = LENGTH(layouts); 53 + 54 + if (switchto == l) 55 + switchto = 0; 56 + else if(switchto < 0) 57 + switchto = l - 1; 58 + 59 + selmon->ltcur = switchto; 60 + Arg arg2 = {.v= &layouts[switchto] }; 61 + setlayout(&arg2); 62 + 63 +} 64 + 65 void 66 setlayout(const Arg *arg) 67 {