dwm-singlegap-6.6.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-singlegap-6.6.diff (3961B)
---
1 From d0b1b523a1cf4901aa848e20a9fff59154b3f3c8 Mon Sep 17 00:00:00 2001
2 From: sesankm <26676400+sesankm@users.noreply.github.com>
3 Date: Tue, 30 Sep 2025 14:29:08 -0500
4 Subject: [PATCH] Add gaps when only one window is open
5
6 ---
7 config.def.h | 8 +++++---
8 dwm.c | 33 +++++++++++++++++++++++----------
9 2 files changed, 28 insertions(+), 13 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 81c3fc0..b6a0b7d 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -2,6 +2,8 @@
16
17 /* appearance */
18 static const unsigned int borderpx = 1; /* border pixel of windows */
19 +static const unsigned int gapx = 120; /* horizontal gap */
20 +static const unsigned int gapy = 40; /* vertical gap */
21 static const unsigned int snap = 32; /* snap pixel */
22 static const int showbar = 1; /* 0 means no bar */
23 static const int topbar = 1; /* 0 means bottom bar */
24 @@ -26,9 +28,9 @@ static const Rule rules[] = {
25 * WM_CLASS(STRING) = instance, class
26 * WM_NAME(STRING) = title
27 */
28 - /* class instance title tags mask isfloating monitor */
29 - { "Gimp", NULL, NULL, 0, 1, -1 },
30 - { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
31 + /* class instance title tags mask isfloating monitor disablegap */
32 + { "Gimp", NULL, NULL, 0, 1, -1, 0},
33 + { "Firefox", NULL, NULL, 1 << 8, 0, -1, 1},
34 };
35
36 /* layout(s) */
37 diff --git a/dwm.c b/dwm.c
38 index 4f345ee..1633c38 100644
39 --- a/dwm.c
40 +++ b/dwm.c
41 @@ -92,6 +92,7 @@ struct Client {
42 int bw, oldbw;
43 unsigned int tags;
44 int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
45 + int disablegaps;
46 Client *next;
47 Client *snext;
48 Monitor *mon;
49 @@ -138,6 +139,7 @@ typedef struct {
50 unsigned int tags;
51 int isfloating;
52 int monitor;
53 + int disablegaps;
54 } Rule;
55
56 /* function declarations */
57 @@ -286,6 +288,7 @@ applyrules(Client *c)
58 /* rule matching */
59 c->isfloating = 0;
60 c->tags = 0;
61 + c->disablegaps = 0;
62 XGetClassHint(dpy, c->win, &ch);
63 class = ch.res_class ? ch.res_class : broken;
64 instance = ch.res_name ? ch.res_name : broken;
65 @@ -302,6 +305,8 @@ applyrules(Client *c)
66 if (m)
67 c->mon = m;
68 }
69 + if (strstr(class, r->class) || strstr(instance, r->class))
70 + c->disablegaps = r->disablegaps;
71 }
72 if (ch.res_class)
73 XFree(ch.res_class);
74 @@ -1686,28 +1691,36 @@ tagmon(const Arg *arg)
75 void
76 tile(Monitor *m)
77 {
78 - unsigned int i, n, h, mw, my, ty;
79 + unsigned int i, n, h, mw, my, ty, ns, gx = 0, gy = 0;
80 Client *c;
81
82 +
83 for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
84 if (n == 0)
85 return;
86 + else if (n == 1 && ((nexttiled(m->clients)))->disablegaps == 0) {
87 + gx = gapx;
88 + gy = gapy;
89 + }
90
91 - if (n > m->nmaster)
92 + if (n > m->nmaster) {
93 mw = m->nmaster ? m->ww * m->mfact : 0;
94 - else
95 + ns = m->nmaster > 0 ? 2 : 1;
96 + } else {
97 mw = m->ww;
98 - for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
99 + ns = 1;
100 + }
101 + for(i = 0, my = ty = gy, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
102 if (i < m->nmaster) {
103 - h = (m->wh - my) / (MIN(n, m->nmaster) - i);
104 - resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
105 + h = (m->wh - my) / (MIN(n, m->nmaster) - i) - gy;
106 + resize(c, m->wx + gx, m->wy + my, mw - (2*c->bw) - gx*(5-ns)/2, h - (2*c->bw), False);
107 if (my + HEIGHT(c) < m->wh)
108 - my += HEIGHT(c);
109 + my += HEIGHT(c) + gy;
110 } else {
111 - h = (m->wh - ty) / (n - i);
112 - resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
113 + h = (m->wh - ty) / (n - i) - gy;
114 + resize(c, m->wx + mw + gx/ns, m->wy + ty, m->ww - mw - (2*c->bw) - gx*(5-ns)/2, h - (2*c->bw), False);
115 if (ty + HEIGHT(c) < m->wh)
116 - ty += HEIGHT(c);
117 + ty += HEIGHT(c) + gy;
118 }
119 }
120
121 --
122 2.49.1
123