aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgonzo <gonzo@toniatuh.com>2023-05-17 20:43:21 +0200
committergonzo <gonzo@toniatuh.com>2023-05-17 20:43:21 +0200
commit788731079849b41c6e0cb2c4baa2665aa3bc74c0 (patch)
treee2684234eac75062885da6e67fe24c26600e7ca2
parentb206a544652e7f1c06172b4c059c057cf946d9ef (diff)
downloaddwm-788731079849b41c6e0cb2c4baa2665aa3bc74c0.tar.gz
cycle layouts
-rw-r--r--config.h5
-rw-r--r--dwm.19
-rw-r--r--dwm.c18
3 files changed, 28 insertions, 4 deletions
diff --git a/config.h b/config.h
index bc1c11f..d3e5175 100644
--- a/config.h
+++ b/config.h
@@ -59,6 +59,7 @@ static const Layout layouts[] = {
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
+ { NULL, NULL },
};
/* key definitions */
@@ -92,7 +93,9 @@ static const Key keys[] = {
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY|ShiftMask, XK_Return, zoom, {0} },
- { MODKEY, XK_Tab, view, {0} },
+ //{ MODKEY, XK_Tab, view, {0} },
+ { MODKEY, XK_Tab, cyclelayout, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_Tab, cyclelayout, {.i = -1 } },
{ MODKEY|ShiftMask, XK_q, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, togglefullscr, {0} },
diff --git a/dwm.1 b/dwm.1
index bc5a7e5..21469ba 100644
--- a/dwm.1
+++ b/dwm.1
@@ -95,6 +95,12 @@ Sets monocle layout.
.B Mod1\-space
Toggles between current and previous layout.
.TP
+.B Mod1\-Shift\-Tab
+Cycles backwards in layout list.
+.TP
+.B Mod1\-Tab
+Cycles forwards in layout list.
+.TP
.B Mod1\-j
Focus next window.
.TP
@@ -125,9 +131,6 @@ Toggle fullscreen for focused window.
.B Mod1\-Shift\-space
Toggle focused window between tiled and floating state.
.TP
-.B Mod1\-Tab
-Toggles to the previously selected tags.
-.TP
.B Mod1\-Shift\-[1..n]
Apply nth tag to focused window.
.TP
diff --git a/dwm.c b/dwm.c
index 5dcb278..1db2f5e 100644
--- a/dwm.c
+++ b/dwm.c
@@ -160,6 +160,7 @@ static void configure(Client *c);
static void configurenotify(XEvent *e);
static void configurerequest(XEvent *e);
static Monitor *createmon(void);
+static void cyclelayout(const Arg *arg);
static void destroynotify(XEvent *e);
static void detach(Client *c);
static void detachstack(Client *c);
@@ -672,6 +673,23 @@ createmon(void)
}
void
+cyclelayout(const Arg *arg) {
+ Layout *l;
+ for(l = (Layout *)layouts; l != selmon->lt[selmon->sellt]; l++);
+ if(arg->i > 0) {
+ if(l->symbol && (l + 1)->symbol)
+ setlayout(&((Arg) { .v = (l + 1) }));
+ else
+ setlayout(&((Arg) { .v = layouts }));
+ } else {
+ if(l != layouts && (l - 1)->symbol)
+ setlayout(&((Arg) { .v = (l - 1) }));
+ else
+ setlayout(&((Arg) { .v = &layouts[LENGTH(layouts) - 2] }));
+ }
+}
+
+void
destroynotify(XEvent *e)
{
Client *c;