Introduction
Introduction Statistics Contact Development Disclaimer Help
nmaster.c - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
nmaster.c (7346B)
---
1 #if 0
2
3 TITLE
4
5 subject: ntile/nmaster/tilecols layouts with cpt patch included for dwm…
6 author: pancake <youterm.com> *
7
8
9 NOTES
10
11 Remember to append a ISTILE line like that one in your config.h:
12
13 #define ISTILE isarrange(tile) || isarrange(ntile) || isarrange(dntile)…
14
15
16 INSTALLATION
17
18 Copy this file into the dwm root directory (the one) and follow the ins…
19 related into the configuration section.
20
21
22 CONFIGURATION
23
24 You should modify your config.h to include "nmaster.c" from it after
25 setting the NMASTER, NCOLS and NROWS macro definitions.
26
27
28 *** NMASTER ***
29
30 #define NMASTER 1
31 #include "nmaster.c"
32
33 Layout layouts[] = {
34 { "-|=", ntile }, /* first entry is default */
35 ..
36 { MODKEY|ShiftMask, XK_j, setnmaster, …
37 { MODKEY|ShiftMask, XK_k, setnmaster, …
38
39
40
41 *** TILECOLS ***
42
43 #define NCOLS 2
44 #define NROWS 1
45 #include "nmaster.c"
46
47 Layout layouts[] = {
48 { "E|]", tilecols }, /* first entry is default */
49 ..
50 { MODKEY|ShiftMask, XK_j, setnrows…
51 { MODKEY|ShiftMask, XK_k, setnrows…
52 { MODKEY|ShiftMask, XK_l, setncols…
53 { MODKEY|ShiftMask, XK_h, setncols…
54
55
56 *** CLIENTS PER TAG ***
57
58 Valid values are:
59 -1 - show all clients
60 0 - show no clients
61 >0 - show N clients
62
63 Example configuration:
64 { MODKEY|ShiftMask, XK_q, clientspertag, …
65 { MODKEY, XK_q, clientspertag, …
66 { MODKEY, XK_w, clientspertag, …
67 { MODKEY, XK_e, clientspertag, …
68
69 #endif
70
71 int cpt = -1;
72 void clientspertag(const char *arg) {
73 if (arg[0]=='^') {
74 if (cpt==-1) cpt = atoi(arg+1);
75 else cpt = -1;
76 } else cpt = atoi(arg);
77 arrange();
78 }
79
80 #ifdef NMASTER
81 int nmaster = NMASTER;
82 void
83 ntile(void) {
84 unsigned int i, n, nx, ny, nw, nh, mw, mh, th;
85 Client *c;
86
87 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
88 n++;
89
90 if (cpt!=-1 && n>cpt) n = cpt;
91
92 /* window geoms */
93 mh = (n <= nmaster) ? wah / (n > 0 ? n : 1) : wah / nmaster;
94 mw = (n <= nmaster) ? waw : mwfact * waw;
95 th = (n > nmaster) ? wah / (n - nmaster) : 0;
96 if(n > nmaster && th < bh)
97 th = wah;
98
99 nx = wax;
100 ny = way;
101 for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i+…
102 if (cpt!=-1 && i>=cpt) {
103 ban(c);
104 continue;
105 }
106 c->ismax = False;
107 if(i < nmaster) { /* master */
108 ny = way + i * mh;
109 nw = mw - 2 * c->border;
110 nh = mh;
111 if(i + 1 == (n < nmaster ? n : nmaster)) /* rema…
112 nh = wah - mh * i;
113 nh -= 2 * c->border;
114 }
115 else { /* tile window */
116 if(i == nmaster) {
117 ny = way;
118 nx += mw;
119 }
120 nw = waw - mw - 2 * c->border;
121 if(i + 1 == n) /* remainder */
122 nh = (way + wah) - ny - 2 * c->border;
123 else
124 nh = th - 2 * c->border;
125 }
126 resize(c, nx, ny, nw, nh, False);
127 if(n > nmaster && th != wah)
128 ny += nh + 2 * c->border;
129 }
130 }
131
132 void
133 dntile(void) {
134 unsigned int i, n, nx, ny, nw, nh, mw, mh, th, inc;
135 Client *c;
136
137 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
138 n++;
139 if (cpt!=-1 && n>cpt) n = cpt;
140
141 /* dynamic nmaster */
142 if (n<5) inc = 0;
143 else if (n<7) inc = 1;
144 else inc = 2;
145 nmaster+=inc;
146
147 /* window geoms */
148 mh = (n <= nmaster) ? wah / (n > 0 ? n : 1) : wah / nmaster;
149 mw = (n <= nmaster) ? waw : mwfact * waw;
150 th = (n > nmaster) ? wah / (n - nmaster) : 0;
151 if(n > nmaster && th < bh)
152 th = wah;
153
154 nx = wax;
155 ny = way;
156 for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i+…
157 if (cpt!=-1 && i>=cpt) {
158 ban(c);
159 continue;
160 }
161 c->ismax = False;
162 if(i < nmaster) { /* master */
163 ny = way + i * mh;
164 nw = mw - 2 * c->border;
165 nh = mh;
166 if(i + 1 == (n < nmaster ? n : nmaster)) /* rema…
167 nh = wah - mh * i;
168 nh -= 2 * c->border;
169 }
170 else { /* tile window */
171 if(i == nmaster) {
172 ny = way;
173 nx += mw;
174 }
175 nw = waw - mw - 2 * c->border;
176 if(i + 1 == n) /* remainder */
177 nh = (way + wah) - ny - 2 * c->border;
178 else
179 nh = th - 2 * c->border;
180 }
181 resize(c, nx, ny, nw, nh, False);
182 if(n > nmaster && th != wah)
183 ny += nh + 2 * c->border;
184 }
185 nmaster-=inc;
186 }
187
188 void
189 setnmaster(const char *arg) {
190 int i;
191
192 if(!isarrange(ntile)&&!isarrange(dntile))
193 return;
194 if(!arg)
195 nmaster = NMASTER;
196 else {
197 i = atoi(arg);
198 if((nmaster + i) < 1 || wah / (nmaster + i) <= 2 * BORDE…
199 return;
200 nmaster += i;
201 }
202 if(sel)
203 arrange();
204 }
205 #endif
206
207 #ifdef NCOLS
208 #ifdef NROWS
209 unsigned int ncols = NCOLS;
210 unsigned int nrows = NROWS;
211
212 void
213 setncols(const char *arg) {
214 int i;
215
216 if(!isarrange(tile))
217 return;
218 if(!arg)
219 i = NCOLS;
220 else if(arg[0] != '+' && arg[0] != '-')
221 i = atoi(arg);
222 else
223 i = ncols + atoi(arg);
224
225 if((i < 1) || (i >= 1 && waw / i <= 2 * BORDERPX))
226 return;
227 ncols = i;
228
229 if(sel)
230 arrange();
231 }
232
233 void
234 setnrows(const char *arg) {
235 int i;
236
237 if(!isarrange(tile))
238 return;
239 if(!arg)
240 i = NROWS;
241 else if(arg[0] != '+' && arg[0] != '-')
242 i = atoi(arg);
243 else
244 i = nrows + atoi(arg);
245
246 if(i < 1 || wah <= 2 * BORDERPX * i)
247 return;
248 nrows = i;
249
250 if(sel)
251 arrange();
252 }
253
254 void
255 tilecols(void) {
256 unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th, tw1, cols, ro…
257 Client *c;
258
259 for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
260 n++;
261 /* calculate correct number of rows */
262 if(ncols > 0 && n - nmaster > nrows * ncols)
263 rows = (n - nmaster) / ncols + ((n - nmaster) % ncols ?…
264 else
265 rows = nrows;
266
267 if (cpt!=-1 && n>cpt) n = cpt;
268
269 /* window geoms */
270 mh = (n <= nmaster) ? wah / (n > 0 ? n : 1) : wah / nmaster;
271
272 if (nmaster == 0) {
273 mh = mw = 0;
274 }
275 else if (n <= nmaster) {
276 mh = wah / (n > 0 ? n : 1);
277 mw = waw;
278 }
279 else {
280 mh = wah / nmaster;
281 mw = mwfact * waw;
282 }
283
284 if(rows == 0 || n <= nmaster + rows) {
285 rows1 = n > nmaster ? n - nmaster : 1;
286 tw = tw1 = waw - mw;
287 th = wah / rows1;
288 }
289 else {
290 rows1 = 1 + (n - nmaster - 1) % rows;
291 cols = (n - nmaster) / rows + ((n - nmaster) % rows ? 1 …
292 tw = (waw - mw) / cols;
293 tw1 = waw - mw - (cols - 1) * tw;
294 th = wah / rows;
295 }
296
297 nx = wax;
298 ny = way;
299
300 for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i+…
301 if (cpt!=-1 && i>=cpt) {
302 ban(c);
303 continue;
304 }
305 c->ismax = False;
306 if(i < nmaster) { /* master column */
307 ny = way + i * mh;
308 nw = mw - 2 * c->border;
309 nh = mh - 2 * c->border;
310 if(i == 0)
311 nh += wah - mh * (n < nmaster ? n : nma…
312 //nh = mh;
313 if(i + 1 == (n < nmaster ? n : nmaster)) /* rema…
314 nh = wah - mh * i;
315 nh -= 2 * c->border;
316 }
317 else if(i < nmaster + rows1) { /* first stack column */
318 if(i == nmaster) { /* initialise */
319 ny = way;
320 nx += mw;
321 nh = wah - 2*c->border - (rows1 - 1) * …
322 } else
323 nh = th - 2 * c->border;
324 nw = tw1 - 2 * c->border;
325 }
326 else { /* successive stack columns - rows > 0 if we rea…
327 if((i - nmaster - rows1) % rows == 0) { /* rein…
328 ny = way;
329 nx += nw + 2 * c-> border;
330 nh = wah - 2*c->border - (rows - 1) * t…
331 }
332 else {
333 nh = th - 2 * c->border;
334 }
335 nw = tw - 2 * c->border;
336 }
337 resize(c, nx, ny, nw, nh, False);
338 ny += nh + 2 * c->border;
339 }
340 }
341 #endif
342 #endif
343
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.