Xinqi Bao's Git

patch: fibonacci
[dwm.git] / patches / dwm-fibonacci-20200418-c82db69.diff
1 From ec9f55b6005cfa3b025b3d700c61af3ce539d057 Mon Sep 17 00:00:00 2001
2 From: Niki Yoshiuchi <nyoshiuchi@gmail.com>
3 Date: Sat, 18 Apr 2020 09:55:26 -0700
4 Subject: [PATCH] Adding the fibonacci layout patch
5
6 ---
7 config.def.h | 5 ++++
8 fibonacci.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9 2 files changed, 71 insertions(+)
10 create mode 100644 fibonacci.c
11
12 diff --git a/config.def.h b/config.def.h
13 index 1c0b587..5708487 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -36,11 +36,14 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95]
17 static const int nmaster = 1; /* number of clients in master area */
18 static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
19
20 +#include "fibonacci.c"
21 static const Layout layouts[] = {
22 /* symbol arrange function */
23 { "[]=", tile }, /* first entry is default */
24 { "><>", NULL }, /* no layout function means floating behavior */
25 { "[M]", monocle },
26 + { "[@]", spiral },
27 + { "[\\]", dwindle },
28 };
29
30 /* key definitions */
31 @@ -76,6 +79,8 @@ static Key keys[] = {
32 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
33 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
34 { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
35 + { MODKEY, XK_r, setlayout, {.v = &layouts[3]} },
36 + { MODKEY|ShiftMask, XK_r, setlayout, {.v = &layouts[4]} },
37 { MODKEY, XK_space, setlayout, {0} },
38 { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
39 { MODKEY, XK_0, view, {.ui = ~0 } },
40 diff --git a/fibonacci.c b/fibonacci.c
41 new file mode 100644
42 index 0000000..fce0a57
43 --- /dev/null
44 +++ b/fibonacci.c
45 @@ -0,0 +1,66 @@
46 +void
47 +fibonacci(Monitor *mon, int s) {
48 + unsigned int i, n, nx, ny, nw, nh;
49 + Client *c;
50 +
51 + for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
52 + if(n == 0)
53 + return;
54 +
55 + nx = mon->wx;
56 + ny = 0;
57 + nw = mon->ww;
58 + nh = mon->wh;
59 +
60 + for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
61 + if((i % 2 && nh / 2 > 2 * c->bw)
62 + || (!(i % 2) && nw / 2 > 2 * c->bw)) {
63 + if(i < n - 1) {
64 + if(i % 2)
65 + nh /= 2;
66 + else
67 + nw /= 2;
68 + if((i % 4) == 2 && !s)
69 + nx += nw;
70 + else if((i % 4) == 3 && !s)
71 + ny += nh;
72 + }
73 + if((i % 4) == 0) {
74 + if(s)
75 + ny += nh;
76 + else
77 + ny -= nh;
78 + }
79 + else if((i % 4) == 1)
80 + nx += nw;
81 + else if((i % 4) == 2)
82 + ny += nh;
83 + else if((i % 4) == 3) {
84 + if(s)
85 + nx += nw;
86 + else
87 + nx -= nw;
88 + }
89 + if(i == 0)
90 + {
91 + if(n != 1)
92 + nw = mon->ww * mon->mfact;
93 + ny = mon->wy;
94 + }
95 + else if(i == 1)
96 + nw = mon->ww - nw;
97 + i++;
98 + }
99 + resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
100 + }
101 +}
102 +
103 +void
104 +dwindle(Monitor *mon) {
105 + fibonacci(mon, 1);
106 +}
107 +
108 +void
109 +spiral(Monitor *mon) {
110 + fibonacci(mon, 0);
111 +}
112 --
113 2.20.1
114