dwm-bulkill-systray-safe-20231029-9f88553.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-bulkill-systray-safe-20231029-9f88553.diff (2732B)
---
1 From 754f493ef44d4a0f7b59e8c95e50b911631ac60b Mon Sep 17 00:00:00 2001
2 From: ysl2 <www.songli.yu@gmail.com>
3 Date: Sun, 29 Oct 2023 15:40:44 +0800
4 Subject: [PATCH] Bulk kill: arg.ui == 0 for normal kill current client; arg.ui
5 == 1 for kill other clients in current tag (except current focusing client);
6 arg.ui == 2 for kill all clients in current tag (include focusing client).
7
8 ---
9 bulkill.c | 36 ++++++++++++++++++++++++++++++++++++
10 config.def.h | 3 +++
11 2 files changed, 39 insertions(+)
12 create mode 100644 bulkill.c
13
14 diff --git a/bulkill.c b/bulkill.c
15 new file mode 100644
16 index 0000000..c73958f
17 --- /dev/null
18 +++ b/bulkill.c
19 @@ -0,0 +1,36 @@
20 +static void killthis(Window w);
21 +static void bulkill(const Arg *arg);
22 +
23 +void
24 +killthis(Window w) {
25 + if (!sendevent(w, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) {
26 + XGrabServer(dpy);
27 + XSetErrorHandler(xerrordummy);
28 + XSetCloseDownMode(dpy, DestroyAll);
29 + XKillClient(dpy, w);
30 + XSync(dpy, False);
31 + XSetErrorHandler(xerror);
32 + XUngrabServer(dpy);
33 + }
34 +}
35 +
36 +void
37 +bulkill(const Arg *arg)
38 +{
39 + Client *c;
40 +
41 + if (!selmon->sel)
42 + return;
43 +
44 + if (!arg->ui || arg->ui == 0) {
45 + killthis(selmon->sel->win);
46 + return;
47 + }
48 +
49 + for (c = selmon->clients; c; c = c->next) {
50 + if (!ISVISIBLE(c) || (arg->ui == 1 && c == selmon->sel))
51 + continue;
52 + killthis(c->win);
53 + }
54 +}
55 +
56 diff --git a/config.def.h b/config.def.h
57 index 750529d..4d4bcef 100644
58 --- a/config.def.h
59 +++ b/config.def.h
60 @@ -65,6 +65,7 @@ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn()
61 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
62 static const char *termcmd[] = { "st", NULL };
63
64 +#include "bulkill.c"
65 static const Key keys[] = {
66 /* modifier key function argument */
67 { MODKEY, XK_p, spawn, {.v = dmenucmd } },
68 @@ -79,6 +80,8 @@ static const Key keys[] = {
69 { MODKEY, XK_Return, zoom, {0} },
70 { MODKEY, XK_Tab, view, {0} },
71 { MODKEY|ShiftMask, XK_c, killclient, {0} },
72 + { MODKEY|ControlMask, XK_c, bulkill, {.ui = 1} }, // kill unselect
73 + { MODKEY|ShiftMask|ControlMask, XK_c, bulkill, {.ui = 2} }, // killall
74 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
75 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
76 { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
77 --
78 2.20.1
79