dwm-bulkill-20231029-9f88553.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-bulkill-20231029-9f88553.diff (2660B) | |
--- | |
1 From 70a21457fdbcbcdf26efb1329dd29872b7fcd8e3 Mon Sep 17 00:00:00 2001 | |
2 From: ysl2 <[email protected]> | |
3 Date: Sun, 29 Oct 2023 15:45:05 +0800 | |
4 Subject: [PATCH] Give killclient an augument to control the beheviour: a… | |
5 == 0 for normal kill current client; arg.ui == 1 for kill other clients… | |
6 current tag (except current focusing client); arg.ui == 2 for kill all | |
7 clients in current tag (include focusing client). | |
8 | |
9 --- | |
10 config.def.h | 2 ++ | |
11 dwm.c | 30 ++++++++++++++++++++++++------ | |
12 2 files changed, 26 insertions(+), 6 deletions(-) | |
13 | |
14 diff --git a/config.def.h b/config.def.h | |
15 index 9efa774..d39e6dd 100644 | |
16 --- a/config.def.h | |
17 +++ b/config.def.h | |
18 @@ -74,6 +74,8 @@ static const Key keys[] = { | |
19 { MODKEY, XK_Return, zoom, {0} … | |
20 { MODKEY, XK_Tab, view, {0} … | |
21 { MODKEY|ShiftMask, XK_c, killclient, {0} … | |
22 + { MODKEY|ControlMask, XK_c, killclient, {.ui = 1… | |
23 + { MODKEY|ShiftMask|ControlMask, XK_c, killclient, {.ui = 2… | |
24 { MODKEY, XK_t, setlayout, {.v … | |
25 { MODKEY, XK_f, setlayout, {.v … | |
26 { MODKEY, XK_m, setlayout, {.v … | |
27 diff --git a/dwm.c b/dwm.c | |
28 index f1d86b2..011744d 100644 | |
29 --- a/dwm.c | |
30 +++ b/dwm.c | |
31 @@ -177,6 +177,7 @@ static void grabbuttons(Client *c, int focused); | |
32 static void grabkeys(void); | |
33 static void incnmaster(const Arg *arg); | |
34 static void keypress(XEvent *e); | |
35 +static void killthis(Client *c); | |
36 static void killclient(const Arg *arg); | |
37 static void manage(Window w, XWindowAttributes *wa); | |
38 static void mappingnotify(XEvent *e); | |
39 @@ -1013,21 +1014,38 @@ keypress(XEvent *e) | |
40 } | |
41 | |
42 void | |
43 -killclient(const Arg *arg) | |
44 -{ | |
45 - if (!selmon->sel) | |
46 - return; | |
47 - if (!sendevent(selmon->sel, wmatom[WMDelete])) { | |
48 +killthis(Client *c) { | |
49 + if (!sendevent(c, wmatom[WMDelete])) { | |
50 XGrabServer(dpy); | |
51 XSetErrorHandler(xerrordummy); | |
52 XSetCloseDownMode(dpy, DestroyAll); | |
53 - XKillClient(dpy, selmon->sel->win); | |
54 + XKillClient(dpy, c->win); | |
55 XSync(dpy, False); | |
56 XSetErrorHandler(xerror); | |
57 XUngrabServer(dpy); | |
58 } | |
59 } | |
60 | |
61 +void | |
62 +killclient(const Arg *arg) | |
63 +{ | |
64 + Client *c; | |
65 + | |
66 + if (!selmon->sel) | |
67 + return; | |
68 + | |
69 + if (!arg->ui || arg->ui == 0) { | |
70 + killthis(selmon->sel); | |
71 + return; | |
72 + } | |
73 + | |
74 + for (c = selmon->clients; c; c = c->next) { | |
75 + if (!ISVISIBLE(c) || (arg->ui == 1 && c == selmon->sel)) | |
76 + continue; | |
77 + killthis(c); | |
78 + } | |
79 +} | |
80 + | |
81 void | |
82 manage(Window w, XWindowAttributes *wa) | |
83 { | |
84 -- | |
85 2.20.1 | |
86 |