Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-dwmc-6.2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-dwmc-6.2.diff (5837B)
---
1 From d94cb6f1a553d19127f44dbdc96e8bb5041956c2 Mon Sep 17 00:00:00 2001
2 From: Nihal Jere <[email protected]>
3 Date: Sat, 21 Mar 2020 15:16:49 -0500
4 Subject: [PATCH] dwm-client
5
6 ---
7 Makefile | 2 +-
8 config.def.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9 dwm.c | 55 +++++++++++++++++++++++++++++++++++++++--
10 dwmc | 40 ++++++++++++++++++++++++++++++
11 4 files changed, 164 insertions(+), 3 deletions(-)
12 create mode 100755 dwmc
13
14 diff --git a/Makefile b/Makefile
15 index 77bcbc0..f837f5c 100644
16 --- a/Makefile
17 +++ b/Makefile
18 @@ -38,7 +38,7 @@ dist: clean
19
20 install: all
21 mkdir -p ${DESTDIR}${PREFIX}/bin
22 - cp -f dwm ${DESTDIR}${PREFIX}/bin
23 + cp -f dwm dwmc ${DESTDIR}${PREFIX}/bin
24 chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
25 mkdir -p ${DESTDIR}${MANPREFIX}/man1
26 sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/m…
27 diff --git a/config.def.h b/config.def.h
28 index 1c0b587..efbae79 100644
29 --- a/config.def.h
30 +++ b/config.def.h
31 @@ -113,3 +113,73 @@ static Button buttons[] = {
32 { ClkTagBar, MODKEY, Button3, togglet…
33 };
34
35 +void
36 +setlayoutex(const Arg *arg)
37 +{
38 + setlayout(&((Arg) { .v = &layouts[arg->i] }));
39 +}
40 +
41 +void
42 +viewex(const Arg *arg)
43 +{
44 + view(&((Arg) { .ui = 1 << arg->ui }));
45 +}
46 +
47 +void
48 +viewall(const Arg *arg)
49 +{
50 + view(&((Arg){.ui = ~0}));
51 +}
52 +
53 +void
54 +toggleviewex(const Arg *arg)
55 +{
56 + toggleview(&((Arg) { .ui = 1 << arg->ui }));
57 +}
58 +
59 +void
60 +tagex(const Arg *arg)
61 +{
62 + tag(&((Arg) { .ui = 1 << arg->ui }));
63 +}
64 +
65 +void
66 +toggletagex(const Arg *arg)
67 +{
68 + toggletag(&((Arg) { .ui = 1 << arg->ui }));
69 +}
70 +
71 +void
72 +tagall(const Arg *arg)
73 +{
74 + tag(&((Arg){.ui = ~0}));
75 +}
76 +
77 +/* signal definitions */
78 +/* signum must be greater than 0 */
79 +/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <va…
80 +static Signal signals[] = {
81 + /* signum function */
82 + { "focusstack", focusstack },
83 + { "setmfact", setmfact },
84 + { "togglebar", togglebar },
85 + { "incnmaster", incnmaster },
86 + { "togglefloating", togglefloating },
87 + { "focusmon", focusmon },
88 + { "tagmon", tagmon },
89 + { "zoom", zoom },
90 + { "view", view },
91 + { "viewall", viewall },
92 + { "viewex", viewex },
93 + { "toggleview", view },
94 + { "toggleviewex", toggleviewex },
95 + { "tag", tag },
96 + { "tagall", tagall },
97 + { "tagex", tagex },
98 + { "toggletag", tag },
99 + { "toggletagex", toggletagex },
100 + { "killclient", killclient },
101 + { "quit", quit },
102 + { "setlayout", setlayout },
103 + { "setlayoutex", setlayoutex },
104 +};
105 diff --git a/dwm.c b/dwm.c
106 index 4465af1..aa53706 100644
107 --- a/dwm.c
108 +++ b/dwm.c
109 @@ -106,6 +106,11 @@ typedef struct {
110 const Arg arg;
111 } Key;
112
113 +typedef struct {
114 + const char * sig;
115 + void (*func)(const Arg *);
116 +} Signal;
117 +
118 typedef struct {
119 const char *symbol;
120 void (*arrange)(Monitor *);
121 @@ -148,6 +153,7 @@ static void arrange(Monitor *m);
122 static void arrangemon(Monitor *m);
123 static void attach(Client *c);
124 static void attachstack(Client *c);
125 +static int fake_signal(void);
126 static void buttonpress(XEvent *e);
127 static void checkotherwm(void);
128 static void cleanup(void);
129 @@ -998,6 +1004,49 @@ keypress(XEvent *e)
130 keys[i].func(&(keys[i].arg));
131 }
132
133 +int
134 +fake_signal(void)
135 +{
136 + char fsignal[256];
137 + char indicator[9] = "fsignal:";
138 + char str_sig[50];
139 + char param[16];
140 + int i, len_str_sig, n, paramn;
141 + size_t len_fsignal, len_indicator = strlen(indicator);
142 + Arg arg;
143 +
144 + // Get root name property
145 + if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
146 + len_fsignal = strlen(fsignal);
147 +
148 + // Check if this is indeed a fake signal
149 + if (len_indicator > len_fsignal ? 0 : strncmp(indicator…
150 + paramn = sscanf(fsignal+len_indicator, "%s%n%s%…
151 +
152 + if (paramn == 1) arg = (Arg) {0};
153 + else if (paramn > 2) return 1;
154 + else if (strncmp(param, "i", n - len_str_sig) =…
155 + sscanf(fsignal + len_indicator + n, "%i…
156 + else if (strncmp(param, "ui", n - len_str_sig) …
157 + sscanf(fsignal + len_indicator + n, "%u…
158 + else if (strncmp(param, "f", n - len_str_sig) =…
159 + sscanf(fsignal + len_indicator + n, "%f…
160 + else return 1;
161 +
162 + // Check if a signal was found, and if so handl…
163 + for (i = 0; i < LENGTH(signals); i++)
164 + if (strncmp(str_sig, signals[i].sig, le…
165 + signals[i].func(&(arg));
166 +
167 + // A fake signal was sent
168 + return 1;
169 + }
170 + }
171 +
172 + // No fake signal was sent, so proceed with update
173 + return 0;
174 +}
175 +
176 void
177 killclient(const Arg *arg)
178 {
179 @@ -1215,8 +1264,10 @@ propertynotify(XEvent *e)
180 Window trans;
181 XPropertyEvent *ev = &e->xproperty;
182
183 - if ((ev->window == root) && (ev->atom == XA_WM_NAME))
184 - updatestatus();
185 + if ((ev->window == root) && (ev->atom == XA_WM_NAME)) {
186 + if (!fake_signal())
187 + updatestatus();
188 + }
189 else if (ev->state == PropertyDelete)
190 return; /* ignore */
191 else if ((c = wintoclient(ev->window))) {
192 diff --git a/dwmc b/dwmc
193 new file mode 100755
194 index 0000000..5ff8dbc
195 --- /dev/null
196 +++ b/dwmc
197 @@ -0,0 +1,40 @@
198 +#!/usr/bin/env sh
199 +
200 +signal() {
201 + xsetroot -name "fsignal:$*"
202 +}
203 +
204 +case $# in
205 +1)
206 + case $1 in
207 + setlayout | view | viewall | togglebar | togglefloating | zoom …
208 + signal $1
209 + ;;
210 + *)
211 + echo "Unknown command or missing one argument."
212 + exit 1
213 + ;;
214 + esac
215 + ;;
216 +2)
217 + case $1 in
218 + view)
219 + signal $1 ui $2
220 + ;;
221 + viewex | toggleviewex | tagex | toggletagex | setlayoutex | foc…
222 + signal $1 i $2
223 + ;;
224 + setmfact)
225 + signal $1 f $2
226 + ;;
227 + *)
228 + echo "Unknown command or one too many arguments."
229 + exit 1
230 + ;;
231 + esac
232 + ;;
233 +*)
234 + echo "Too many arguments."
235 + exit 1
236 + ;;
237 +esac
238 --
239 2.25.1
240
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.