dwm-bulkill-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-20231029-9f88553.diff (2660B)
       ---
            1 From 70a21457fdbcbcdf26efb1329dd29872b7fcd8e3 Mon Sep 17 00:00:00 2001
            2 From: ysl2 <www.songli.yu@gmail.com>
            3 Date: Sun, 29 Oct 2023 15:45:05 +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        | 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} },  // 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 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