dwm-bulkill-systray-20231029-9f88553.diff (2778B)
1 From 82eb2e651e54560540e77ba5dd292803cec8a6e3 Mon Sep 17 00:00:00 2001 2 From: ysl2 <www.songli.yu@gmail.com> 3 Date: Sun, 29 Oct 2023 15:42:52 +0800 4 Subject: [PATCH] Give killclient an augument to control the beheviour: arg.ui 5 == 0 for normal kill current client; arg.ui == 1 for kill other clients in 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 | 31 ++++++++++++++++++++++++------- 12 2 files changed, 26 insertions(+), 7 deletions(-) 13 14 diff --git a/config.def.h b/config.def.h 15 index 750529d..ef1efe8 100644 16 --- a/config.def.h 17 +++ b/config.def.h 18 @@ -79,6 +79,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} }, // kill unselect 23 + { MODKEY|ShiftMask|ControlMask, XK_c, killclient, {.ui = 2} }, // killall 24 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, 25 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, 26 { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, 27 diff --git a/dwm.c b/dwm.c 28 index f9e7e4a..9819ec5 100644 29 --- a/dwm.c 30 +++ b/dwm.c 31 @@ -199,6 +199,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(Window w); 36 static void killclient(const Arg *arg); 37 static void manage(Window w, XWindowAttributes *wa); 38 static void mappingnotify(XEvent *e); 39 @@ -1131,22 +1132,38 @@ keypress(XEvent *e) 40 } 41 42 void 43 -killclient(const Arg *arg) 44 -{ 45 - if (!selmon->sel) 46 - return; 47 - 48 - if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0 , 0, 0)) { 49 +killthis(Window w) { 50 + if (!sendevent(w, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) { 51 XGrabServer(dpy); 52 XSetErrorHandler(xerrordummy); 53 XSetCloseDownMode(dpy, DestroyAll); 54 - XKillClient(dpy, selmon->sel->win); 55 + XKillClient(dpy, w); 56 XSync(dpy, False); 57 XSetErrorHandler(xerror); 58 XUngrabServer(dpy); 59 } 60 } 61 62 +void 63 +killclient(const Arg *arg) 64 +{ 65 + Client *c; 66 + 67 + if (!selmon->sel) 68 + return; 69 + 70 + if (!arg->ui || arg->ui == 0) { 71 + killthis(selmon->sel->win); 72 + return; 73 + } 74 + 75 + for (c = selmon->clients; c; c = c->next) { 76 + if (!ISVISIBLE(c) || (arg->ui == 1 && c == selmon->sel)) 77 + continue; 78 + killthis(c->win); 79 + } 80 +} 81 + 82 void 83 manage(Window w, XWindowAttributes *wa) 84 { 85 -- 86 2.20.1 87