Revert fibonacci, gaplessgrid, centered{master,floatingmaster} patches
This commit is contained in:
@@ -55,8 +55,6 @@ static const Layout layouts[] = {
|
|||||||
{ "[]=", tile }, /* first entry is default */
|
{ "[]=", tile }, /* first entry is default */
|
||||||
{ "><>", NULL }, /* no layout function means floating behavior */
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
||||||
{ "[M]", monocle },
|
{ "[M]", monocle },
|
||||||
{ "|M|", centeredmaster },
|
|
||||||
{ ">M>", centeredfloatingmaster },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
@@ -101,8 +99,6 @@ static const Key keys[] = {
|
|||||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
{ MODKEY, XK_u, setlayout, {.v = &layouts[3]} },
|
|
||||||
{ MODKEY, XK_o, setlayout, {.v = &layouts[4]} },
|
|
||||||
{ MODKEY, XK_space, setlayout, {0} },
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
|
|||||||
15
config.h
15
config.h
@@ -67,19 +67,11 @@ 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 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 lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
|
||||||
|
|
||||||
#include "./fibonacci.c"
|
|
||||||
#include "./gaplessgrid.c"
|
|
||||||
|
|
||||||
static const Layout layouts[] = {
|
static const Layout layouts[] = {
|
||||||
/* symbol arrange function */
|
/* symbol arrange function */
|
||||||
{ "{M}", monocle }, /* first entry is default */
|
{ "{M}", monocle }, /* first entry is default */
|
||||||
{ "[T]=", tile },
|
{ "[T]=", tile },
|
||||||
{ "<F>=", NULL }, /* no layout function means floating behavior */
|
{ "<F>=", NULL }, /* no layout function means floating behavior */
|
||||||
{ "|M|", centeredmaster },
|
|
||||||
{ ">M>", centeredfloatingmaster },
|
|
||||||
{ "[@]", spiral },
|
|
||||||
{ "[\\]", dwindle },
|
|
||||||
{ "###", gaplessgrid },
|
|
||||||
{ "[D]", deck },
|
{ "[D]", deck },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -132,12 +124,7 @@ static const Key keys[] = {
|
|||||||
{ MODKEY|ShiftMask, XK_m, setlayout, {.v = &layouts[0]} },
|
{ MODKEY|ShiftMask, XK_m, setlayout, {.v = &layouts[0]} },
|
||||||
{ MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[1]} },
|
{ MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[1]} },
|
||||||
{ MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[2]} },
|
{ MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[2]} },
|
||||||
{ MODKEY|ShiftMask, XK_o, setlayout, {.v = &layouts[4]} },
|
{ MODKEY|ShiftMask, XK_d, setlayout, {.v = &layouts[3]} },
|
||||||
{ MODKEY|ShiftMask, XK_d, setlayout, {.v = &layouts[8]} },
|
|
||||||
// { MODKEY|ShiftMask, XK_u, setlayout, {.v = &layouts[3]} },
|
|
||||||
// { MODKEY|ShiftMask, XK_s, setlayout, {.v = &layouts[5]} },
|
|
||||||
// { MODKEY|ShiftMask, XK_D, setlayout, {.v = &layouts[6]} },
|
|
||||||
// { MODKEY|ShiftMask, XK_g, setlayout, {.v = &layouts[7]} },
|
|
||||||
{ MODKEY|ShiftMask, XK_space, setlayout, {0} },
|
{ MODKEY|ShiftMask, XK_space, setlayout, {0} },
|
||||||
{ MODKEY, XK_space, togglefloating, {0} },
|
{ MODKEY, XK_space, togglefloating, {0} },
|
||||||
{ MODKEY, XK_n, focusmon, {.i = -1 } },
|
{ MODKEY, XK_n, focusmon, {.i = -1 } },
|
||||||
|
|||||||
12
dwm.1
12
dwm.1
@@ -17,13 +17,7 @@ area on the left contains one window by default, and the stacking area
|
|||||||
on the right contains all other windows. The number of master area
|
on the right contains all other windows. The number of master area
|
||||||
windows can be adjusted from zero to an arbitrary number.
|
windows can be adjusted from zero to an arbitrary number.
|
||||||
.IP \[bu]
|
.IP \[bu]
|
||||||
monocle (normal or floating master)
|
monocle: all windows are maximised to the screen size.
|
||||||
|
|
||||||
Normal: all windows are maximised to the screen size.
|
|
||||||
|
|
||||||
Floating master: the master clients are placed floating in the centre
|
|
||||||
of the screen while the remaining stacking clients are placed side by
|
|
||||||
side vertically.
|
|
||||||
.IP \[bu]
|
.IP \[bu]
|
||||||
deck: the stacking clients are placed floating on top of each other
|
deck: the stacking clients are placed floating on top of each other
|
||||||
such that there are only two partitions of the screen space.
|
such that there are only two partitions of the screen space.
|
||||||
@@ -157,10 +151,6 @@ Set layout to floating.
|
|||||||
.B Mod\-Shift\-m
|
.B Mod\-Shift\-m
|
||||||
Set layout to monocle.
|
Set layout to monocle.
|
||||||
|
|
||||||
.TP
|
|
||||||
.B Mod\-Shift\-o
|
|
||||||
Set layout to centred floating monocle.
|
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B Mod\-Shift\-d
|
.B Mod\-Shift\-d
|
||||||
Set layout to deck layout.
|
Set layout to deck layout.
|
||||||
|
|||||||
105
dwm.c
105
dwm.c
@@ -245,8 +245,6 @@ static int xerror(Display *dpy, XErrorEvent *ee);
|
|||||||
static int xerrordummy(Display *dpy, XErrorEvent *ee);
|
static int xerrordummy(Display *dpy, XErrorEvent *ee);
|
||||||
static int xerrorstart(Display *dpy, XErrorEvent *ee);
|
static int xerrorstart(Display *dpy, XErrorEvent *ee);
|
||||||
static void zoom(const Arg *arg);
|
static void zoom(const Arg *arg);
|
||||||
static void centeredmaster(Monitor *m);
|
|
||||||
static void centeredfloatingmaster(Monitor *m);
|
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
static const char broken[] = "broken";
|
static const char broken[] = "broken";
|
||||||
@@ -2566,106 +2564,3 @@ inplacerotate(const Arg *arg)
|
|||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
focus(c);
|
focus(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
centeredmaster(Monitor *m)
|
|
||||||
{
|
|
||||||
unsigned int i, n, h, mw, mx, my, oty, ety, tw;
|
|
||||||
Client *c;
|
|
||||||
|
|
||||||
/* count number of clients in the selected monitor */
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
|
||||||
if (n == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* initialize areas */
|
|
||||||
mw = m->ww;
|
|
||||||
mx = 0;
|
|
||||||
my = 0;
|
|
||||||
tw = mw;
|
|
||||||
|
|
||||||
if (n > m->nmaster) {
|
|
||||||
/* go mfact box in the center if more than nmaster clients */
|
|
||||||
mw = m->nmaster ? m->ww * m->mfact : 0;
|
|
||||||
tw = m->ww - mw;
|
|
||||||
|
|
||||||
if (n - m->nmaster > 1) {
|
|
||||||
/* only one client */
|
|
||||||
mx = (m->ww - mw) / 2;
|
|
||||||
tw = (m->ww - mw) / 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
oty = 0;
|
|
||||||
ety = 0;
|
|
||||||
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
|
||||||
if (i < m->nmaster) {
|
|
||||||
/* nmaster clients are stacked vertically, in the center
|
|
||||||
* of the screen */
|
|
||||||
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
|
||||||
resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw),
|
|
||||||
h - (2*c->bw), 0);
|
|
||||||
my += HEIGHT(c);
|
|
||||||
} else {
|
|
||||||
/* stack clients are stacked vertically */
|
|
||||||
if ((i - m->nmaster) % 2 ) {
|
|
||||||
h = (m->wh - ety) / ( (1 + n - i) / 2);
|
|
||||||
resize(c, m->wx, m->wy + ety, tw - (2*c->bw),
|
|
||||||
h - (2*c->bw), 0);
|
|
||||||
ety += HEIGHT(c);
|
|
||||||
} else {
|
|
||||||
h = (m->wh - oty) / ((1 + n - i) / 2);
|
|
||||||
resize(c, m->wx + mx + mw, m->wy + oty,
|
|
||||||
tw - (2*c->bw), h - (2*c->bw), 0);
|
|
||||||
oty += HEIGHT(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
centeredfloatingmaster(Monitor *m)
|
|
||||||
{
|
|
||||||
unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
|
|
||||||
Client *c;
|
|
||||||
|
|
||||||
/* count number of clients in the selected monitor */
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
|
||||||
if (n == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* initialize nmaster area */
|
|
||||||
if (n > m->nmaster) {
|
|
||||||
/* go mfact box in the center if more than nmaster clients */
|
|
||||||
if (m->ww > m->wh) {
|
|
||||||
mw = m->nmaster ? m->ww * m->mfact : 0;
|
|
||||||
mh = m->nmaster ? m->wh * 0.9 : 0;
|
|
||||||
} else {
|
|
||||||
mh = m->nmaster ? m->wh * m->mfact : 0;
|
|
||||||
mw = m->nmaster ? m->ww * 0.9 : 0;
|
|
||||||
}
|
|
||||||
mx = mxo = (m->ww - mw) / 2;
|
|
||||||
my = myo = (m->wh - mh) / 2;
|
|
||||||
} else {
|
|
||||||
/* go fullscreen if all clients are in the master area */
|
|
||||||
mh = m->wh;
|
|
||||||
mw = m->ww;
|
|
||||||
mx = mxo = 0;
|
|
||||||
my = myo = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
|
||||||
if (i < m->nmaster) {
|
|
||||||
/* nmaster clients are stacked horizontally, in the center
|
|
||||||
* of the screen */
|
|
||||||
w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
|
|
||||||
resize(c, m->wx + mx, m->wy + my, w - (2*c->bw),
|
|
||||||
mh - (2*c->bw), 0);
|
|
||||||
mx += WIDTH(c);
|
|
||||||
} else {
|
|
||||||
/* stack clients are stacked horizontally */
|
|
||||||
w = (m->ww - tx) / (n - i);
|
|
||||||
resize(c, m->wx + tx, m->wy, w - (2*c->bw),
|
|
||||||
m->wh - (2*c->bw), 0);
|
|
||||||
tx += WIDTH(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
66
fibonacci.c
66
fibonacci.c
@@ -1,66 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
void
|
|
||||||
gaplessgrid(Monitor *m) {
|
|
||||||
unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch;
|
|
||||||
Client *c;
|
|
||||||
|
|
||||||
for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ;
|
|
||||||
if(n == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* grid dimensions */
|
|
||||||
for(cols = 0; cols <= n/2; cols++)
|
|
||||||
if(cols*cols >= n)
|
|
||||||
break;
|
|
||||||
if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */
|
|
||||||
cols = 2;
|
|
||||||
rows = n/cols;
|
|
||||||
|
|
||||||
const int gap_size = m->pertag->gaps_current[m->pertag->curtag];
|
|
||||||
/* window geometries */
|
|
||||||
cw = cols ? m->ww / cols : m->ww;
|
|
||||||
cn = 0; /* current column number */
|
|
||||||
rn = 0; /* current row number */
|
|
||||||
for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) {
|
|
||||||
if(i/rows + 1 > cols - n%cols)
|
|
||||||
rows = n/cols + 1;
|
|
||||||
ch = (rows ? m->wh / rows : m->wh) - gap_size;
|
|
||||||
cx = (m->wx + cn*cw) + gap_size;
|
|
||||||
cy = (m->wy + rn*ch) + gap_size;
|
|
||||||
resize(c, cx + gap_size, cy + gap_size, cw - 2 * c->bw - gap_size, ch - 2 * c->bw - gap_size, False);
|
|
||||||
rn++;
|
|
||||||
if(rn >= rows) {
|
|
||||||
rn = 0;
|
|
||||||
cn++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
diff --git a/config.def.h b/config.def.h
|
|
||||||
index 7054c06..527b214 100644
|
|
||||||
--- a/config.def.h
|
|
||||||
+++ b/config.def.h
|
|
||||||
@@ -39,6 +39,8 @@ static const Layout layouts[] = {
|
|
||||||
{ "[]=", tile }, /* first entry is default */
|
|
||||||
{ "><>", NULL }, /* no layout function means floating behavior */
|
|
||||||
{ "[M]", monocle },
|
|
||||||
+ { "|M|", centeredmaster },
|
|
||||||
+ { ">M>", centeredfloatingmaster },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* key definitions */
|
|
||||||
@@ -74,6 +76,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_u, setlayout, {.v = &layouts[3]} },
|
|
||||||
+ { MODKEY, XK_o, setlayout, {.v = &layouts[4]} },
|
|
||||||
{ 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 0362114..1e81412 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -233,6 +233,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
|
|
||||||
static int xerrordummy(Display *dpy, XErrorEvent *ee);
|
|
||||||
static int xerrorstart(Display *dpy, XErrorEvent *ee);
|
|
||||||
static void zoom(const Arg *arg);
|
|
||||||
+static void centeredmaster(Monitor *m);
|
|
||||||
+static void centeredfloatingmaster(Monitor *m);
|
|
||||||
|
|
||||||
/* variables */
|
|
||||||
static const char broken[] = "broken";
|
|
||||||
@@ -2139,3 +2141,106 @@ main(int argc, char *argv[])
|
|
||||||
XCloseDisplay(dpy);
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+centeredmaster(Monitor *m)
|
|
||||||
+{
|
|
||||||
+ unsigned int i, n, h, mw, mx, my, oty, ety, tw;
|
|
||||||
+ Client *c;
|
|
||||||
+
|
|
||||||
+ /* count number of clients in the selected monitor */
|
|
||||||
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
|
||||||
+ if (n == 0)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ /* initialize areas */
|
|
||||||
+ mw = m->ww;
|
|
||||||
+ mx = 0;
|
|
||||||
+ my = 0;
|
|
||||||
+ tw = mw;
|
|
||||||
+
|
|
||||||
+ if (n > m->nmaster) {
|
|
||||||
+ /* go mfact box in the center if more than nmaster clients */
|
|
||||||
+ mw = m->nmaster ? m->ww * m->mfact : 0;
|
|
||||||
+ tw = m->ww - mw;
|
|
||||||
+
|
|
||||||
+ if (n - m->nmaster > 1) {
|
|
||||||
+ /* only one client */
|
|
||||||
+ mx = (m->ww - mw) / 2;
|
|
||||||
+ tw = (m->ww - mw) / 2;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ oty = 0;
|
|
||||||
+ ety = 0;
|
|
||||||
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
|
||||||
+ if (i < m->nmaster) {
|
|
||||||
+ /* nmaster clients are stacked vertically, in the center
|
|
||||||
+ * of the screen */
|
|
||||||
+ h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
|
||||||
+ resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw),
|
|
||||||
+ h - (2*c->bw), 0);
|
|
||||||
+ my += HEIGHT(c);
|
|
||||||
+ } else {
|
|
||||||
+ /* stack clients are stacked vertically */
|
|
||||||
+ if ((i - m->nmaster) % 2 ) {
|
|
||||||
+ h = (m->wh - ety) / ( (1 + n - i) / 2);
|
|
||||||
+ resize(c, m->wx, m->wy + ety, tw - (2*c->bw),
|
|
||||||
+ h - (2*c->bw), 0);
|
|
||||||
+ ety += HEIGHT(c);
|
|
||||||
+ } else {
|
|
||||||
+ h = (m->wh - oty) / ((1 + n - i) / 2);
|
|
||||||
+ resize(c, m->wx + mx + mw, m->wy + oty,
|
|
||||||
+ tw - (2*c->bw), h - (2*c->bw), 0);
|
|
||||||
+ oty += HEIGHT(c);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+centeredfloatingmaster(Monitor *m)
|
|
||||||
+{
|
|
||||||
+ unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
|
|
||||||
+ Client *c;
|
|
||||||
+
|
|
||||||
+ /* count number of clients in the selected monitor */
|
|
||||||
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
|
||||||
+ if (n == 0)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ /* initialize nmaster area */
|
|
||||||
+ if (n > m->nmaster) {
|
|
||||||
+ /* go mfact box in the center if more than nmaster clients */
|
|
||||||
+ if (m->ww > m->wh) {
|
|
||||||
+ mw = m->nmaster ? m->ww * m->mfact : 0;
|
|
||||||
+ mh = m->nmaster ? m->wh * 0.9 : 0;
|
|
||||||
+ } else {
|
|
||||||
+ mh = m->nmaster ? m->wh * m->mfact : 0;
|
|
||||||
+ mw = m->nmaster ? m->ww * 0.9 : 0;
|
|
||||||
+ }
|
|
||||||
+ mx = mxo = (m->ww - mw) / 2;
|
|
||||||
+ my = myo = (m->wh - mh) / 2;
|
|
||||||
+ } else {
|
|
||||||
+ /* go fullscreen if all clients are in the master area */
|
|
||||||
+ mh = m->wh;
|
|
||||||
+ mw = m->ww;
|
|
||||||
+ mx = mxo = 0;
|
|
||||||
+ my = myo = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
|
||||||
+ if (i < m->nmaster) {
|
|
||||||
+ /* nmaster clients are stacked horizontally, in the center
|
|
||||||
+ * of the screen */
|
|
||||||
+ w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
|
|
||||||
+ resize(c, m->wx + mx, m->wy + my, w - (2*c->bw),
|
|
||||||
+ mh - (2*c->bw), 0);
|
|
||||||
+ mx += WIDTH(c);
|
|
||||||
+ } else {
|
|
||||||
+ /* stack clients are stacked horizontally */
|
|
||||||
+ w = (m->ww - tx) / (n - i);
|
|
||||||
+ resize(c, m->wx + tx, m->wy, w - (2*c->bw),
|
|
||||||
+ m->wh - (2*c->bw), 0);
|
|
||||||
+ tx += WIDTH(c);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
From ec9f55b6005cfa3b025b3d700c61af3ce539d057 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Niki Yoshiuchi <nyoshiuchi@gmail.com>
|
|
||||||
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
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user