Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-centeredmaster-20160719-56a31dc.diff - sites - public wiki contents of suck…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-centeredmaster-20160719-56a31dc.diff (4354B)
---
1 diff --git a/config.def.h b/config.def.h
2 index fd77a07..f025619 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -41,6 +41,8 @@ static const Layout layouts[] = {
6 { "[]=", tile }, /* first entry is default */
7 { "><>", NULL }, /* no layout function means floating b…
8 { "[M]", monocle },
9 + { "|M|", centeredmaster },
10 + { ">M>", centeredfloatingmaster },
11 };
12
13 /* key definitions */
14 @@ -76,6 +78,8 @@ static Key keys[] = {
15 { MODKEY, XK_t, setlayout, {.v …
16 { MODKEY, XK_f, setlayout, {.v …
17 { MODKEY, XK_m, setlayout, {.v …
18 + { MODKEY, XK_u, setlayout, {.v …
19 + { MODKEY, XK_o, setlayout, {.v …
20 { MODKEY, XK_space, setlayout, {0} …
21 { MODKEY|ShiftMask, XK_space, togglefloating, {0} …
22 { MODKEY, XK_0, view, {.ui…
23 diff --git a/dwm.c b/dwm.c
24 index b2bc9bd..9ecabae 100644
25 --- a/dwm.c
26 +++ b/dwm.c
27 @@ -234,6 +234,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
28 static int xerrordummy(Display *dpy, XErrorEvent *ee);
29 static int xerrorstart(Display *dpy, XErrorEvent *ee);
30 static void zoom(const Arg *arg);
31 +static void centeredmaster(Monitor *m);
32 +static void centeredfloatingmaster(Monitor *m);
33
34 /* variables */
35 static const char broken[] = "broken";
36 @@ -2138,3 +2140,106 @@ main(int argc, char *argv[])
37 XCloseDisplay(dpy);
38 return EXIT_SUCCESS;
39 }
40 +
41 +void
42 +centeredmaster(Monitor *m)
43 +{
44 + unsigned int i, n, h, mw, mx, my, oty, ety, tw;
45 + Client *c;
46 +
47 + /* count number of clients in the selected monitor */
48 + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next…
49 + if (n == 0)
50 + return;
51 +
52 + /* initialize areas */
53 + mw = m->ww;
54 + mx = 0;
55 + my = 0;
56 + tw = mw;
57 +
58 + if (n > m->nmaster) {
59 + /* go mfact box in the center if more than nmaster clie…
60 + mw = m->nmaster ? m->ww * m->mfact : 0;
61 + tw = m->ww - mw;
62 +
63 + if (n - m->nmaster > 1) {
64 + /* only one client */
65 + mx = (m->ww - mw) / 2;
66 + tw = (m->ww - mw) / 2;
67 + }
68 + }
69 +
70 + oty = 0;
71 + ety = 0;
72 + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next…
73 + if (i < m->nmaster) {
74 + /* nmaster clients are stacked vertically, in the center
75 + * of the screen */
76 + h = (m->wh - my) / (MIN(n, m->nmaster) - i);
77 + resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw),
78 + h - (2*c->bw), 0);
79 + my += HEIGHT(c);
80 + } else {
81 + /* stack clients are stacked vertically */
82 + if ((i - m->nmaster) % 2 ) {
83 + h = (m->wh - ety) / ( (1 + n - i) / 2);
84 + resize(c, m->wx, m->wy + ety, tw - (2*c->bw),
85 + h - (2*c->bw), 0);
86 + ety += HEIGHT(c);
87 + } else {
88 + h = (m->wh - oty) / ((1 + n - i) / 2);
89 + resize(c, m->wx + mx + mw, m->wy + oty,
90 + tw - (2*c->bw), h - (2*c->bw), 0);
91 + oty += HEIGHT(c);
92 + }
93 + }
94 +}
95 +
96 +void
97 +centeredfloatingmaster(Monitor *m)
98 +{
99 + unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
100 + Client *c;
101 +
102 + /* count number of clients in the selected monitor */
103 + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next…
104 + if (n == 0)
105 + return;
106 +
107 + /* initialize nmaster area */
108 + if (n > m->nmaster) {
109 + /* go mfact box in the center if more than nmaster clie…
110 + if (m->ww > m->wh) {
111 + mw = m->nmaster ? m->ww * m->mfact : 0;
112 + mh = m->nmaster ? m->wh * 0.9 : 0;
113 + } else {
114 + mh = m->nmaster ? m->wh * m->mfact : 0;
115 + mw = m->nmaster ? m->ww * 0.9 : 0;
116 + }
117 + mx = mxo = (m->ww - mw) / 2;
118 + my = myo = (m->wh - mh) / 2;
119 + } else {
120 + /* go fullscreen if all clients are in the master area …
121 + mh = m->wh;
122 + mw = m->ww;
123 + mx = mxo = 0;
124 + my = myo = 0;
125 + }
126 +
127 + for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->…
128 + if (i < m->nmaster) {
129 + /* nmaster clients are stacked horizontally, in the cen…
130 + * of the screen */
131 + w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
132 + resize(c, m->wx + mx, m->wy + my, w - (2*c->bw),
133 + mh - (2*c->bw), 0);
134 + mx += WIDTH(c);
135 + } else {
136 + /* stack clients are stacked horizontally */
137 + w = (m->ww - tx) / (n - i);
138 + resize(c, m->wx + tx, m->wy, w - (2*c->bw),
139 + m->wh - (2*c->bw), 0);
140 + tx += WIDTH(c);
141 + }
142 +}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.