add bstack patch
							parent
							
								
									93bf920483
								
							
						
					
					
						commit
						eecb0b8f46
					
				|  | @ -44,6 +44,8 @@ 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 }, | ||||||
|  | 	{ "TTT",      bstack }, | ||||||
|  | 	{ "===",      bstackhoriz }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* key definitions */ | /* key definitions */ | ||||||
|  | @ -100,6 +102,8 @@ 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|ShiftMask,             XK_f,      togglefullscr,  {0} }, | 	{ MODKEY|ShiftMask,             XK_f,      togglefullscr,  {0} }, | ||||||
|  |  | ||||||
							
								
								
									
										65
									
								
								dwm.c
								
								
								
								
							
							
						
						
									
										65
									
								
								dwm.c
								
								
								
								
							|  | @ -248,6 +248,8 @@ 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 bstack(Monitor *m); | ||||||
|  | static void bstackhoriz(Monitor *m); | ||||||
| static void load_xresources(void); | static void load_xresources(void); | ||||||
| static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst); | static void resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst); | ||||||
| 
 | 
 | ||||||
|  | @ -2248,3 +2250,66 @@ main(int argc, char *argv[]) | ||||||
| 	XCloseDisplay(dpy); | 	XCloseDisplay(dpy); | ||||||
| 	return EXIT_SUCCESS; | 	return EXIT_SUCCESS; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | static void | ||||||
|  | bstack(Monitor *m) { | ||||||
|  | 	int w, h, mh, mx, tx, ty, tw; | ||||||
|  | 	unsigned int i, n; | ||||||
|  | 	Client *c; | ||||||
|  | 
 | ||||||
|  | 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); | ||||||
|  | 	if (n == 0) | ||||||
|  | 		return; | ||||||
|  | 	if (n > m->nmaster) { | ||||||
|  | 		mh = m->nmaster ? m->mfact * m->wh : 0; | ||||||
|  | 		tw = m->ww / (n - m->nmaster); | ||||||
|  | 		ty = m->wy + mh; | ||||||
|  | 	} else { | ||||||
|  | 		mh = m->wh; | ||||||
|  | 		tw = m->ww; | ||||||
|  | 		ty = m->wy; | ||||||
|  | 	} | ||||||
|  | 	for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { | ||||||
|  | 		if (i < m->nmaster) { | ||||||
|  | 			w = (m->ww - mx) / (MIN(n, m->nmaster) - i); | ||||||
|  | 			resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0); | ||||||
|  | 			mx += WIDTH(c); | ||||||
|  | 		} else { | ||||||
|  | 			h = m->wh - mh; | ||||||
|  | 			resize(c, tx, ty, tw - (2 * c->bw), h - (2 * c->bw), 0); | ||||||
|  | 			if (tw != m->ww) | ||||||
|  | 				tx += WIDTH(c); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void | ||||||
|  | bstackhoriz(Monitor *m) { | ||||||
|  | 	int w, mh, mx, tx, ty, th; | ||||||
|  | 	unsigned int i, n; | ||||||
|  | 	Client *c; | ||||||
|  | 
 | ||||||
|  | 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); | ||||||
|  | 	if (n == 0) | ||||||
|  | 		return; | ||||||
|  | 	if (n > m->nmaster) { | ||||||
|  | 		mh = m->nmaster ? m->mfact * m->wh : 0; | ||||||
|  | 		th = (m->wh - mh) / (n - m->nmaster); | ||||||
|  | 		ty = m->wy + mh; | ||||||
|  | 	} else { | ||||||
|  | 		th = mh = m->wh; | ||||||
|  | 		ty = m->wy; | ||||||
|  | 	} | ||||||
|  | 	for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { | ||||||
|  | 		if (i < m->nmaster) { | ||||||
|  | 			w = (m->ww - mx) / (MIN(n, m->nmaster) - i); | ||||||
|  | 			resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0); | ||||||
|  | 			mx += WIDTH(c); | ||||||
|  | 		} else { | ||||||
|  | 			resize(c, tx, ty, m->ww - (2 * c->bw), th - (2 * c->bw), 0); | ||||||
|  | 			if (th != m->wh) | ||||||
|  | 				ty += HEIGHT(c); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,101 @@ | ||||||
|  | diff --git a/config.def.h b/config.def.h
 | ||||||
|  | index 7054c06..554f1db 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 }, | ||||||
|  | +	{ "TTT",      bstack },
 | ||||||
|  | +	{ "===",      bstackhoriz },
 | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /* 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..c313b5e 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 bstack(Monitor *m);
 | ||||||
|  | +static void bstackhoriz(Monitor *m);
 | ||||||
|  |   | ||||||
|  |  /* variables */ | ||||||
|  |  static const char broken[] = "broken"; | ||||||
|  | @@ -2139,3 +2141,65 @@ main(int argc, char *argv[])
 | ||||||
|  |  	XCloseDisplay(dpy); | ||||||
|  |  	return EXIT_SUCCESS; | ||||||
|  |  } | ||||||
|  | +
 | ||||||
|  | +static void
 | ||||||
|  | +bstack(Monitor *m) {
 | ||||||
|  | +	int w, h, mh, mx, tx, ty, tw;
 | ||||||
|  | +	unsigned int i, n;
 | ||||||
|  | +	Client *c;
 | ||||||
|  | +
 | ||||||
|  | +	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
 | ||||||
|  | +	if (n == 0)
 | ||||||
|  | +		return;
 | ||||||
|  | +	if (n > m->nmaster) {
 | ||||||
|  | +		mh = m->nmaster ? m->mfact * m->wh : 0;
 | ||||||
|  | +		tw = m->ww / (n - m->nmaster);
 | ||||||
|  | +		ty = m->wy + mh;
 | ||||||
|  | +	} else {
 | ||||||
|  | +		mh = m->wh;
 | ||||||
|  | +		tw = m->ww;
 | ||||||
|  | +		ty = m->wy;
 | ||||||
|  | +	}
 | ||||||
|  | +	for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
 | ||||||
|  | +		if (i < m->nmaster) {
 | ||||||
|  | +			w = (m->ww - mx) / (MIN(n, m->nmaster) - i);
 | ||||||
|  | +			resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0);
 | ||||||
|  | +			mx += WIDTH(c);
 | ||||||
|  | +		} else {
 | ||||||
|  | +			h = m->wh - mh;
 | ||||||
|  | +			resize(c, tx, ty, tw - (2 * c->bw), h - (2 * c->bw), 0);
 | ||||||
|  | +			if (tw != m->ww)
 | ||||||
|  | +				tx += WIDTH(c);
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +static void
 | ||||||
|  | +bstackhoriz(Monitor *m) {
 | ||||||
|  | +	int w, mh, mx, tx, ty, th;
 | ||||||
|  | +	unsigned int i, n;
 | ||||||
|  | +	Client *c;
 | ||||||
|  | +
 | ||||||
|  | +	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
 | ||||||
|  | +	if (n == 0)
 | ||||||
|  | +		return;
 | ||||||
|  | +	if (n > m->nmaster) {
 | ||||||
|  | +		mh = m->nmaster ? m->mfact * m->wh : 0;
 | ||||||
|  | +		th = (m->wh - mh) / (n - m->nmaster);
 | ||||||
|  | +		ty = m->wy + mh;
 | ||||||
|  | +	} else {
 | ||||||
|  | +		th = mh = m->wh;
 | ||||||
|  | +		ty = m->wy;
 | ||||||
|  | +	}
 | ||||||
|  | +	for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
 | ||||||
|  | +		if (i < m->nmaster) {
 | ||||||
|  | +			w = (m->ww - mx) / (MIN(n, m->nmaster) - i);
 | ||||||
|  | +			resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0);
 | ||||||
|  | +			mx += WIDTH(c);
 | ||||||
|  | +		} else {
 | ||||||
|  | +			resize(c, tx, ty, m->ww - (2 * c->bw), th - (2 * c->bw), 0);
 | ||||||
|  | +			if (th != m->wh)
 | ||||||
|  | +				ty += HEIGHT(c);
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +}
 | ||||||
		Loading…
	
		Reference in New Issue