[wiki] [sites] This commit adds a allowkillrule patch. The patch allows clients to be unkillable using keybinds by setting a rule. This can be toggled using a `toggleallowkill` function as well if desired. || speedie

From: <git_AT_suckless.org>
Date: Sat, 06 May 2023 22:58:08 +0200

commit 630e2ffc44a856d1350a608fd8161362a3008f83
Author: speedie <speedie_AT_duck.com>
Date: Sat May 6 22:52:41 2023 +0200

    This commit adds a allowkillrule patch. The patch allows clients to be
    unkillable using keybinds by setting a rule. This can be toggled using
    a `toggleallowkill` function as well if desired.
    
    The patch may be useful if you find yourself killing your clients
    by accident.

diff --git a/dwm.suckless.org/patches/allowkillrule/dwm-allowkillrule-6.4.diff b/dwm.suckless.org/patches/allowkillrule/dwm-allowkillrule-6.4.diff
new file mode 100644
index 00000000..33365d77
--- /dev/null
+++ b/dwm.suckless.org/patches/allowkillrule/dwm-allowkillrule-6.4.diff
_AT_@ -0,0 +1,98 @@
+diff -up a/config.def.h b/config.def.h
+--- a/config.def.h 2022-10-04 19:38:18.000000000 +0200
++++ b/config.def.h 2023-05-06 22:19:27.298742237 +0200
+_AT_@ -5,6 +5,7 @@ static const unsigned int borderpx = 1;
+ static const unsigned int snap = 32; /* snap pixel */
+ static const int showbar = 1; /* 0 means no bar */
+ static const int topbar = 1; /* 0 means bottom bar */
++static const int allowkill = 1; /* allow killing clients by default? */
+ static const char *fonts[] = { "monospace:size=10" };
+ static const char dmenufont[] = "monospace:size=10";
+ static const char col_gray1[] = "#222222";
+_AT_@ -26,9 +27,9 @@ static const Rule rules[] = {
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+- /* class instance title tags mask isfloating monitor */
+- { "Gimp", NULL, NULL, 0, 1, -1 },
+- { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
++ /* class instance title tags mask allowkill isfloating monitor */
++ { "Gimp", NULL, NULL, 0, 1, 1, -1 },
++ { "Firefox", NULL, NULL, 1 << 8, 1, 0, -1 },
+ };
+
+ /* layout(s) */
+_AT_@ -78,6 +79,7 @@ static const Key keys[] = {
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
++ { MODKEY, XK_q, toggleallowkill,{0} },
+ { MODKEY, XK_0, view, {.ui = ~0 } },
+ { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
+ { MODKEY, XK_comma, focusmon, {.i = -1 } },
+diff -up a/dwm.c b/dwm.c
+--- a/dwm.c 2022-10-04 19:38:18.000000000 +0200
++++ b/dwm.c 2023-05-06 22:18:43.239357744 +0200
+_AT_@ -93,6 +93,7 @@ struct Client {
+ int bw, oldbw;
+ unsigned int tags;
+ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
++ int allowkill;
+ Client *next;
+ Client *snext;
+ Monitor *mon;
+_AT_@ -137,6 +138,7 @@ typedef struct {
+ const char *instance;
+ const char *title;
+ unsigned int tags;
++ int allowkill;
+ int isfloating;
+ int monitor;
+ } Rule;
+_AT_@ -212,6 +214,7 @@ static void tagmon(const Arg *arg);
+ static void tile(Monitor *m);
+ static void togglebar(const Arg *arg);
+ static void togglefloating(const Arg *arg);
++static void toggleallowkill(const Arg *arg);
+ static void toggletag(const Arg *arg);
+ static void toggleview(const Arg *arg);
+ static void unfocus(Client *c, int setfocus);
+_AT_@ -288,6 +291,7 @@ applyrules(Client *c)
+ /* rule matching */
+ c->isfloating = 0;
+ c->tags = 0;
++ c->allowkill = allowkill;
+ XGetClassHint(dpy, c->win, &ch);
+ class = ch.res_class ? ch.res_class : broken;
+ instance = ch.res_name ? ch.res_name : broken;
+_AT_@ -300,6 +304,7 @@ applyrules(Client *c)
+ {
+ c->isfloating = r->isfloating;
+ c->tags |= r->tags;
++ c->allowkill = r->allowkill;
+ for (m = mons; m && m->num != r->monitor; m = m->next);
+ if (m)
+ c->mon = m;
+_AT_@ -1006,7 +1011,7 @@ keypress(XEvent *e)
+ void
+ killclient(const Arg *arg)
+ {
+- if (!selmon->sel)
++ if (!selmon->sel || !selmon->sel->allowkill)
+ return;
+ if (!sendevent(selmon->sel, wmatom[WMDelete])) {
+ XGrabServer(dpy);
+_AT_@ -1704,6 +1709,13 @@ togglebar(const Arg *arg)
+ }
+
+ void
++toggleallowkill(const Arg *arg)
++{
++ if (!selmon->sel) return;
++ selmon->sel->allowkill = !selmon->sel->allowkill;
++}
++
++void
+ togglefloating(const Arg *arg)
+ {
+ if (!selmon->sel)
diff --git a/dwm.suckless.org/patches/allowkillrule/index.md b/dwm.suckless.org/patches/allowkillrule/index.md
new file mode 100644
index 00000000..a1e21df0
--- /dev/null
+++ b/dwm.suckless.org/patches/allowkillrule/index.md
_AT_@ -0,0 +1,22 @@
+allowkillrule
+=============
+
+Description
+-----------
+
+This patch adds a rule which disables the ability to kill clients through the
+killclient function. You can choose if you want clients to be killable by
+default or not by setting `allowkill` to either `0` or `1`. It also includes
+a `toggleallowkill` keybind (by default MODKEY+q) which toggles it for the
+focused client. This is useful if you find that you kill clients
+often by accident.
+
+Download
+--------
+* [dwm-allowkillrule-6.4.diff](dwm-allowkillrule-6.4.diff)
+
+A mirror is also available [here](https://git.speedie.site/patches).
+
+Author
+------
+* speedie <speedie_AT_speedie.site>
Received on Sat May 06 2023 - 22:58:08 CEST

This archive was generated by hypermail 2.3.0 : Sat May 06 2023 - 23:00:54 CEST