dwm-vanitygaps-20190508-6.2.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-vanitygaps-20190508-6.2.diff (8260B) | |
--- | |
1 From 20967685d6879bd611a856ade154df19da9ddc7b Mon Sep 17 00:00:00 2001 | |
2 From: Stein Gunnar Bakkeby <[email protected]> | |
3 Date: Wed, 8 May 2019 08:07:14 +0200 | |
4 Subject: [PATCH] Vanity gaps - allows control of both inner and outer ga… | |
5 between windows and screen edge | |
6 | |
7 --- | |
8 config.def.h | 21 +++++++++ | |
9 dwm.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++… | |
10 2 files changed, 161 insertions(+), 10 deletions(-) | |
11 | |
12 diff --git a/config.def.h b/config.def.h | |
13 index 1c0b587..0927c2d 100644 | |
14 --- a/config.def.h | |
15 +++ b/config.def.h | |
16 @@ -3,6 +3,11 @@ | |
17 /* appearance */ | |
18 static const unsigned int borderpx = 1; /* border pixel of wind… | |
19 static const unsigned int snap = 32; /* snap pixel */ | |
20 +static const unsigned int gappih = 10; /* horiz inner gap betw… | |
21 +static const unsigned int gappiv = 10; /* vert inner gap betwe… | |
22 +static const unsigned int gappoh = 10; /* horiz outer gap betw… | |
23 +static const unsigned int gappov = 10; /* vert outer gap betwe… | |
24 +static const int smartgaps = 0; /* 1 means no outer gap… | |
25 static const int showbar = 1; /* 0 means no bar */ | |
26 static const int topbar = 1; /* 0 means bottom bar */ | |
27 static const char *fonts[] = { "monospace:size=10" }; | |
28 @@ -70,6 +75,22 @@ static Key keys[] = { | |
29 { MODKEY, XK_d, incnmaster, {.i … | |
30 { MODKEY, XK_h, setmfact, {.f … | |
31 { MODKEY, XK_l, setmfact, {.f … | |
32 + { MODKEY|Mod4Mask, XK_h, incrgaps, {.i … | |
33 + { MODKEY|Mod4Mask, XK_l, incrgaps, {.i … | |
34 + { MODKEY|Mod4Mask|ShiftMask, XK_h, incrogaps, {.i … | |
35 + { MODKEY|Mod4Mask|ShiftMask, XK_l, incrogaps, {.i … | |
36 + { MODKEY|Mod4Mask|ControlMask, XK_h, incrigaps, {.i … | |
37 + { MODKEY|Mod4Mask|ControlMask, XK_l, incrigaps, {.i … | |
38 + { MODKEY|Mod4Mask, XK_0, togglegaps, {0} … | |
39 + { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {0} … | |
40 + { MODKEY, XK_y, incrihgaps, {.i … | |
41 + { MODKEY, XK_o, incrihgaps, {.i … | |
42 + { MODKEY|ControlMask, XK_y, incrivgaps, {.i … | |
43 + { MODKEY|ControlMask, XK_o, incrivgaps, {.i … | |
44 + { MODKEY|Mod4Mask, XK_y, incrohgaps, {.i … | |
45 + { MODKEY|Mod4Mask, XK_o, incrohgaps, {.i … | |
46 + { MODKEY|ShiftMask, XK_y, incrovgaps, {.i … | |
47 + { MODKEY|ShiftMask, XK_o, incrovgaps, {.i … | |
48 { MODKEY, XK_Return, zoom, {0} … | |
49 { MODKEY, XK_Tab, view, {0} … | |
50 { MODKEY|ShiftMask, XK_c, killclient, {0} … | |
51 diff --git a/dwm.c b/dwm.c | |
52 index 4465af1..88f3e04 100644 | |
53 --- a/dwm.c | |
54 +++ b/dwm.c | |
55 @@ -119,6 +119,10 @@ struct Monitor { | |
56 int by; /* bar geometry */ | |
57 int mx, my, mw, mh; /* screen size */ | |
58 int wx, wy, ww, wh; /* window area */ | |
59 + int gappih; /* horizontal gap between windows */ | |
60 + int gappiv; /* vertical gap between windows */ | |
61 + int gappoh; /* horizontal outer gaps */ | |
62 + int gappov; /* vertical outer gaps */ | |
63 unsigned int seltags; | |
64 unsigned int sellt; | |
65 unsigned int tagset[2]; | |
66 @@ -199,6 +203,16 @@ static void sendmon(Client *c, Monitor *m); | |
67 static void setclientstate(Client *c, long state); | |
68 static void setfocus(Client *c); | |
69 static void setfullscreen(Client *c, int fullscreen); | |
70 +static void setgaps(int oh, int ov, int ih, int iv); | |
71 +static void incrgaps(const Arg *arg); | |
72 +static void incrigaps(const Arg *arg); | |
73 +static void incrogaps(const Arg *arg); | |
74 +static void incrohgaps(const Arg *arg); | |
75 +static void incrovgaps(const Arg *arg); | |
76 +static void incrihgaps(const Arg *arg); | |
77 +static void incrivgaps(const Arg *arg); | |
78 +static void togglegaps(const Arg *arg); | |
79 +static void defaultgaps(const Arg *arg); | |
80 static void setlayout(const Arg *arg); | |
81 static void setmfact(const Arg *arg); | |
82 static void setup(void); | |
83 @@ -240,6 +254,7 @@ static char stext[256]; | |
84 static int screen; | |
85 static int sw, sh; /* X display screen geometry width, height… | |
86 static int bh, blw = 0; /* bar geometry */ | |
87 +static int enablegaps = 1; /* enables gaps, used by togglegaps */ | |
88 static int lrpad; /* sum of left and right padding for text … | |
89 static int (*xerrorxlib)(Display *, XErrorEvent *); | |
90 static unsigned int numlockmask = 0; | |
91 @@ -638,6 +653,10 @@ createmon(void) | |
92 m->nmaster = nmaster; | |
93 m->showbar = showbar; | |
94 m->topbar = topbar; | |
95 + m->gappih = gappih; | |
96 + m->gappiv = gappiv; | |
97 + m->gappoh = gappoh; | |
98 + m->gappov = gappov; | |
99 m->lt[0] = &layouts[0]; | |
100 m->lt[1] = &layouts[1 % LENGTH(layouts)]; | |
101 strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); | |
102 @@ -1498,6 +1517,111 @@ setfullscreen(Client *c, int fullscreen) | |
103 } | |
104 | |
105 void | |
106 +setgaps(int oh, int ov, int ih, int iv) | |
107 +{ | |
108 + if (oh < 0) oh = 0; | |
109 + if (ov < 0) ov = 0; | |
110 + if (ih < 0) ih = 0; | |
111 + if (iv < 0) iv = 0; | |
112 + | |
113 + selmon->gappoh = oh; | |
114 + selmon->gappov = ov; | |
115 + selmon->gappih = ih; | |
116 + selmon->gappiv = iv; | |
117 + arrange(selmon); | |
118 +} | |
119 + | |
120 +void | |
121 +togglegaps(const Arg *arg) | |
122 +{ | |
123 + enablegaps = !enablegaps; | |
124 + arrange(selmon); | |
125 +} | |
126 + | |
127 +void | |
128 +defaultgaps(const Arg *arg) | |
129 +{ | |
130 + setgaps(gappoh, gappov, gappih, gappiv); | |
131 +} | |
132 + | |
133 +void | |
134 +incrgaps(const Arg *arg) | |
135 +{ | |
136 + setgaps( | |
137 + selmon->gappoh + arg->i, | |
138 + selmon->gappov + arg->i, | |
139 + selmon->gappih + arg->i, | |
140 + selmon->gappiv + arg->i | |
141 + ); | |
142 +} | |
143 + | |
144 +void | |
145 +incrigaps(const Arg *arg) | |
146 +{ | |
147 + setgaps( | |
148 + selmon->gappoh, | |
149 + selmon->gappov, | |
150 + selmon->gappih + arg->i, | |
151 + selmon->gappiv + arg->i | |
152 + ); | |
153 +} | |
154 + | |
155 +void | |
156 +incrogaps(const Arg *arg) | |
157 +{ | |
158 + setgaps( | |
159 + selmon->gappoh + arg->i, | |
160 + selmon->gappov + arg->i, | |
161 + selmon->gappih, | |
162 + selmon->gappiv | |
163 + ); | |
164 +} | |
165 + | |
166 +void | |
167 +incrohgaps(const Arg *arg) | |
168 +{ | |
169 + setgaps( | |
170 + selmon->gappoh + arg->i, | |
171 + selmon->gappov, | |
172 + selmon->gappih, | |
173 + selmon->gappiv | |
174 + ); | |
175 +} | |
176 + | |
177 +void | |
178 +incrovgaps(const Arg *arg) | |
179 +{ | |
180 + setgaps( | |
181 + selmon->gappoh, | |
182 + selmon->gappov + arg->i, | |
183 + selmon->gappih, | |
184 + selmon->gappiv | |
185 + ); | |
186 +} | |
187 + | |
188 +void | |
189 +incrihgaps(const Arg *arg) | |
190 +{ | |
191 + setgaps( | |
192 + selmon->gappoh, | |
193 + selmon->gappov, | |
194 + selmon->gappih + arg->i, | |
195 + selmon->gappiv | |
196 + ); | |
197 +} | |
198 + | |
199 +void | |
200 +incrivgaps(const Arg *arg) | |
201 +{ | |
202 + setgaps( | |
203 + selmon->gappoh, | |
204 + selmon->gappov, | |
205 + selmon->gappih, | |
206 + selmon->gappiv + arg->i | |
207 + ); | |
208 +} | |
209 + | |
210 +void | |
211 setlayout(const Arg *arg) | |
212 { | |
213 if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) | |
214 @@ -1673,26 +1797,32 @@ tagmon(const Arg *arg) | |
215 void | |
216 tile(Monitor *m) | |
217 { | |
218 - unsigned int i, n, h, mw, my, ty; | |
219 + unsigned int i, n, h, r, oe = enablegaps, ie = enablegaps, mw, … | |
220 Client *c; | |
221 | |
222 for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next… | |
223 if (n == 0) | |
224 return; | |
225 | |
226 + if (smartgaps == n) { | |
227 + oe = 0; // outer gaps disabled | |
228 + } | |
229 + | |
230 if (n > m->nmaster) | |
231 - mw = m->nmaster ? m->ww * m->mfact : 0; | |
232 + mw = m->nmaster ? (m->ww + m->gappiv*ie) * m->mfact : 0; | |
233 else | |
234 - mw = m->ww; | |
235 - for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttil… | |
236 + mw = m->ww - 2*m->gappov*oe + m->gappiv*ie; | |
237 + for (i = 0, my = ty = m->gappoh*oe, c = nexttiled(m->clients); … | |
238 if (i < m->nmaster) { | |
239 - h = (m->wh - my) / (MIN(n, m->nmaster) - i); | |
240 - resize(c, m->wx, m->wy + my, mw - (2*c->bw), h … | |
241 - my += HEIGHT(c); | |
242 + r = MIN(n, m->nmaster) - i; | |
243 + h = (m->wh - my - m->gappoh*oe - m->gappih*ie *… | |
244 + resize(c, m->wx + m->gappov*oe, m->wy + my, mw … | |
245 + my += HEIGHT(c) + m->gappih*ie; | |
246 } else { | |
247 - h = (m->wh - ty) / (n - i); | |
248 - resize(c, m->wx + mw, m->wy + ty, m->ww - mw - … | |
249 - ty += HEIGHT(c); | |
250 + r = n - i; | |
251 + h = (m->wh - ty - m->gappoh*oe - m->gappih*ie *… | |
252 + resize(c, m->wx + mw + m->gappov*oe, m->wy + ty… | |
253 + ty += HEIGHT(c) + m->gappih*ie; | |
254 } | |
255 } | |
256 | |
257 -- | |
258 2.7.4 | |
259 |