mirror of
				https://github.com/tiyn/dwm.git
				synced 2025-11-03 20:51:15 +01:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
			81d1901820
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f58d147e39 | ||
| 
						 | 
					35271b171c | ||
| 2d72ffe932 | |||
| 7458dff00f | |||
| 76e7f12b7d | |||
| 2b6678b993 | |||
| 3b66ee89b0 | |||
| 00aaef36c5 | |||
| 06edec0e26 | |||
| d7971a2924 | |||
| 22b482d2c9 | |||
| 5fb1ba1806 | |||
| 09cd0a6931 | |||
| 58c2988f12 | |||
| 6255476d24 | |||
| dd78bfd8a9 | |||
| a46043c632 | |||
| cdacc63d2c | 
@@ -23,6 +23,7 @@ The list below shows the currently applied patches to the master branch.
 | 
			
		||||
- dwm-noborder-6.2.diff (removes border if there is only one window)
 | 
			
		||||
- dwm-notitle-6.2.diff (removes window title in the middle of the bar)
 | 
			
		||||
- dwm-pertag-20170513-ceac8c9.diff (allows having a layout/mwfact/barpos/nmaster per tag)
 | 
			
		||||
- dwm-quitprompt-20220718-6613d9f.diff (adds a confirmation prompt before exiting dwm)
 | 
			
		||||
- dwm-status2d-6.2.diff (adds colors and ability to draw rectangles)
 | 
			
		||||
- dwm-statusallmons-6.2.diff (display statusbar on every monitors)
 | 
			
		||||
- dwm-statuscmd-6.2.diff (enables dwmblocks compatibility)
 | 
			
		||||
@@ -43,7 +44,7 @@ build are the following.
 | 
			
		||||
| Super | | 1/2/.../9/0 | Show tag 1/2/.../9/0 |
 | 
			
		||||
| Super | | . | Show monitor lower in stack |
 | 
			
		||||
| Super | | , | Show monitor higher in stack |
 | 
			
		||||
| Super | Shift | Escape | Quit dwm |
 | 
			
		||||
| Super | Shift | Escape | Quit dwm with call for confirmation |
 | 
			
		||||
| Super | Shift | b | Toggle dwmbar |
 | 
			
		||||
| Super | Shift | c | Enable deck(/card) layout |
 | 
			
		||||
| Super | Shift | d | Toggle floating/tiled for selected window |
 | 
			
		||||
@@ -65,6 +66,10 @@ build are the following.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
The following programs are required to be installed for full functionality.
 | 
			
		||||
 | 
			
		||||
- [dmenu](https://github.com/tiyn/dmenu)
 | 
			
		||||
 | 
			
		||||
The most basic way is to clone the repository and then invoke make.
 | 
			
		||||
 | 
			
		||||
- `git clone https://github.com/tiyn/dwm`
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								config.def.h
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								config.def.h
									
									
									
									
									
								
							@@ -13,7 +13,6 @@ static const int showsystray             = 1;     /* 0 means no systray */
 | 
			
		||||
static const int showbar                 = 1;        /* 0 means no bar */
 | 
			
		||||
static const int topbar                  = 1;        /* 0 means bottom bar */
 | 
			
		||||
static const char *fonts[]               = { "monospace:size=10" };
 | 
			
		||||
static const char dmenufont[]            = "monospace:size=10";
 | 
			
		||||
static const char normbgcolor[]          = "#0e0f14";
 | 
			
		||||
static const char normbordercolor[]      = "#363b47";
 | 
			
		||||
static const char normfgcolor[]          = "#dfdfdf";
 | 
			
		||||
@@ -36,15 +35,32 @@ static const unsigned int alphas[][3]      = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* tagging */
 | 
			
		||||
static const char *tags[] = { "", "", "", "", "", "", "", "", "", "" };
 | 
			
		||||
static const char *tags[] = { "", "", "", "", "", "", "", "", "", "" };
 | 
			
		||||
 | 
			
		||||
static const Rule rules[] = {
 | 
			
		||||
	/* xprop(1):
 | 
			
		||||
	 *	WM_CLASS(STRING) = instance, class
 | 
			
		||||
	 *	WM_NAME(STRING) = title
 | 
			
		||||
	 */
 | 
			
		||||
	/* class    instance      title tags mask iscentered    isfloating   monitor */
 | 
			
		||||
	{ NULL,	    "origin.exe", NULL, 0,        0,	        1,           -1 },
 | 
			
		||||
	/* class              instance title                        tags center float mon */
 | 
			
		||||
	{ "firefox",          0,  0,                                1 << 1, 0,  0,  -1 },
 | 
			
		||||
	{ "zen",              0,  0,                                1 << 1, 0,  0,  -1 },
 | 
			
		||||
	{ "Lutris",           0,  0,                                1 << 2, 0,  0,   0 },
 | 
			
		||||
	{ "zenity",           0,  0,                                     0, 0,  1,  -1 },
 | 
			
		||||
	{ "steam",            0,  0,                                1 << 2, 0,  0,   0 },
 | 
			
		||||
	{ "discord",          0,  0,                                1 << 2, 0,  0,   1 },
 | 
			
		||||
	{ "TeamSpeak",        0,  0,                                1 << 2, 0,  0,   1 },
 | 
			
		||||
	{ "Element",          0,  0,                                1 << 2, 0,  0,   1 },
 | 
			
		||||
	{ "Signal",           0,  0,                                1 << 4, 0,  0,   1 },
 | 
			
		||||
	{ "TelegramDesktop",  0,  0,                                1 << 4, 0,  0,   1 },
 | 
			
		||||
	{ "threema-web",      0,  0,                                1 << 4, 0,  0,   1 },
 | 
			
		||||
	{ "thunderbird",      0,  0,                                1 << 4, 0,  0,   1 },
 | 
			
		||||
	{ "Sonixd",           0,  0,                                1 << 8, 0,  0,   1 },
 | 
			
		||||
	{ "KeePassXC",        0,  "Unlock Database - KeePassXC",    1 << 1, 0,  0,   0 },
 | 
			
		||||
	{ "KeePassXC",        0,  0,                                1 << 9, 0,  0,   0 },
 | 
			
		||||
	{ "easyeffects",      0,  0,                                1 << 9, 0,  0,   1 },
 | 
			
		||||
	{ "pavucontrol",      0,  0,                                1 << 9, 0,  0,   1 },
 | 
			
		||||
	{ "Onboard",          0,  0,                                     0, 0,  1,   0 },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* layout(s) */
 | 
			
		||||
@@ -74,13 +90,9 @@ static const Layout layouts[] = {
 | 
			
		||||
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
 | 
			
		||||
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
 | 
			
		||||
 | 
			
		||||
/* commands */
 | 
			
		||||
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
 | 
			
		||||
static const char *dmenucmd[] = { "dmenu_run", "-c", "-l", "20", NULL };
 | 
			
		||||
 | 
			
		||||
static Key keys[] = {
 | 
			
		||||
  /* modifier           key         function        argument */
 | 
			
		||||
  { MODKEY|ShiftMask,   XK_Escape,  quit,           {0} },
 | 
			
		||||
  { MODKEY|ShiftMask,   XK_Escape,  quitprompt,           {0} },
 | 
			
		||||
  { MODKEY|ShiftMask,   XK_b,       togglebar,      {0} },
 | 
			
		||||
  { MODKEY|ShiftMask,   XK_c,       setlayout,      {.v = &layouts[2]} },
 | 
			
		||||
  { MODKEY|ShiftMask,   XK_d,       togglefloating, {0} },
 | 
			
		||||
@@ -124,7 +136,7 @@ static Key keys[] = {
 | 
			
		||||
static Button buttons[] = {
 | 
			
		||||
  /* click          event mask  button    function        argument */
 | 
			
		||||
  { ClkLtSymbol,    0,          Button1,  cyclelayout,    {.i = +1} },
 | 
			
		||||
  { ClkLtSymbol,    0,          Button2,  setlayout,      {.v = &layouts[0]} },
 | 
			
		||||
  { ClkLtSymbol,    0,          Button2,  focusstack,     {.i = +1} },
 | 
			
		||||
  { ClkLtSymbol,    0,          Button3,  cyclelayout,    {.i = -1} },
 | 
			
		||||
  { ClkStatusText,  0,          Button1,  sigdwmblocks,   {.i = 1} },
 | 
			
		||||
  { ClkStatusText,  0,          Button2,  sigdwmblocks,   {.i = 2} },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								dwm-quitprompt-20220718-6613d9f.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								dwm-quitprompt-20220718-6613d9f.diff
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
From eb558048819ed916b272765e64e1ea795a85740e Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Lerrrtaste <lerrrtaste@protonmail.com>
 | 
			
		||||
Date: Mon, 18 Jul 2022 12:22:39 +0200
 | 
			
		||||
Subject: [PATCH] This Patch replaces the default quit behavior with an dmenu
 | 
			
		||||
 prompt. Possible selections are (Quit DWM?) "yes", "no" and "restart". The
 | 
			
		||||
 additional confirmation can save your work from accidentally hitting the quit
 | 
			
		||||
 key by requiring two additional keystrokes (y/yes and RET). Additionally it
 | 
			
		||||
 allows for restarting / reloading dwm without ending the xsession and closing
 | 
			
		||||
 all open x windows. To abort press ESC or n/no and RET.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 config.def.h |  2 +-
 | 
			
		||||
 dwm.c        | 30 ++++++++++++++++++++++++++++++
 | 
			
		||||
 2 files changed, 31 insertions(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
diff --git a/config.def.h b/config.def.h
 | 
			
		||||
index a2ac963..9e3b394 100644
 | 
			
		||||
--- a/config.def.h
 | 
			
		||||
+++ b/config.def.h
 | 
			
		||||
@@ -94,7 +94,7 @@ static Key keys[] = {
 | 
			
		||||
 	TAGKEYS(                        XK_7,                      6)
 | 
			
		||||
 	TAGKEYS(                        XK_8,                      7)
 | 
			
		||||
 	TAGKEYS(                        XK_9,                      8)
 | 
			
		||||
-	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
 | 
			
		||||
+	{ MODKEY|ShiftMask,             XK_q,      quitprompt,           {0} },
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
 /* button definitions */
 | 
			
		||||
diff --git a/dwm.c b/dwm.c
 | 
			
		||||
index 7c0f978..3761ba4 100644
 | 
			
		||||
--- a/dwm.c
 | 
			
		||||
+++ b/dwm.c
 | 
			
		||||
@@ -188,6 +188,7 @@ static Client *nexttiled(Client *c);
 | 
			
		||||
 static void pop(Client *c);
 | 
			
		||||
 static void propertynotify(XEvent *e);
 | 
			
		||||
 static void quit(const Arg *arg);
 | 
			
		||||
+static void quitprompt(const Arg *arg);
 | 
			
		||||
 static Monitor *recttomon(int x, int y, int w, int h);
 | 
			
		||||
 static void resize(Client *c, int x, int y, int w, int h, int interact);
 | 
			
		||||
 static void resizeclient(Client *c, int x, int y, int w, int h);
 | 
			
		||||
@@ -262,6 +263,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
 | 
			
		||||
 };
 | 
			
		||||
 static Atom wmatom[WMLast], netatom[NetLast];
 | 
			
		||||
 static int running = 1;
 | 
			
		||||
+static int restart = 1;
 | 
			
		||||
 static Cur *cursor[CurLast];
 | 
			
		||||
 static Clr **scheme;
 | 
			
		||||
 static Display *dpy;
 | 
			
		||||
@@ -1258,6 +1260,31 @@ quit(const Arg *arg)
 | 
			
		||||
 	running = 0;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+void
 | 
			
		||||
+quitprompt(const Arg *arg)
 | 
			
		||||
+{
 | 
			
		||||
+	FILE *pp = popen("echo -e \"no\nrestart\nyes\" | dmenu -i -sb red -p \"Quit DWM?\"", "r");
 | 
			
		||||
+	if(pp != NULL) {
 | 
			
		||||
+		char buf[1024];
 | 
			
		||||
+		if (fgets(buf, sizeof(buf), pp) == NULL) {
 | 
			
		||||
+			fprintf(stderr, "Quitprompt: Error reading pipe!\n");
 | 
			
		||||
+			return;
 | 
			
		||||
+		}
 | 
			
		||||
+		if (strcmp(buf, "yes\n") == 0) {
 | 
			
		||||
+			pclose(pp);
 | 
			
		||||
+			restart = 0;
 | 
			
		||||
+			quit(NULL);
 | 
			
		||||
+		} else if (strcmp(buf, "restart\n") == 0) {
 | 
			
		||||
+			pclose(pp);
 | 
			
		||||
+			restart = 1;
 | 
			
		||||
+			quit(NULL);
 | 
			
		||||
+		} else if (strcmp(buf, "no\n") == 0) {
 | 
			
		||||
+			pclose(pp);
 | 
			
		||||
+			return;
 | 
			
		||||
+		}
 | 
			
		||||
+	}
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 Monitor *
 | 
			
		||||
 recttomon(int x, int y, int w, int h)
 | 
			
		||||
 {
 | 
			
		||||
@@ -2155,5 +2182,8 @@ main(int argc, char *argv[])
 | 
			
		||||
 	run();
 | 
			
		||||
 	cleanup();
 | 
			
		||||
 	XCloseDisplay(dpy);
 | 
			
		||||
+	if (restart == 1) {
 | 
			
		||||
+		execlp("dwm", "dwm", NULL);
 | 
			
		||||
+	}
 | 
			
		||||
 	return EXIT_SUCCESS;
 | 
			
		||||
 }
 | 
			
		||||
-- 
 | 
			
		||||
2.36.0
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								dwm.c
									
									
									
									
									
								
							@@ -222,6 +222,7 @@ static Client *nexttiled(Client *c);
 | 
			
		||||
static void pop(Client *);
 | 
			
		||||
static void propertynotify(XEvent *e);
 | 
			
		||||
static void quit(const Arg *arg);
 | 
			
		||||
static void quitprompt(const Arg *arg);
 | 
			
		||||
static Monitor *recttomon(int x, int y, int w, int h);
 | 
			
		||||
static void removesystrayicon(Client *i);
 | 
			
		||||
static void resize(Client *c, int x, int y, int w, int h, int interact);
 | 
			
		||||
@@ -314,6 +315,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
 | 
			
		||||
};
 | 
			
		||||
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
 | 
			
		||||
static int running = 1;
 | 
			
		||||
static int restart = 1;
 | 
			
		||||
static Cur *cursor[CurLast];
 | 
			
		||||
static Clr **scheme;
 | 
			
		||||
static Display *dpy;
 | 
			
		||||
@@ -1623,6 +1625,31 @@ quit(const Arg *arg)
 | 
			
		||||
	running = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
quitprompt(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	FILE *pp = popen("echo \"no\nrestart\nyes\" | dmenu -i -p \"Quit DWM?\"", "r");
 | 
			
		||||
	if(pp != NULL) {
 | 
			
		||||
		char buf[1024];
 | 
			
		||||
		if (fgets(buf, sizeof(buf), pp) == NULL) {
 | 
			
		||||
			fprintf(stderr, "Quitprompt: Error reading pipe!\n");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		if (strcmp(buf, "yes\n") == 0) {
 | 
			
		||||
			pclose(pp);
 | 
			
		||||
			restart = 0;
 | 
			
		||||
			quit(NULL);
 | 
			
		||||
		} else if (strcmp(buf, "restart\n") == 0) {
 | 
			
		||||
			pclose(pp);
 | 
			
		||||
			restart = 1;
 | 
			
		||||
			quit(NULL);
 | 
			
		||||
		} else if (strcmp(buf, "no\n") == 0) {
 | 
			
		||||
			pclose(pp);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Monitor *
 | 
			
		||||
recttomon(int x, int y, int w, int h)
 | 
			
		||||
{
 | 
			
		||||
@@ -2091,8 +2118,6 @@ sigdwmblocks(const Arg *arg)
 | 
			
		||||
void
 | 
			
		||||
spawn(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	if (arg->v == dmenucmd)
 | 
			
		||||
		dmenumon[0] = '0' + selmon->num;
 | 
			
		||||
	if (fork() == 0) {
 | 
			
		||||
		if (dpy)
 | 
			
		||||
			close(ConnectionNumber(dpy));
 | 
			
		||||
@@ -2861,6 +2886,9 @@ main(int argc, char *argv[])
 | 
			
		||||
	run();
 | 
			
		||||
	cleanup();
 | 
			
		||||
	XCloseDisplay(dpy);
 | 
			
		||||
	if (restart == 1) {
 | 
			
		||||
		execlp("dwm", "dwm", NULL);
 | 
			
		||||
	}
 | 
			
		||||
	return EXIT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user