sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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