From 4fc4de9e21bd369067366ab72d4a3d8e4a2b75f0 Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 24 Mar 2020 13:16:10 +0000 Subject: [PATCH 1/3] update README --- README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README b/README index 9571c1d..613ec7f 100644 --- a/README +++ b/README @@ -54,5 +54,8 @@ Customisations * Custom configuration of config.h * windows with title of 'WM_FORCE_FLOATING' are set to floating automatically. +* When moving window to a different tag, focus follows the destination tag. * Merged patch: https://dwm.suckless.org/patches/bottomstack/dwm-bottomstack-6.1.diff * Merged patch: https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff +* Merged patch: https://dwm.suckless.org/patches/warp/dwm-warp-git-20160626-7af4d43.diff +* Merged patch: https://dwm.suckless.org/patches/dwmc/dwm-dwmc-6.2.diff From 14f781f3a96565fd275bc6724c033f15625877fd Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 24 Mar 2020 13:43:59 +0000 Subject: [PATCH 2/3] apply patch cfacts --- README | 1 + config.def.h | 3 +++ config.h | 3 +++ dwm.c | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/README b/README index 613ec7f..2af1e73 100644 --- a/README +++ b/README @@ -59,3 +59,4 @@ Customisations * Merged patch: https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff * Merged patch: https://dwm.suckless.org/patches/warp/dwm-warp-git-20160626-7af4d43.diff * Merged patch: https://dwm.suckless.org/patches/dwmc/dwm-dwmc-6.2.diff +* Merged patch:https: //dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2.diff diff --git a/config.def.h b/config.def.h index 18cafb1..924426e 100644 --- a/config.def.h +++ b/config.def.h @@ -72,6 +72,9 @@ static Key keys[] = { { MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_h, setmfact, {.f = -0.05} }, { MODKEY, XK_l, setmfact, {.f = +0.05} }, + { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} }, + { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} }, + { MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, { MODKEY|ShiftMask, XK_c, killclient, {0} }, diff --git a/config.h b/config.h index 2113de0..45e16aa 100644 --- a/config.h +++ b/config.h @@ -76,6 +76,9 @@ static Key keys[] = { { MODKEY, XK_i, incnmaster, {.i = +1 } }, { MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_h, setmfact, {.f = -0.05} }, + { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} }, + { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} }, + { MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} }, { MODKEY, XK_l, setmfact, {.f = +0.05} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, diff --git a/dwm.c b/dwm.c index 9c0295f..003e56b 100644 --- a/dwm.c +++ b/dwm.c @@ -87,6 +87,7 @@ typedef struct Client Client; struct Client { char name[256]; float mina, maxa; + float cfact; int x, y, w, h; int oldx, oldy, oldw, oldh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; @@ -206,6 +207,7 @@ static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); static void setlayout(const Arg *arg); +static void setcfact(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); static void seturgent(Client *c, int urg); @@ -1087,6 +1089,7 @@ manage(Window w, XWindowAttributes *wa) c->w = c->oldw = wa->width; c->h = c->oldh = wa->height; c->oldbw = wa->border_width; + c->cfact = 1.0; updatetitle(c); if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { @@ -1572,6 +1575,23 @@ setlayout(const Arg *arg) drawbar(selmon); } +void setcfact(const Arg *arg) { + float f; + Client *c; + + c = selmon->sel; + + if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f + c->cfact; + if(arg->f == 0.0) + f = 1.0; + else if(f < 0.25 || f > 4.0) + return; + c->cfact = f; + arrange(selmon); +} + /* arg > 1.0 will set mfact absolutely */ void setmfact(const Arg *arg) @@ -1736,9 +1756,15 @@ void tile(Monitor *m) { unsigned int i, n, h, mw, my, ty; + float mfacts = 0, sfacts = 0; Client *c; - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { + if (n < m->nmaster) + mfacts += c->cfact; + else + sfacts += c->cfact; + } if (n == 0) return; @@ -1748,13 +1774,15 @@ tile(Monitor *m) mw = m->ww; for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { - h = (m->wh - my) / (MIN(n, m->nmaster) - i); + h = (m->wh - my) * (c->cfact / mfacts); resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); my += HEIGHT(c); + mfacts -= c->cfact; } else { h = (m->wh - ty) / (n - i); resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); ty += HEIGHT(c); + sfacts -= c->cfact; } } From 88316278946f21b7708f533e0bc12c0db71c310b Mon Sep 17 00:00:00 2001 From: ray Date: Tue, 24 Mar 2020 13:54:44 +0000 Subject: [PATCH 3/3] apply patch fibonacci --- README | 3 ++- config.def.h | 3 +++ config.h | 3 +++ fibonacci.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 fibonacci.c diff --git a/README b/README index 2af1e73..77bff78 100644 --- a/README +++ b/README @@ -59,4 +59,5 @@ Customisations * Merged patch: https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff * Merged patch: https://dwm.suckless.org/patches/warp/dwm-warp-git-20160626-7af4d43.diff * Merged patch: https://dwm.suckless.org/patches/dwmc/dwm-dwmc-6.2.diff -* Merged patch:https: //dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2.diff +* Merged patch: https: //dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2.diff +* Merged patch: https://dwm.suckless.org/patches/fibonacci/dwm-fibonacci-5.8.2.diff diff --git a/config.def.h b/config.def.h index 924426e..b17cc80 100644 --- a/config.def.h +++ b/config.def.h @@ -36,6 +36,7 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ +#include "fibonacci.c" static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ @@ -43,6 +44,8 @@ static const Layout layouts[] = { { "[M]", monocle }, { "TTT", bstack }, { "===", bstackhoriz }, + { "[@]", spiral }, + { "[\\]", dwindle }, }; /* key definitions */ diff --git a/config.h b/config.h index 45e16aa..08fbd3a 100644 --- a/config.h +++ b/config.h @@ -41,6 +41,7 @@ static const float mfact = 0.50; /* factor of master area size [0.05..0.95] static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ +#include "fibonacci.c" static const Layout layouts[] = { /* symbol arrange function */ { "::[]=", tile }, /* first entry is default */ @@ -48,6 +49,7 @@ static const Layout layouts[] = { { "[M]", monocle }, { "TTT", bstack }, { "===", bstackhoriz }, + { "[@]", dwindle }, }; /* key definitions */ @@ -88,6 +90,7 @@ static Key keys[] = { { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_v, setlayout, {.v = &layouts[3]} }, { MODKEY|ShiftMask, XK_v, setlayout, {.v = &layouts[4]} }, + { MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[5]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/fibonacci.c b/fibonacci.c new file mode 100644 index 0000000..fce0a57 --- /dev/null +++ b/fibonacci.c @@ -0,0 +1,66 @@ +void +fibonacci(Monitor *mon, int s) { + unsigned int i, n, nx, ny, nw, nh; + Client *c; + + for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++); + if(n == 0) + return; + + nx = mon->wx; + ny = 0; + nw = mon->ww; + nh = mon->wh; + + for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) { + if((i % 2 && nh / 2 > 2 * c->bw) + || (!(i % 2) && nw / 2 > 2 * c->bw)) { + if(i < n - 1) { + if(i % 2) + nh /= 2; + else + nw /= 2; + if((i % 4) == 2 && !s) + nx += nw; + else if((i % 4) == 3 && !s) + ny += nh; + } + if((i % 4) == 0) { + if(s) + ny += nh; + else + ny -= nh; + } + else if((i % 4) == 1) + nx += nw; + else if((i % 4) == 2) + ny += nh; + else if((i % 4) == 3) { + if(s) + nx += nw; + else + nx -= nw; + } + if(i == 0) + { + if(n != 1) + nw = mon->ww * mon->mfact; + ny = mon->wy; + } + else if(i == 1) + nw = mon->ww - nw; + i++; + } + resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False); + } +} + +void +dwindle(Monitor *mon) { + fibonacci(mon, 1); +} + +void +spiral(Monitor *mon) { + fibonacci(mon, 0); +}