Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-fullgaps-toggle-20200830.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-fullgaps-toggle-20200830.diff (4965B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 1c0b587..b172f63 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -2,6 +2,7 @@
6
7 /* appearance */
8 static const unsigned int borderpx = 1; /* border pixel of wind…
9 +static const Gap default_gap = {.isgap = 1, .realgap = 10, .gapp…
10 static const unsigned int snap = 32; /* snap pixel */
11 static const int showbar = 1; /* 0 means no bar */
12 static const int topbar = 1; /* 0 means bottom bar */
13 @@ -84,6 +85,10 @@ static Key keys[] = {
14 { MODKEY, XK_period, focusmon, {.i …
15 { MODKEY|ShiftMask, XK_comma, tagmon, {.i …
16 { MODKEY|ShiftMask, XK_period, tagmon, {.i …
17 + { MODKEY, XK_minus, setgaps, {.i …
18 + { MODKEY, XK_equal, setgaps, {.i …
19 + { MODKEY|ShiftMask, XK_minus, setgaps, {.i …
20 + { MODKEY|ShiftMask, XK_equal, setgaps, {.i …
21 TAGKEYS( XK_1, 0)
22 TAGKEYS( XK_2, 1)
23 TAGKEYS( XK_3, 2)
24 diff --git a/dwm.c b/dwm.c
25 index 664c527..25bc9b7 100644
26 --- a/dwm.c
27 +++ b/dwm.c
28 @@ -57,6 +57,9 @@
29 #define TAGMASK ((1 << LENGTH(tags)) - 1)
30 #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
31
32 +#define GAP_TOGGLE 100
33 +#define GAP_RESET 0
34 +
35 /* enums */
36 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
37 enum { SchemeNorm, SchemeSel }; /* color schemes */
38 @@ -111,6 +114,12 @@ typedef struct {
39 void (*arrange)(Monitor *);
40 } Layout;
41
42 +typedef struct {
43 + int isgap;
44 + int realgap;
45 + int gappx;
46 +} Gap;
47 +
48 struct Monitor {
49 char ltsymbol[16];
50 float mfact;
51 @@ -119,6 +128,7 @@ struct Monitor {
52 int by; /* bar geometry */
53 int mx, my, mw, mh; /* screen size */
54 int wx, wy, ww, wh; /* window area */
55 + Gap *gap;
56 unsigned int seltags;
57 unsigned int sellt;
58 unsigned int tagset[2];
59 @@ -169,6 +179,7 @@ static void focus(Client *c);
60 static void focusin(XEvent *e);
61 static void focusmon(const Arg *arg);
62 static void focusstack(const Arg *arg);
63 +static void gap_copy(Gap *to, const Gap *from);
64 static Atom getatomprop(Client *c, Atom prop);
65 static int getrootptr(int *x, int *y);
66 static long getstate(Window w);
67 @@ -200,6 +211,7 @@ static void sendmon(Client *c, Monitor *m);
68 static void setclientstate(Client *c, long state);
69 static void setfocus(Client *c);
70 static void setfullscreen(Client *c, int fullscreen);
71 +static void setgaps(const Arg *arg);
72 static void setlayout(const Arg *arg);
73 static void setmfact(const Arg *arg);
74 static void setup(void);
75 @@ -639,6 +651,8 @@ createmon(void)
76 m->nmaster = nmaster;
77 m->showbar = showbar;
78 m->topbar = topbar;
79 + m->gap = malloc(sizeof(Gap));
80 + gap_copy(m->gap, &default_gap);
81 m->lt[0] = &layouts[0];
82 m->lt[1] = &layouts[1 % LENGTH(layouts)];
83 strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
84 @@ -1498,6 +1512,35 @@ setfullscreen(Client *c, int fullscreen)
85 }
86 }
87
88 +void
89 +gap_copy(Gap *to, const Gap *from)
90 +{
91 + to->isgap = from->isgap;
92 + to->realgap = from->realgap;
93 + to->gappx = from->gappx;
94 +}
95 +
96 +void
97 +setgaps(const Arg *arg)
98 +{
99 + Gap *p = selmon->gap;
100 + switch(arg->i)
101 + {
102 + case GAP_TOGGLE:
103 + p->isgap = 1 - p->isgap;
104 + break;
105 + case GAP_RESET:
106 + gap_copy(p, &default_gap);
107 + break;
108 + default:
109 + p->realgap += arg->i;
110 + p->isgap = 1;
111 + }
112 + p->realgap = MAX(p->realgap, 0);
113 + p->gappx = p->realgap * p->isgap;
114 + arrange(selmon);
115 +}
116 +
117 void
118 setlayout(const Arg *arg)
119 {
120 @@ -1684,18 +1727,18 @@ tile(Monitor *m)
121 if (n > m->nmaster)
122 mw = m->nmaster ? m->ww * m->mfact : 0;
123 else
124 - mw = m->ww;
125 - for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttil…
126 + mw = m->ww - m->gap->gappx;
127 + for (i = 0, my = ty = m->gap->gappx, c = nexttiled(m->clients);…
128 if (i < m->nmaster) {
129 - h = (m->wh - my) / (MIN(n, m->nmaster) - i);
130 - resize(c, m->wx, m->wy + my, mw - (2*c->bw), h …
131 - if (my + HEIGHT(c) < m->wh)
132 - my += HEIGHT(c);
133 + h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m…
134 + resize(c, m->wx + m->gap->gappx, m->wy + my, mw…
135 + if (my + HEIGHT(c) + m->gap->gappx < m->wh)
136 + my += HEIGHT(c) + m->gap->gappx;
137 } else {
138 - h = (m->wh - ty) / (n - i);
139 - resize(c, m->wx + mw, m->wy + ty, m->ww - mw - …
140 - if (ty + HEIGHT(c) < m->wh)
141 - ty += HEIGHT(c);
142 + h = (m->wh - ty) / (n - i) - m->gap->gappx;
143 + resize(c, m->wx + mw + m->gap->gappx, m->wy + t…
144 + if (ty + HEIGHT(c) + m->gap->gappx < m->wh)
145 + ty += HEIGHT(c) + m->gap->gappx;
146 }
147 }
148
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.