diff options
| author | Saumit Dinesan <justsaumit@protonmail.com> | 2022-07-07 18:31:57 +0530 | 
|---|---|---|
| committer | Saumit Dinesan <justsaumit@protonmail.com> | 2022-07-07 18:31:57 +0530 | 
| commit | 6a3d2099435d74b12672ebd2356f3ba490fa06bc (patch) | |
| tree | 5bf0cc3406fe34945dbccc0fcf7068ced9905ddb | |
| parent | e057c06769f10a4d95c5a188f3522a12da687145 (diff) | |
applying dwm-gridmode patch
| -rw-r--r-- | config.h | 3 | ||||
| -rw-r--r-- | layouts.c | 27 | 
2 files changed, 30 insertions, 0 deletions
| @@ -52,11 +52,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 */ +#include "layouts.c"  static const Layout layouts[] = {  	/* symbol     arrange function */  	{ "[]=",      tile },    /* first entry is default */  	{ "><>",      NULL },    /* no layout function means floating behavior */  	{ "[M]",      monocle }, +	{ "HHH",      grid },  };  /* key definitions */ @@ -99,6 +101,7 @@ static Key keys[] = {  	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },  	{ MODKEY,                       XK_y,      setlayout,      {.v = &layouts[1]} },  	{ MODKEY,                       XK_u,      setlayout,      {.v = &layouts[2]} }, +    { MODKEY,                       XK_g,      setlayout,      {.v = &layouts[3]} },  	{ MODKEY,                       XK_space,  setlayout,      {0} },  	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },  	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } }, diff --git a/layouts.c b/layouts.c new file mode 100644 index 0000000..d26acf3 --- /dev/null +++ b/layouts.c @@ -0,0 +1,27 @@ +void +grid(Monitor *m) { +	unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows; +	Client *c; + +	for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) +		n++; + +	/* grid dimensions */ +	for(rows = 0; rows <= n/2; rows++) +		if(rows*rows >= n) +			break; +	cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows; + +	/* window geoms (cell height/width) */ +	ch = m->wh / (rows ? rows : 1); +	cw = m->ww / (cols ? cols : 1); +	for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) { +		cx = m->wx + (i / rows) * cw; +		cy = m->wy + (i % rows) * ch; +		/* adjust height/width of last row/column's windows */ +		ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0; +		aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0; +		resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False); +		i++; +	} +} | 
