dwm-bulkill-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-safe-20231029-9f88553.diff (2673B)
       ---
            1 From c40d70e238b7e5e8ebfd16b435c56af55a541912 Mon Sep 17 00:00:00 2001
            2 From: ysl2 <www.songli.yu@gmail.com>
            3 Date: Sun, 29 Oct 2023 15:39:46 +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    | 35 +++++++++++++++++++++++++++++++++++
           10  config.def.h |  3 +++
           11  2 files changed, 38 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..732852e
           17 --- /dev/null
           18 +++ b/bulkill.c
           19 @@ -0,0 +1,35 @@
           20 +static void killthis(Client *c);
           21 +static void bulkill(const Arg *arg);
           22 +
           23 +void
           24 +killthis(Client *c) {
           25 +        if (!sendevent(c, wmatom[WMDelete])) {
           26 +                XGrabServer(dpy);
           27 +                XSetErrorHandler(xerrordummy);
           28 +                XSetCloseDownMode(dpy, DestroyAll);
           29 +                XKillClient(dpy, c->win);
           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);
           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);
           53 +    }
           54 +}
           55 diff --git a/config.def.h b/config.def.h
           56 index 9efa774..28cfd78 100644
           57 --- a/config.def.h
           58 +++ b/config.def.h
           59 @@ -60,6 +60,7 @@ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn()
           60  static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
           61  static const char *termcmd[]  = { "st", NULL };
           62  
           63 +#include "bulkill.c"
           64  static const Key keys[] = {
           65          /* modifier                     key        function        argument */
           66          { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
           67 @@ -74,6 +75,8 @@ static const Key keys[] = {
           68          { MODKEY,                       XK_Return, zoom,           {0} },
           69          { MODKEY,                       XK_Tab,    view,           {0} },
           70          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           71 +    { MODKEY|ControlMask,           XK_c,      bulkill,        {.ui = 1} },  // kill unselect
           72 +    { MODKEY|ShiftMask|ControlMask, XK_c,      bulkill,        {.ui = 2} },  // killall
           73          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           74          { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           75          { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
           76 -- 
           77 2.20.1
           78