Xinqi Bao's Git

patch: fibonacci
authorXinqi Bao <[email protected]>
Mon, 14 Mar 2022 10:25:58 +0000 (18:25 +0800)
committerXinqi Bao <[email protected]>
Mon, 14 Mar 2022 10:25:58 +0000 (18:25 +0800)
config.def.h
fibonacci.c [new file with mode: 0644]
patches/dwm-fibonacci-20200418-c82db69.diff [new file with mode: 0644]

index 54cd271..a758eb4 100644 (file)
@@ -50,10 +50,13 @@ static const int nmaster     = 1;    /* number of clients in master area */
 static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
 static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
 
 static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
 static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
 
+#include "fibonacci.c"
 static const Layout layouts[] = {
        /* symbol     arrange function */
        { "[]=",      tile },    /* first entry is default */
        { "[M]",      monocle },
 static const Layout layouts[] = {
        /* symbol     arrange function */
        { "[]=",      tile },    /* first entry is default */
        { "[M]",      monocle },
+       { "[@]",      spiral },
+       { "[\\]",     dwindle },
 
        { "><>",      NULL },    /* no layout function means floating behavior */
 };
 
        { "><>",      NULL },    /* no layout function means floating behavior */
 };
@@ -108,7 +111,9 @@ static Key keys[] = {
     /* layout */
        { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
        { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[1]} },
     /* layout */
        { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
        { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[1]} },
-    { MODKEY|ShiftMask,             XK_f,      togglefullscr,  {0} },
+       { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[2]} },
+       { MODKEY,                       XK_r,      setlayout,      {.v = &layouts[3]} },
+       { MODKEY|ShiftMask,             XK_f,      togglefullscr,  {0} },
        { MODKEY,                       XK_space,  zoom,           {0} },
        { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 
        { MODKEY,                       XK_space,  zoom,           {0} },
        { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 
diff --git a/fibonacci.c b/fibonacci.c
new file mode 100644 (file)
index 0000000..fce0a57
--- /dev/null
@@ -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);
+}
diff --git a/patches/dwm-fibonacci-20200418-c82db69.diff b/patches/dwm-fibonacci-20200418-c82db69.diff
new file mode 100644 (file)
index 0000000..81bba7a
--- /dev/null
@@ -0,0 +1,114 @@
+From ec9f55b6005cfa3b025b3d700c61af3ce539d057 Mon Sep 17 00:00:00 2001
+From: Niki Yoshiuchi <[email protected]>
+Date: Sat, 18 Apr 2020 09:55:26 -0700
+Subject: [PATCH] Adding the fibonacci layout patch
+
+---
+ config.def.h |  5 ++++
+ fibonacci.c  | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 71 insertions(+)
+ create mode 100644 fibonacci.c
+
+diff --git a/config.def.h b/config.def.h
+index 1c0b587..5708487 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -36,11 +36,14 @@ 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 */
+       { "><>",      NULL },    /* no layout function means floating behavior */
+       { "[M]",      monocle },
++      { "[@]",      spiral },
++      { "[\\]",      dwindle },
+ };
+ /* key definitions */
+@@ -76,6 +79,8 @@ 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|ShiftMask,             XK_r,      setlayout,      {.v = &layouts[4]} },
+       { 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);
++}
+-- 
+2.20.1
+