dwm-quitprompt-20220718-6613d9f.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-quitprompt-20220718-6613d9f.diff (2826B)
---
1 From eb558048819ed916b272765e64e1ea795a85740e Mon Sep 17 00:00:00 2001
2 From: Lerrrtaste <lerrrtaste@protonmail.com>
3 Date: Mon, 18 Jul 2022 12:22:39 +0200
4 Subject: [PATCH] This Patch replaces the default quit behavior with an dmenu
5 prompt. Possible selections are (Quit DWM?) "yes", "no" and "restart". The
6 additional confirmation can save your work from accidentally hitting the quit
7 key by requiring two additional keystrokes (y/yes and RET). Additionally it
8 allows for restarting / reloading dwm without ending the xsession and closing
9 all open x windows. To abort press ESC or n/no and RET.
10
11 ---
12 config.def.h | 2 +-
13 dwm.c | 30 ++++++++++++++++++++++++++++++
14 2 files changed, 31 insertions(+), 1 deletion(-)
15
16 diff --git a/config.def.h b/config.def.h
17 index a2ac963..9e3b394 100644
18 --- a/config.def.h
19 +++ b/config.def.h
20 @@ -94,7 +94,7 @@ static Key keys[] = {
21 TAGKEYS( XK_7, 6)
22 TAGKEYS( XK_8, 7)
23 TAGKEYS( XK_9, 8)
24 - { MODKEY|ShiftMask, XK_q, quit, {0} },
25 + { MODKEY|ShiftMask, XK_q, quitprompt, {0} },
26 };
27
28 /* button definitions */
29 diff --git a/dwm.c b/dwm.c
30 index 7c0f978..3761ba4 100644
31 --- a/dwm.c
32 +++ b/dwm.c
33 @@ -188,6 +188,7 @@ static Client *nexttiled(Client *c);
34 static void pop(Client *c);
35 static void propertynotify(XEvent *e);
36 static void quit(const Arg *arg);
37 +static void quitprompt(const Arg *arg);
38 static Monitor *recttomon(int x, int y, int w, int h);
39 static void resize(Client *c, int x, int y, int w, int h, int interact);
40 static void resizeclient(Client *c, int x, int y, int w, int h);
41 @@ -262,6 +263,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
42 };
43 static Atom wmatom[WMLast], netatom[NetLast];
44 static int running = 1;
45 +static int restart = 1;
46 static Cur *cursor[CurLast];
47 static Clr **scheme;
48 static Display *dpy;
49 @@ -1258,6 +1260,31 @@ quit(const Arg *arg)
50 running = 0;
51 }
52
53 +void
54 +quitprompt(const Arg *arg)
55 +{
56 + FILE *pp = popen("echo -e \"no\nrestart\nyes\" | dmenu -i -sb red -p \"Quit DWM?\"", "r");
57 + if(pp != NULL) {
58 + char buf[1024];
59 + if (fgets(buf, sizeof(buf), pp) == NULL) {
60 + fprintf(stderr, "Quitprompt: Error reading pipe!\n");
61 + return;
62 + }
63 + if (strcmp(buf, "yes\n") == 0) {
64 + pclose(pp);
65 + restart = 0;
66 + quit(NULL);
67 + } else if (strcmp(buf, "restart\n") == 0) {
68 + pclose(pp);
69 + restart = 1;
70 + quit(NULL);
71 + } else if (strcmp(buf, "no\n") == 0) {
72 + pclose(pp);
73 + return;
74 + }
75 + }
76 +}
77 +
78 Monitor *
79 recttomon(int x, int y, int w, int h)
80 {
81 @@ -2155,5 +2182,8 @@ main(int argc, char *argv[])
82 run();
83 cleanup();
84 XCloseDisplay(dpy);
85 + if (restart == 1) {
86 + execlp("dwm", "dwm", NULL);
87 + }
88 return EXIT_SUCCESS;
89 }
90 --
91 2.36.0
92