From 7c9be5fa718b730959f2648abb25eb194fbc3444 Mon Sep 17 00:00:00 2001 From: Jakub Date: Sat, 20 Jul 2024 01:28:43 -0400 Subject: [PATCH] added deck layout --- config.def.h | 2 + dwm.c | 28 +++++++++ patches/layouts/dwm-deck-6.2.diff | 77 +++++++++++++++++++++++ patches/layouts/dwm-deck-tilegap-6.1.diff | 55 ++++++++++++++++ scripts/layoutmenu.sh | 1 + 5 files changed, 163 insertions(+) create mode 100644 patches/layouts/dwm-deck-6.2.diff create mode 100644 patches/layouts/dwm-deck-tilegap-6.1.diff diff --git a/config.def.h b/config.def.h index f52477e..adc8b79 100644 --- a/config.def.h +++ b/config.def.h @@ -107,6 +107,7 @@ static const Layout layouts[] = { { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "[D]", deck }, }; /* key definitions */ @@ -151,6 +152,7 @@ static const Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_r, setlayout, {.v = &layouts[3]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY|ShiftMask, XK_t, togglealwaysontop, {0} }, diff --git a/dwm.c b/dwm.c index a435cc7..a8704b2 100644 --- a/dwm.c +++ b/dwm.c @@ -187,6 +187,7 @@ static void configure(Client *c); static void configurenotify(XEvent *e); static void configurerequest(XEvent *e); static Monitor *createmon(void); +static void deck(Monitor *m); static void destroynotify(XEvent *e); static void detach(Client *c); static void detachstack(Client *c); @@ -885,6 +886,33 @@ destroynotify(XEvent *e) unmanage(c->swallowing, 1); } +void +deck(Monitor *m) { + unsigned int i, n, h, mw, my, ns; + Client *c; + + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if(n == 0) + return; + + if(n > m->nmaster) { + mw = m->nmaster ? m->ww * m->mfact : 0; + ns = m->nmaster > 0 ? 2 : 1; + snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n - m->nmaster); + } else { + mw = m->ww; + ns = 1; + } + for(i = 0, my = gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if(i < m->nmaster) { + h = (m->wh - my) / (MIN(n, m->nmaster) - i) - gappx; + resize(c, m->wx + gappx, m->wy + my, mw - (2*c->bw) - gappx*(5-ns)/2, h - (2*c->bw), False); + my += HEIGHT(c) + gappx; + } + else + resize(c, m->wx + mw + gappx/ns, m->wy + gappx, m->ww - mw - (2*c->bw) - gappx*(5-ns)/2, m->wh - (2*c->bw) - 2*gappx, False); +} + void detach(Client *c) { diff --git a/patches/layouts/dwm-deck-6.2.diff b/patches/layouts/dwm-deck-6.2.diff new file mode 100644 index 0000000..b5afed7 --- /dev/null +++ b/patches/layouts/dwm-deck-6.2.diff @@ -0,0 +1,77 @@ +From a071b060a1b9b94bcb167b988cf7774ceb870aad Mon Sep 17 00:00:00 2001 +From: Jack Bird +Date: Mon, 2 Aug 2021 18:44:05 +0100 +Subject: [PATCH] deck patch works with 6.2 + +--- + config.def.h | 2 ++ + dwm.c | 26 ++++++++++++++++++++++++++ + 2 files changed, 28 insertions(+) + +diff --git a/config.def.h b/config.def.h +index a2ac963..d865e18 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -42,6 +42,7 @@ static const Layout layouts[] = { + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { "[D]", deck }, + }; + + /* key definitions */ +@@ -77,6 +78,7 @@ static Key keys[] = { + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, ++ { MODKEY, XK_r, setlayout, {.v = &layouts[3]} }, + { MODKEY, XK_space, setlayout, {0} }, + { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, + { MODKEY, XK_0, view, {.ui = ~0 } }, +diff --git a/dwm.c b/dwm.c +index 5e4d494..c67ff91 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -157,6 +157,7 @@ static void configure(Client *c); + static void configurenotify(XEvent *e); + static void configurerequest(XEvent *e); + static Monitor *createmon(void); ++static void deck(Monitor *m); + static void destroynotify(XEvent *e); + static void detach(Client *c); + static void detachstack(Client *c); +@@ -655,6 +656,31 @@ destroynotify(XEvent *e) + unmanage(c, 1); + } + ++void ++deck(Monitor *m) { ++ unsigned int i, n, h, mw, my; ++ Client *c; ++ ++ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if(n == 0) ++ return; ++ ++ if(n > m->nmaster) { ++ mw = m->nmaster ? m->ww * m->mfact : 0; ++ snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n - m->nmaster); ++ } ++ else ++ mw = m->ww; ++ for(i = my = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if(i < m->nmaster) { ++ h = (m->wh - my) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False); ++ my += HEIGHT(c); ++ } ++ else ++ resize(c, m->wx + mw, m->wy, m->ww - mw - (2*c->bw), m->wh - (2*c->bw), False); ++} ++ + void + detach(Client *c) + { +-- +2.32.0 + diff --git a/patches/layouts/dwm-deck-tilegap-6.1.diff b/patches/layouts/dwm-deck-tilegap-6.1.diff new file mode 100644 index 0000000..30b6e83 --- /dev/null +++ b/patches/layouts/dwm-deck-tilegap-6.1.diff @@ -0,0 +1,55 @@ +From a9e442ec18683e2255ffef74404c283bbb0b6381 Mon Sep 17 00:00:00 2001 +From: aleks +Date: Thu, 23 May 2019 23:27:59 +0200 +Subject: [PATCH] Make deck-patch work with the tilegap-patch + +Apply this patch on top of the deck-patch to make it work with the +tilegap-patch. +--- + dwm.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +diff --git a/dwm.c b/dwm.c +index 5b68242..1c17891 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -656,7 +656,7 @@ createmon(void) + + void + deck(Monitor *m) { +- unsigned int i, n, h, mw, my; ++ unsigned int i, n, h, mw, my, ns; + Client *c; + + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); +@@ -665,18 +665,20 @@ deck(Monitor *m) { + + if(n > m->nmaster) { + mw = m->nmaster ? m->ww * m->mfact : 0; ++ ns = m->nmaster > 0 ? 2 : 1; + snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n - m->nmaster); +- } +- else ++ } else { + mw = m->ww; +- for(i = my = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ ns = 1; ++ } ++ for(i = 0, my = gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if(i < m->nmaster) { +- h = (m->wh - my) / (MIN(n, m->nmaster) - i); +- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False); +- my += HEIGHT(c); ++ h = (m->wh - my) / (MIN(n, m->nmaster) - i) - gappx; ++ resize(c, m->wx + gappx, m->wy + my, mw - (2*c->bw) - gappx*(5-ns)/2, h - (2*c->bw), False); ++ my += HEIGHT(c) + gappx; + } + else +- resize(c, m->wx + mw, m->wy, m->ww - mw - (2*c->bw), m->wh - (2*c->bw), False); ++ resize(c, m->wx + mw + gappx/ns, m->wy + gappx, m->ww - mw - (2*c->bw) - gappx*(5-ns)/2, m->wh - (2*c->bw) - 2*gappx, False); + } + + void +-- +2.21.0 + diff --git a/scripts/layoutmenu.sh b/scripts/layoutmenu.sh index 1bf95f2..8370b12 100755 --- a/scripts/layoutmenu.sh +++ b/scripts/layoutmenu.sh @@ -4,4 +4,5 @@ cat <<> Floating Layout 1 [M] Monocle Layout 2 +[D] Deck Layout 3 EOF