Introduction
Introduction Statistics Contact Development Disclaimer Help
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
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.