Skip to content

Commit 4dbab37

Browse files
author
Sokolov Innokenty
committed
patch gaplessgrid
1 parent 4196725 commit 4dbab37

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

config.def.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/* See LICENSE file for copyright and license details. */
2+
#include "gaplessgrid.c"
23

34
/* appearance */
45
static const unsigned int borderpx = 1; /* border pixel of windows */
@@ -44,8 +45,9 @@ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen win
4445

4546
static const Layout layouts[] = {
4647
/* symbol arrange function */
47-
{ "[]=", tile }, /* first entry is default */
48-
{ "><>", NULL }, /* no layout function means floating behavior */
48+
{ "###", gaplessgrid }, /* first entry is default */
49+
{ "[]=", tile },
50+
{ "><>", NULL }, /* no layout function means floating behavior */
4951
{ "[M]", monocle },
5052
};
5153

@@ -78,9 +80,10 @@ static const Key keys[] = {
7880
{ MODKEY, XK_Return, zoom, {0} },
7981
{ MODKEY, XK_Tab, view, {0} },
8082
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
81-
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
82-
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
83-
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
83+
{ MODKEY, XK_g, setlayout, {.v = &layouts[0]} },
84+
{ MODKEY, XK_t, setlayout, {.v = &layouts[1]} },
85+
{ MODKEY, XK_f, setlayout, {.v = &layouts[2]} },
86+
{ MODKEY, XK_m, setlayout, {.v = &layouts[3]} },
8487
{ MODKEY, XK_space, setlayout, {0} },
8588
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
8689
{ MODKEY, XK_0, view, {.ui = ~0 } },

gaplessgrid.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
void
2+
gaplessgrid(Monitor *m) {
3+
unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch;
4+
Client *c;
5+
6+
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
7+
if (n == 0)
8+
return;
9+
10+
/* grid dimensions */
11+
for (cols = 0; cols <= n/2; cols++)
12+
if (cols*cols >= n)
13+
break;
14+
if (n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */
15+
cols = 2;
16+
rows = n/cols;
17+
18+
/* window geometries */
19+
cw = cols ? m->ww / cols : m->ww;
20+
cn = 0; /* current column number */
21+
rn = 0; /* current row number */
22+
for (i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) {
23+
if (i/rows + 1 > cols - n%cols)
24+
rows = n/cols + 1;
25+
ch = rows ? m->wh / rows : m->wh;
26+
cx = m->wx + cn*cw;
27+
cy = m->wy + rn*ch;
28+
resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False);
29+
rn++;
30+
if (rn >= rows) {
31+
rn = 0;
32+
cn++;
33+
}
34+
}
35+
}

0 commit comments

Comments
 (0)