summaryrefslogtreecommitdiff
path: root/dwm/patches/dwm-vanitygaps-20190508-6.2.diff
diff options
context:
space:
mode:
Diffstat (limited to 'dwm/patches/dwm-vanitygaps-20190508-6.2.diff')
-rw-r--r--dwm/patches/dwm-vanitygaps-20190508-6.2.diff259
1 files changed, 259 insertions, 0 deletions
diff --git a/dwm/patches/dwm-vanitygaps-20190508-6.2.diff b/dwm/patches/dwm-vanitygaps-20190508-6.2.diff
new file mode 100644
index 0000000..ea22e23
--- /dev/null
+++ b/dwm/patches/dwm-vanitygaps-20190508-6.2.diff
@@ -0,0 +1,259 @@
1From 20967685d6879bd611a856ade154df19da9ddc7b Mon Sep 17 00:00:00 2001
2From: Stein Gunnar Bakkeby <bakkeby@gmail.com>
3Date: Wed, 8 May 2019 08:07:14 +0200
4Subject: [PATCH] Vanity gaps - allows control of both inner and outer gaps
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
12diff --git a/config.def.h b/config.def.h
13index 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 windows */
19 static const unsigned int snap = 32; /* snap pixel */
20+static const unsigned int gappih = 10; /* horiz inner gap between windows */
21+static const unsigned int gappiv = 10; /* vert inner gap between windows */
22+static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */
23+static const unsigned int gappov = 10; /* vert outer gap between windows and screen edge */
24+static const int smartgaps = 0; /* 1 means no outer gap when there is only one window */
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 = -1 } },
30 { MODKEY, XK_h, setmfact, {.f = -0.05} },
31 { MODKEY, XK_l, setmfact, {.f = +0.05} },
32+ { MODKEY|Mod4Mask, XK_h, incrgaps, {.i = +1 } },
33+ { MODKEY|Mod4Mask, XK_l, incrgaps, {.i = -1 } },
34+ { MODKEY|Mod4Mask|ShiftMask, XK_h, incrogaps, {.i = +1 } },
35+ { MODKEY|Mod4Mask|ShiftMask, XK_l, incrogaps, {.i = -1 } },
36+ { MODKEY|Mod4Mask|ControlMask, XK_h, incrigaps, {.i = +1 } },
37+ { MODKEY|Mod4Mask|ControlMask, XK_l, incrigaps, {.i = -1 } },
38+ { MODKEY|Mod4Mask, XK_0, togglegaps, {0} },
39+ { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {0} },
40+ { MODKEY, XK_y, incrihgaps, {.i = +1 } },
41+ { MODKEY, XK_o, incrihgaps, {.i = -1 } },
42+ { MODKEY|ControlMask, XK_y, incrivgaps, {.i = +1 } },
43+ { MODKEY|ControlMask, XK_o, incrivgaps, {.i = -1 } },
44+ { MODKEY|Mod4Mask, XK_y, incrohgaps, {.i = +1 } },
45+ { MODKEY|Mod4Mask, XK_o, incrohgaps, {.i = -1 } },
46+ { MODKEY|ShiftMask, XK_y, incrovgaps, {.i = +1 } },
47+ { MODKEY|ShiftMask, XK_o, incrovgaps, {.i = -1 } },
48 { MODKEY, XK_Return, zoom, {0} },
49 { MODKEY, XK_Tab, view, {0} },
50 { MODKEY|ShiftMask, XK_c, killclient, {0} },
51diff --git a/dwm.c b/dwm.c
52index 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, my, ty;
220 Client *c;
221
222 for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
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 = nexttiled(c->next), i++)
236+ mw = m->ww - 2*m->gappov*oe + m->gappiv*ie;
237+ for (i = 0, my = ty = m->gappoh*oe, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
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 - (2*c->bw), 0);
241- my += HEIGHT(c);
242+ r = MIN(n, m->nmaster) - i;
243+ h = (m->wh - my - m->gappoh*oe - m->gappih*ie * (r - 1)) / r;
244+ resize(c, m->wx + m->gappov*oe, m->wy + my, mw - (2*c->bw) - m->gappiv*ie, h - (2*c->bw), 0);
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 - (2*c->bw), h - (2*c->bw), 0);
249- ty += HEIGHT(c);
250+ r = n - i;
251+ h = (m->wh - ty - m->gappoh*oe - m->gappih*ie * (r - 1)) / r;
252+ resize(c, m->wx + mw + m->gappov*oe, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappov*oe, h - (2*c->bw), 0);
253+ ty += HEIGHT(c) + m->gappih*ie;
254 }
255 }
256
257--
2582.7.4
259