Compare commits
	
		
			19 commits
		
	
	
		
			6.3-0.2.0
			...
			applay-key
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9260a252e1 | |||
| 0d2fe14e25 | |||
| fbaab1bbe3 | |||
| aa5d8a8c22 | |||
| 5d3af206be | |||
| b726853f33 | |||
| 138bb0bb41 | |||
| 0c224e26f6 | |||
| 11f2af9ce1 | |||
| 25a26c2a9e | |||
| 214668b975 | |||
| bf3ce283ca | |||
| 8eafb095d2 | |||
| 71981a7941 | |||
| 2d0dd05de5 | |||
| c089ee61e3 | |||
| 6288fd7d0c | |||
| 95139f7f17 | |||
| 2652d5f977 | 
					 13 changed files with 3683 additions and 387 deletions
				
			
		
							
								
								
									
										16
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
					@ -11,7 +11,6 @@
 | 
				
			||||||
- [cool autostart](https://dwm.suckless.org/patches/cool_autostart)
 | 
					- [cool autostart](https://dwm.suckless.org/patches/cool_autostart)
 | 
				
			||||||
- [fullscreen](https://dwm.suckless.org/patches/fullscreen)
 | 
					- [fullscreen](https://dwm.suckless.org/patches/fullscreen)
 | 
				
			||||||
- [gridmode](https://dwm.suckless.org/patches/gridmode)
 | 
					- [gridmode](https://dwm.suckless.org/patches/gridmode)
 | 
				
			||||||
- [keychord](https://dwm.suckless.org/patches/keychord)
 | 
					 | 
				
			||||||
- [movestack](https://dwm.suckless.org/patches/movestack)
 | 
					- [movestack](https://dwm.suckless.org/patches/movestack)
 | 
				
			||||||
- [pertag](https://dwm.suckless.org/patches/pertag)
 | 
					- [pertag](https://dwm.suckless.org/patches/pertag)
 | 
				
			||||||
- [systray](https://dwm.suckless.org/patches/systray)
 | 
					- [systray](https://dwm.suckless.org/patches/systray)
 | 
				
			||||||
| 
						 | 
					@ -19,6 +18,7 @@
 | 
				
			||||||
- [noborder](https://dwm.suckless.org/patches/noborder)
 | 
					- [noborder](https://dwm.suckless.org/patches/noborder)
 | 
				
			||||||
- [fibonacci layouts](https://dwm.suckless.org/patches/fibonacci)
 | 
					- [fibonacci layouts](https://dwm.suckless.org/patches/fibonacci)
 | 
				
			||||||
- [centeredmaster](https://dwm.suckless.org/patches/centeredmaster)
 | 
					- [centeredmaster](https://dwm.suckless.org/patches/centeredmaster)
 | 
				
			||||||
 | 
					- [keychain](https://dwm.suckless.org/patches/keychain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Keys
 | 
					### Keys
 | 
				
			||||||
| Keys                           | Function                                                              |
 | 
					| Keys                           | Function                                                              |
 | 
				
			||||||
| 
						 | 
					@ -27,12 +27,10 @@
 | 
				
			||||||
| modkey + shift + ctrl + d      | Open rofi launcher (small size)                                       |
 | 
					| modkey + shift + ctrl + d      | Open rofi launcher (small size)                                       |
 | 
				
			||||||
| modkey + enter                 | Launche the main terminal (alacritty by default)                      |
 | 
					| modkey + enter                 | Launche the main terminal (alacritty by default)                      |
 | 
				
			||||||
| modkey + t -> a                | Launche the alacritty terminal                                        |
 | 
					| modkey + t -> a                | Launche the alacritty terminal                                        |
 | 
				
			||||||
| modkey + t -> shift + a        | Launche the alacritty terminal with tmux                              |
 | 
					 | 
				
			||||||
| modkey + t -> k                | Launche the kitty terminal                                            |
 | 
					| modkey + t -> k                | Launche the kitty terminal                                            |
 | 
				
			||||||
| modkey + t -> shift + k        | Launche the kitty terminal with tmux                                  |
 | 
					 | 
				
			||||||
| modkey + shift + f -> g        | Launche the GUI file manger (pcmanfm by default)                      |
 | 
					| modkey + shift + f -> g        | Launche the GUI file manger (pcmanfm by default)                      |
 | 
				
			||||||
| modkey + shift + f -> f        | Launche rofi file file browser (small size)                           |
 | 
					| modkey + shift + f -> f        | Launche rofi file file browser (small size)                           |
 | 
				
			||||||
| modkey + shift + f -> r        | Launche ranger in the main terminal                                   |
 | 
					| modkey + shift + f -> t        | Launche the terminal file manger (ranger) in the main terminal        |
 | 
				
			||||||
| modkey + w -> g                | Launche google chrome browser                                         |
 | 
					| modkey + w -> g                | Launche google chrome browser                                         |
 | 
				
			||||||
| modkey + w -> t                | Launche tor browser                                                   |
 | 
					| modkey + w -> t                | Launche tor browser                                                   |
 | 
				
			||||||
| modkey + c -> d                | Launche discord                                                       |
 | 
					| modkey + c -> d                | Launche discord                                                       |
 | 
				
			||||||
| 
						 | 
					@ -61,15 +59,14 @@
 | 
				
			||||||
| modkey + s -> m                | Use the monocle layout                                                |
 | 
					| modkey + s -> m                | Use the monocle layout                                                |
 | 
				
			||||||
| modkey + s -> g                | Use the grid layout                                                   |
 | 
					| modkey + s -> g                | Use the grid layout                                                   |
 | 
				
			||||||
| modkey + s -> r                | Use the spial layout (part from fibonacci layouts)                    |
 | 
					| modkey + s -> r                | Use the spial layout (part from fibonacci layouts)                    |
 | 
				
			||||||
| modkey + s -> shift + r        | Use the dwindle layout (part from fibonacci layouts)                  |
 | 
					| modkey + s -> d                | Use the dwindle layout (part from fibonacci layouts)                  |
 | 
				
			||||||
| modkey + s -> c                | Use the centerd master layout                                         |
 | 
					| modkey + s -> c                | Use the centerd master layout                                         |
 | 
				
			||||||
| modkey + s -> shift + s        | Use the centerd floating master layout                                | 
 | 
					| modkey + s -> x                | Use the centerd floating master layout                                | 
 | 
				
			||||||
| modkey + s -> space            | Toggle between current layout and tile layout                         |
 | 
					| modkey + s -> s                | Toggle between current layout and tile layout                         |
 | 
				
			||||||
| modkey + shift + s             | Toggle sticky mode                                                    |
 | 
					| modkey + shift + s             | Toggle sticky mode                                                    |
 | 
				
			||||||
| modkey + alt + f               | Toggle floating window                                                |
 | 
					| modkey + alt + f               | Toggle floating window                                                |
 | 
				
			||||||
| modkey + m -> c                | Launche the cmus player                                               |
 | 
					| modkey + m -> c                | Launche the cmus player                                               |
 | 
				
			||||||
| modkey + m -> v                | Launche vlc video player                                              |
 | 
					| modkey + m -> v                | Launche vlc video player                                              |
 | 
				
			||||||
| modkey + m -> shift + v        | Lanuche nvlc in the main terminal                                     |
 | 
					 | 
				
			||||||
| modkey + 0                     | View all tags                                                         |
 | 
					| modkey + 0                     | View all tags                                                         |
 | 
				
			||||||
| modkey + shift + 0             | Mirror the current tag in all tags                                    |
 | 
					| modkey + shift + 0             | Mirror the current tag in all tags                                    |
 | 
				
			||||||
| modkey + comma (,)             | -                                                                     |
 | 
					| modkey + comma (,)             | -                                                                     |
 | 
				
			||||||
| 
						 | 
					@ -138,4 +135,5 @@
 | 
				
			||||||
[](https://bitbucket.org/anas_elgarhy/dwm-anas)
 | 
					[](https://bitbucket.org/anas_elgarhy/dwm-anas)
 | 
				
			||||||
[](https://codeberg.org/anas-elgarhy/dwm-anas)
 | 
					[](https://codeberg.org/anas-elgarhy/dwm-anas)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Refrences:
 | 
				
			||||||
 | 
					- [XF86keysym](https://cgit.freedesktop.org/xorg/proto/x11proto/tree/XF86keysym.h)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										266
									
								
								patches/dwm-keychain-20200729-053e3a2.diff
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								patches/dwm-keychain-20200729-053e3a2.diff
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,266 @@
 | 
				
			||||||
 | 
					From e6c2d5fdc6010a22d6cd74485cb0b3e74467d0da Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: braunbearded <braunbearded1@gmail.com>
 | 
				
			||||||
 | 
					Date: Wed, 29 Jul 2020 18:37:47 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 1/4] chain key bindings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 dwm.c | 34 +++++++++++++++++++++++++++++-----
 | 
				
			||||||
 | 
					 1 file changed, 29 insertions(+), 5 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/dwm.c b/dwm.c
 | 
				
			||||||
 | 
					index 9fd0286..7298c5e 100644
 | 
				
			||||||
 | 
					--- a/dwm.c
 | 
				
			||||||
 | 
					+++ b/dwm.c
 | 
				
			||||||
 | 
					@@ -101,6 +101,7 @@ struct Client {
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 typedef struct {
 | 
				
			||||||
 | 
					 	unsigned int mod;
 | 
				
			||||||
 | 
					+    KeySym chain;
 | 
				
			||||||
 | 
					 	KeySym keysym;
 | 
				
			||||||
 | 
					 	void (*func)(const Arg *);
 | 
				
			||||||
 | 
					 	const Arg arg;
 | 
				
			||||||
 | 
					@@ -268,6 +269,7 @@ static Display *dpy;
 | 
				
			||||||
 | 
					 static Drw *drw;
 | 
				
			||||||
 | 
					 static Monitor *mons, *selmon;
 | 
				
			||||||
 | 
					 static Window root, wmcheckwin;
 | 
				
			||||||
 | 
					+static KeySym keychain = -1;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* configuration, allows nested code to access above variables */
 | 
				
			||||||
 | 
					 #include "config.h"
 | 
				
			||||||
 | 
					@@ -954,13 +956,18 @@ grabkeys(void)
 | 
				
			||||||
 | 
					 		unsigned int i, j;
 | 
				
			||||||
 | 
					 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
				
			||||||
 | 
					 		KeyCode code;
 | 
				
			||||||
 | 
					+		KeyCode chain;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 		XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
				
			||||||
 | 
					 		for (i = 0; i < LENGTH(keys); i++)
 | 
				
			||||||
 | 
					-			if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
 | 
				
			||||||
 | 
					+			if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) {
 | 
				
			||||||
 | 
					+				if (keys[i].chain != -1 &&
 | 
				
			||||||
 | 
					+					((chain = XKeysymToKeycode(dpy, keys[i].chain))))
 | 
				
			||||||
 | 
					+						code = chain;
 | 
				
			||||||
 | 
					 				for (j = 0; j < LENGTH(modifiers); j++)
 | 
				
			||||||
 | 
					 					XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
 | 
				
			||||||
 | 
					 						True, GrabModeAsync, GrabModeAsync);
 | 
				
			||||||
 | 
					+			}
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -989,14 +996,31 @@ keypress(XEvent *e)
 | 
				
			||||||
 | 
					 	unsigned int i;
 | 
				
			||||||
 | 
					 	KeySym keysym;
 | 
				
			||||||
 | 
					 	XKeyEvent *ev;
 | 
				
			||||||
 | 
					+	int current = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	ev = &e->xkey;
 | 
				
			||||||
 | 
					 	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
 | 
					-	for (i = 0; i < LENGTH(keys); i++)
 | 
				
			||||||
 | 
					-		if (keysym == keys[i].keysym
 | 
				
			||||||
 | 
					-		&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
 | 
					-		&& keys[i].func)
 | 
				
			||||||
 | 
					+	for (i = 0; i < LENGTH(keys); i++) {
 | 
				
			||||||
 | 
					+		if (keysym == keys[i].keysym && keys[i].chain == -1
 | 
				
			||||||
 | 
					+				&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
 | 
					+				&& keys[i].func)
 | 
				
			||||||
 | 
					+			keys[i].func(&(keys[i].arg));
 | 
				
			||||||
 | 
					+		else if (keysym == keys[i].chain && keychain == -1
 | 
				
			||||||
 | 
					+				&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
 | 
					+				&& keys[i].func) {
 | 
				
			||||||
 | 
					+			current = 1;
 | 
				
			||||||
 | 
					+			keychain = keysym;
 | 
				
			||||||
 | 
					+			XGrabKey(dpy, AnyKey, AnyModifier, root, True, GrabModeAsync,
 | 
				
			||||||
 | 
					+					GrabModeAsync);
 | 
				
			||||||
 | 
					+		} else if (!current && keysym == keys[i].keysym
 | 
				
			||||||
 | 
					+				&& keys[i].chain == keychain
 | 
				
			||||||
 | 
					+				&& keys[i].func)
 | 
				
			||||||
 | 
					 			keys[i].func(&(keys[i].arg));
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+	if (!current) {
 | 
				
			||||||
 | 
					+		keychain = -1;
 | 
				
			||||||
 | 
					+		grabkeys();
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.28.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From ad3d15cf7df3286d35728afef823c3163898e2db Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: braunbearded <braunbearded1@gmail.com>
 | 
				
			||||||
 | 
					Date: Wed, 29 Jul 2020 18:38:15 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 2/4] update default bindings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 config.def.h | 80 +++++++++++++++++++++++++++-------------------------
 | 
				
			||||||
 | 
					 1 file changed, 41 insertions(+), 39 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/config.def.h b/config.def.h
 | 
				
			||||||
 | 
					index 1c0b587..c7cab16 100644
 | 
				
			||||||
 | 
					--- a/config.def.h
 | 
				
			||||||
 | 
					+++ b/config.def.h
 | 
				
			||||||
 | 
					@@ -45,11 +45,11 @@ static const Layout layouts[] = {
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* key definitions */
 | 
				
			||||||
 | 
					 #define MODKEY Mod1Mask
 | 
				
			||||||
 | 
					-#define TAGKEYS(KEY,TAG) \
 | 
				
			||||||
 | 
					-	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					+#define TAGKEYS(CHAIN,KEY,TAG) \
 | 
				
			||||||
 | 
					+	{ MODKEY,                       CHAIN,    KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ControlMask,           CHAIN,    KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             CHAIN,    KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ControlMask|ShiftMask, CHAIN,    KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* helper for spawning shell commands in the pre dwm-5.0 fashion */
 | 
				
			||||||
 | 
					 #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
 | 
				
			||||||
 | 
					@@ -60,40 +60,42 @@ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont,
 | 
				
			||||||
 | 
					 static const char *termcmd[]  = { "st", NULL };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static Key keys[] = {
 | 
				
			||||||
 | 
					-	/* modifier                     key        function        argument */
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_b,      togglebar,      {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_Tab,    view,           {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_space,  setlayout,      {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_1,                      0)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_2,                      1)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_3,                      2)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_4,                      3)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_5,                      4)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_6,                      5)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_7,                      6)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_8,                      7)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_9,                      8)
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
 | 
				
			||||||
 | 
					+	/* modifier                     chain key   key        function        argument */
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_p,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_Return, spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_b,      togglebar,      {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_j,      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_k,      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_i,      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_d,      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_h,      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_l,      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_Tab,    view,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_c,      killclient,     {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_t,      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_f,      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_m,      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_space,  setlayout,      {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_space,  togglefloating, {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_0,      view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_0,      tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_comma,  focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_period, focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_comma,  tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_period, tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_1,                      0)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_2,                      1)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_3,                      2)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_4,                      3)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_5,                      4)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_6,                      5)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_7,                      6)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_8,                      7)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_9,                      8)
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_q,      quit,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_a,       XK_d,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_a,       XK_t,      spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* button definitions */
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.28.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From e9f3eec82010fd6083dc57f058902a1aab2d14ea Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: braunbearded <braunbearded1@gmail.com>
 | 
				
			||||||
 | 
					Date: Wed, 29 Jul 2020 19:07:07 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 3/4] fix bug for mod key ignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 dwm.c | 1 +
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/dwm.c b/dwm.c
 | 
				
			||||||
 | 
					index 7298c5e..aee56d4 100644
 | 
				
			||||||
 | 
					--- a/dwm.c
 | 
				
			||||||
 | 
					+++ b/dwm.c
 | 
				
			||||||
 | 
					@@ -1013,6 +1013,7 @@ keypress(XEvent *e)
 | 
				
			||||||
 | 
					 			XGrabKey(dpy, AnyKey, AnyModifier, root, True, GrabModeAsync,
 | 
				
			||||||
 | 
					 					GrabModeAsync);
 | 
				
			||||||
 | 
					 		} else if (!current && keysym == keys[i].keysym
 | 
				
			||||||
 | 
					+				&& keychain != -1
 | 
				
			||||||
 | 
					 				&& keys[i].chain == keychain
 | 
				
			||||||
 | 
					 				&& keys[i].func)
 | 
				
			||||||
 | 
					 			keys[i].func(&(keys[i].arg));
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.28.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From 053e3a2b2ff87805a15f3fe2f82a7d8bf0ab9b7a Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: braunbearded <braunbearded1@gmail.com>
 | 
				
			||||||
 | 
					Date: Wed, 29 Jul 2020 21:25:23 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 4/4] listen for all keys inkl modifier after prefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 dwm.c | 8 +++++---
 | 
				
			||||||
 | 
					 1 file changed, 5 insertions(+), 3 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/dwm.c b/dwm.c
 | 
				
			||||||
 | 
					index aee56d4..dea8f6a 100644
 | 
				
			||||||
 | 
					--- a/dwm.c
 | 
				
			||||||
 | 
					+++ b/dwm.c
 | 
				
			||||||
 | 
					@@ -993,10 +993,11 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 keypress(XEvent *e)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	unsigned int i;
 | 
				
			||||||
 | 
					+	unsigned int i, j;
 | 
				
			||||||
 | 
					 	KeySym keysym;
 | 
				
			||||||
 | 
					 	XKeyEvent *ev;
 | 
				
			||||||
 | 
					 	int current = 0;
 | 
				
			||||||
 | 
					+	unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	ev = &e->xkey;
 | 
				
			||||||
 | 
					 	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
 | 
					@@ -1010,8 +1011,9 @@ keypress(XEvent *e)
 | 
				
			||||||
 | 
					 				&& keys[i].func) {
 | 
				
			||||||
 | 
					 			current = 1;
 | 
				
			||||||
 | 
					 			keychain = keysym;
 | 
				
			||||||
 | 
					-			XGrabKey(dpy, AnyKey, AnyModifier, root, True, GrabModeAsync,
 | 
				
			||||||
 | 
					-					GrabModeAsync);
 | 
				
			||||||
 | 
					+			for (j = 0; j < LENGTH(modifiers); j++)
 | 
				
			||||||
 | 
					+				XGrabKey(dpy, AnyKey, 0 | modifiers[j], root,
 | 
				
			||||||
 | 
					+						True, GrabModeAsync, GrabModeAsync);
 | 
				
			||||||
 | 
					 		} else if (!current && keysym == keys[i].keysym
 | 
				
			||||||
 | 
					 				&& keychain != -1
 | 
				
			||||||
 | 
					 				&& keys[i].chain == keychain
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.28.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,217 +0,0 @@
 | 
				
			||||||
From e61a957ff8b7e14219b5fbaab9da794b722e7874 Mon Sep 17 00:00:00 2001
 | 
					 | 
				
			||||||
From: Hai Nguyen <hhai2105@gmail.com>
 | 
					 | 
				
			||||||
Date: Fri, 10 Dec 2021 21:45:00 -0500
 | 
					 | 
				
			||||||
Subject: [PATCH] add Keychord struct, change keypress() and grabkeys() to be
 | 
					 | 
				
			||||||
 able to grab a sequence of keystroke
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 config.def.h | 67 ++++++++++++++++++++++++++------------------------
 | 
					 | 
				
			||||||
 dwm.c        | 69 ++++++++++++++++++++++++++++++++++++++++------------
 | 
					 | 
				
			||||||
 2 files changed, 88 insertions(+), 48 deletions(-)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
diff --git a/config.def.h b/config.def.h
 | 
					 | 
				
			||||||
index a2ac963..15a3e05 100644
 | 
					 | 
				
			||||||
--- a/config.def.h
 | 
					 | 
				
			||||||
+++ b/config.def.h
 | 
					 | 
				
			||||||
@@ -46,11 +46,12 @@ static const Layout layouts[] = {
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 /* key definitions */
 | 
					 | 
				
			||||||
 #define MODKEY Mod1Mask
 | 
					 | 
				
			||||||
-#define TAGKEYS(KEY,TAG) \
 | 
					 | 
				
			||||||
-	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
 | 
					 | 
				
			||||||
-	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
					 | 
				
			||||||
-	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+#define TAGKEYS(KEY,TAG)												\
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, KEY}},								view,           {.ui = 1 << TAG} },	\
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ControlMask, KEY}},					toggleview,     {.ui = 1 << TAG} }, \
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, KEY}},						tag,            {.ui = 1 << TAG} }, \
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ControlMask|ShiftMask, KEY}},			toggletag,      {.ui = 1 << TAG} },
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 /* helper for spawning shell commands in the pre dwm-5.0 fashion */
 | 
					 | 
				
			||||||
 #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
 | 
					 | 
				
			||||||
@@ -59,32 +60,34 @@ static const Layout layouts[] = {
 | 
					 | 
				
			||||||
 static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
 | 
					 | 
				
			||||||
 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
 | 
					 | 
				
			||||||
 static const char *termcmd[]  = { "st", NULL };
 | 
					 | 
				
			||||||
+static const char *emacs[]  = { "emacs", NULL };
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-static Key keys[] = {
 | 
					 | 
				
			||||||
-	/* modifier                     key        function        argument */
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_b,      togglebar,      {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_Tab,    view,           {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_space,  setlayout,      {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
 | 
					 | 
				
			||||||
+static Keychord keychords[] = {
 | 
					 | 
				
			||||||
+	/* Keys        function        argument */
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_p}},							spawn,          {.v = dmenucmd } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_Return}},			spawn,          {.v = termcmd } },
 | 
					 | 
				
			||||||
+	{2, {{MODKEY, XK_e}, {MODKEY, XK_e}},			spawn,          {.v = termcmd } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_b}},							togglebar,      {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_j}},							focusstack,     {.i = +1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_k}},							focusstack,     {.i = -1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_i}},							incnmaster,     {.i = +1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_d}},							incnmaster,     {.i = -1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_h}},							setmfact,       {.f = -0.05} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_l}},							setmfact,       {.f = +0.05} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_Return}},						zoom,           {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_Tab}},							view,           {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_c}},					killclient,     {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_t}},							setlayout,      {.v = &layouts[0]} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_f}},							setlayout,      {.v = &layouts[1]} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_m}},							setlayout,      {.v = &layouts[2]} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_space}},						setlayout,      {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_space}},				togglefloating, {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_0}},							view,           {.ui = ~0 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_0}},					tag,            {.ui = ~0 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_comma}},						focusmon,       {.i = -1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY, XK_period}},						focusmon,       {.i = +1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_comma}},				tagmon,         {.i = -1 } },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_period}},			tagmon,         {.i = +1 } },
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_1,                      0)
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_2,                      1)
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_3,                      2)
 | 
					 | 
				
			||||||
@@ -92,9 +95,9 @@ static Key keys[] = {
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_5,                      4)
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_6,                      5)
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_7,                      6)
 | 
					 | 
				
			||||||
-	TAGKEYS(                        XK_8,                      7)
 | 
					 | 
				
			||||||
+	 TAGKEYS(                        XK_8,                      7)
 | 
					 | 
				
			||||||
 	TAGKEYS(                        XK_9,                      8)
 | 
					 | 
				
			||||||
-	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
 | 
					 | 
				
			||||||
+	{1, {{MODKEY|ShiftMask, XK_q}},					quit,           {0} },
 | 
					 | 
				
			||||||
 };
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 /* button definitions */
 | 
					 | 
				
			||||||
diff --git a/dwm.c b/dwm.c
 | 
					 | 
				
			||||||
index 5e4d494..56c4661 100644
 | 
					 | 
				
			||||||
--- a/dwm.c
 | 
					 | 
				
			||||||
+++ b/dwm.c
 | 
					 | 
				
			||||||
@@ -102,9 +102,14 @@ struct Client {
 | 
					 | 
				
			||||||
 typedef struct {
 | 
					 | 
				
			||||||
 	unsigned int mod;
 | 
					 | 
				
			||||||
 	KeySym keysym;
 | 
					 | 
				
			||||||
+} Key;
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+typedef struct {
 | 
					 | 
				
			||||||
+	unsigned int n;
 | 
					 | 
				
			||||||
+	const Key keys[5];
 | 
					 | 
				
			||||||
 	void (*func)(const Arg *);
 | 
					 | 
				
			||||||
 	const Arg arg;
 | 
					 | 
				
			||||||
-} Key;
 | 
					 | 
				
			||||||
+} Keychord;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 typedef struct {
 | 
					 | 
				
			||||||
 	const char *symbol;
 | 
					 | 
				
			||||||
@@ -268,6 +273,7 @@ static Display *dpy;
 | 
					 | 
				
			||||||
 static Drw *drw;
 | 
					 | 
				
			||||||
 static Monitor *mons, *selmon;
 | 
					 | 
				
			||||||
 static Window root, wmcheckwin;
 | 
					 | 
				
			||||||
+unsigned int currentkey = 0;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 /* configuration, allows nested code to access above variables */
 | 
					 | 
				
			||||||
 #include "config.h"
 | 
					 | 
				
			||||||
@@ -951,16 +957,16 @@ grabkeys(void)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
 	updatenumlockmask();
 | 
					 | 
				
			||||||
 	{
 | 
					 | 
				
			||||||
-		unsigned int i, j;
 | 
					 | 
				
			||||||
+		unsigned int i, k;
 | 
					 | 
				
			||||||
 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
					 | 
				
			||||||
 		KeyCode code;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 		XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
					 | 
				
			||||||
-		for (i = 0; i < LENGTH(keys); i++)
 | 
					 | 
				
			||||||
-			if ((code = XKeysymToKeycode(dpy, keys[i].keysym)))
 | 
					 | 
				
			||||||
-				for (j = 0; j < LENGTH(modifiers); j++)
 | 
					 | 
				
			||||||
-					XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
 | 
					 | 
				
			||||||
-						True, GrabModeAsync, GrabModeAsync);
 | 
					 | 
				
			||||||
+		for (i = 0; i < LENGTH(keychords); i++)
 | 
					 | 
				
			||||||
+			if ((code = XKeysymToKeycode(dpy, keychords[i].keys[currentkey].keysym)))
 | 
					 | 
				
			||||||
+				for (k = 0; k < LENGTH(modifiers); k++)
 | 
					 | 
				
			||||||
+					XGrabKey(dpy, code, keychords[i].keys[currentkey].mod | modifiers[k], root,
 | 
					 | 
				
			||||||
+							 True, GrabModeAsync, GrabModeAsync);
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -986,17 +992,48 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
 | 
					 | 
				
			||||||
 void
 | 
					 | 
				
			||||||
 keypress(XEvent *e)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
-	unsigned int i;
 | 
					 | 
				
			||||||
+	XEvent event = *e;
 | 
					 | 
				
			||||||
+	Keychord *keychord;
 | 
					 | 
				
			||||||
+	unsigned int ran = 0;
 | 
					 | 
				
			||||||
 	KeySym keysym;
 | 
					 | 
				
			||||||
 	XKeyEvent *ev;
 | 
					 | 
				
			||||||
-
 | 
					 | 
				
			||||||
-	ev = &e->xkey;
 | 
					 | 
				
			||||||
-	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
					 | 
				
			||||||
-	for (i = 0; i < LENGTH(keys); i++)
 | 
					 | 
				
			||||||
-		if (keysym == keys[i].keysym
 | 
					 | 
				
			||||||
-		&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
					 | 
				
			||||||
-		&& keys[i].func)
 | 
					 | 
				
			||||||
-			keys[i].func(&(keys[i].arg));
 | 
					 | 
				
			||||||
+	Keychord *newoptions;
 | 
					 | 
				
			||||||
+	Keychord *oldoptions = (Keychord *)malloc(sizeof(keychords));
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+	memcpy(oldoptions, keychords, sizeof(keychords));
 | 
					 | 
				
			||||||
+	size_t numoption = 0;
 | 
					 | 
				
			||||||
+	while(!ran){
 | 
					 | 
				
			||||||
+		ev = &event.xkey;
 | 
					 | 
				
			||||||
+		keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
					 | 
				
			||||||
+		newoptions = (Keychord *)malloc(0);
 | 
					 | 
				
			||||||
+		numoption = 0;
 | 
					 | 
				
			||||||
+		for (keychord = oldoptions; keychord->n != 0 && currentkey < 5; keychord = (Keychord *)((char *)keychord + sizeof(Keychord))){
 | 
					 | 
				
			||||||
+			if(keysym == keychord->keys[currentkey].keysym
 | 
					 | 
				
			||||||
+			   && CLEANMASK(keychord->keys[currentkey].mod) == CLEANMASK(ev->state)
 | 
					 | 
				
			||||||
+			   && keychord->func){
 | 
					 | 
				
			||||||
+				if(keychord->n == currentkey +1){
 | 
					 | 
				
			||||||
+					keychord->func(&(keychord->arg));
 | 
					 | 
				
			||||||
+					ran = 1;
 | 
					 | 
				
			||||||
+				}else{
 | 
					 | 
				
			||||||
+					numoption++;
 | 
					 | 
				
			||||||
+					newoptions = (Keychord *)realloc(newoptions, numoption * sizeof(Keychord));
 | 
					 | 
				
			||||||
+					memcpy((char *)newoptions + (numoption -1) * sizeof(Keychord),keychord, sizeof(Keychord));
 | 
					 | 
				
			||||||
+				}
 | 
					 | 
				
			||||||
+			}
 | 
					 | 
				
			||||||
+		}
 | 
					 | 
				
			||||||
+		currentkey++;
 | 
					 | 
				
			||||||
+		if(numoption == 0)
 | 
					 | 
				
			||||||
+			break;
 | 
					 | 
				
			||||||
+		grabkeys();
 | 
					 | 
				
			||||||
+		while (running && !XNextEvent(dpy, &event) && !ran)
 | 
					 | 
				
			||||||
+			if(event.type == KeyPress)
 | 
					 | 
				
			||||||
+				break;
 | 
					 | 
				
			||||||
+		free(oldoptions);
 | 
					 | 
				
			||||||
+		oldoptions = newoptions;
 | 
					 | 
				
			||||||
+	}
 | 
					 | 
				
			||||||
+	free(newoptions);
 | 
					 | 
				
			||||||
+	currentkey = 0;
 | 
					 | 
				
			||||||
+	grabkeys();
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 void
 | 
					 | 
				
			||||||
-- 
 | 
					 | 
				
			||||||
2.34.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										11
									
								
								src/Makefile
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/Makefile
									
										
									
									
									
								
							| 
						 | 
					@ -44,6 +44,17 @@ install: all
 | 
				
			||||||
	sed "s/VERSION/${VERSION}/g" < ../dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
						sed "s/VERSION/${VERSION}/g" < ../dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
				
			||||||
	chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
						chmod 644 ${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktopfile:
 | 
				
			||||||
 | 
						full_path=/usr/share/xsessions/dwm-anas.desktop
 | 
				
			||||||
 | 
						mkdir -p /usr/share/xsessions
 | 
				
			||||||
 | 
						cat <<EOT >> ${full_path}
 | 
				
			||||||
 | 
						[Desktop Entry]
 | 
				
			||||||
 | 
						Type=XSession
 | 
				
			||||||
 | 
						Exec=/usr/local/bin/dwm
 | 
				
			||||||
 | 
						DesktopNames=dwm-anas
 | 
				
			||||||
 | 
						Name=dwm-anas
 | 
				
			||||||
 | 
						Comment=Anas Elgarhy dwm fork, with a lot of beautiful patches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uninstall:
 | 
					uninstall:
 | 
				
			||||||
	rm -f ${DESTDIR}${PREFIX}/bin/dwm\
 | 
						rm -f ${DESTDIR}${PREFIX}/bin/dwm\
 | 
				
			||||||
		${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
							${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								src/colors.h
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/colors.h
									
										
									
									
									
								
							| 
						 | 
					@ -1,29 +1,29 @@
 | 
				
			||||||
#ifndef colors_H
 | 
					#ifndef colors_H
 | 
				
			||||||
#define colors_H
 | 
					#define colors_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define wal "/home/anas/.cache/wal/colors-wal-dwm.h"
 | 
					// #define wal "/home/anas/.cache/wal/colors-wal-dwm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if __has_include(wal)
 | 
					// #if __has_include(wal)
 | 
				
			||||||
#include wal
 | 
					// #include wal
 | 
				
			||||||
#else
 | 
					// #else
 | 
				
			||||||
static const char norm_fg[] = "#e4ded4";
 | 
					static const char norm_fg[] = "#e4ded4";
 | 
				
			||||||
static const char norm_bg[] = "#071F33";
 | 
					static const char norm_bg[] = "#191b1f";
 | 
				
			||||||
static const char norm_border[] = "#9f9b94";
 | 
					static const char norm_border[] = "#282c34";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char sel_fg[] = "#e4ded4";
 | 
					static const char sel_fg[] = "#e4ded4";
 | 
				
			||||||
static const char sel_bg[] = "#3484C8";
 | 
					static const char sel_bg[] = "#3f2124";
 | 
				
			||||||
static const char sel_border[] = "#e4ded4";
 | 
					static const char sel_border[] = "#e4ded4";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char urg_fg[] = "#e4ded4";
 | 
					static const char urg_fg[] = "#e4ded4";
 | 
				
			||||||
static const char urg_bg[] = "#4F86B6";
 | 
					static const char urg_bg[] = "#313036";
 | 
				
			||||||
static const char urg_border[] = "#4F86B6";
 | 
					static const char urg_border[] = "#312e36";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *colors[][3]      = {
 | 
					static const char *colors[][3]      = {
 | 
				
			||||||
    /*               fg           bg         border                         */
 | 
					    /*               fg           bg         border                         */
 | 
				
			||||||
    [SchemeNorm] = { norm_fg,     norm_bg,   norm_border }, // unfocused wins
 | 
					    [SchemeNorm] = { norm_fg,     norm_bg,   norm_border }, // unfocused wins
 | 
				
			||||||
    [SchemeSel]  = { sel_fg,      sel_bg,    sel_border },  // the focused win
 | 
					    [SchemeSel]  = { sel_fg,      sel_bg,    sel_border },  // the focused win
 | 
				
			||||||
    [schemeurg] =  { urg_fg,      urg_bg,    urg_border },
 | 
					    [SchemeUrg] =  { urg_fg,      urg_bg,    urg_border },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					// #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // !colors.h
 | 
					#endif // !colors.h
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										68
									
								
								src/config.def.h.orig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/config.def.h.orig
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,68 @@
 | 
				
			||||||
 | 
					/* See LICENSE file for copyright and license details. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* def */
 | 
				
			||||||
 | 
					#define WEBBROWSER		"google-chrome-stable"
 | 
				
			||||||
 | 
					#define TERMINAL		"alacritty"
 | 
				
			||||||
 | 
					#define SCREENSHOT		"spectacle"
 | 
				
			||||||
 | 
					#define GUI_FILEMANAGER	        "pcmanfm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* appearance */
 | 
				
			||||||
 | 
					static const unsigned int borderpx  = 1;        /* border pixel of windows */
 | 
				
			||||||
 | 
					static const unsigned int gappx     = 3;        /* gaps size between windows */
 | 
				
			||||||
 | 
					static const unsigned int snap      = 32;       /* snap pixel */
 | 
				
			||||||
 | 
					static const unsigned int systraypinning = 0;   /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
 | 
				
			||||||
 | 
					static const unsigned int systrayonleft = 0;   	/* 0: systray in the right corner, >0: systray on left of status text */
 | 
				
			||||||
 | 
					static const unsigned int systrayspacing = 2;   /* systray spacing */
 | 
				
			||||||
 | 
					static const int systraypinningfailfirst = 1;   /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
 | 
				
			||||||
 | 
					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=11", "Noto Color Emoji:size=11", "Nerd Font Mono:weight=bold:size=15:antialias=true:hinting=true" };
 | 
				
			||||||
 | 
					static const char dmenufont[]       = "monospace:size=11";
 | 
				
			||||||
 | 
					static const char col_1[]       = "#282c34"; // Background color of bar
 | 
				
			||||||
 | 
					static const char col_2[]       = "#282c34"; // Background color of unfocused windows border 
 | 
				
			||||||
 | 
					static const char col_3[]       = "#d7d7d7";
 | 
				
			||||||
 | 
					static const char col_4[]       = "#018858"; // Background color of focused windows border and tags (main color acent)
 | 
				
			||||||
 | 
					static const char *colors[][3]      = {
 | 
				
			||||||
 | 
						/*               fg         bg         border   */
 | 
				
			||||||
 | 
						[SchemeNorm] = { col_3, col_1, col_2 },
 | 
				
			||||||
 | 
						[SchemeSel]  = { col_3, col_4,  col_4  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					// Autostart programs
 | 
				
			||||||
 | 
					static const char *const autostart[] = {
 | 
				
			||||||
 | 
					    // Start my build of slstatus
 | 
				
			||||||
 | 
					    "slstatus", NULL,
 | 
				
			||||||
 | 
					    // Keyboard layouts switch (requires setxkbmap)
 | 
				
			||||||
 | 
					    "setxkbmap", "-model", "pc101", "-layout", "us,ar", "-variant", ",,", "-option", "grp:win_space_toggle", NULL,
 | 
				
			||||||
 | 
					    // "xkbset", "exp", "=sticky", "-twokey", "-latchlock", NULL, // sticky keys
 | 
				
			||||||
 | 
					    "/bin/stickykeys", NULL, // sticky keys script
 | 
				
			||||||
 | 
					    "picom", NULL, // Start compositor , for transparency
 | 
				
			||||||
 | 
					    "nitrogen", "--restore", NULL, // Restores the wallpaper
 | 
				
			||||||
 | 
					    "nm-applet", NULL, // Start the network manger
 | 
				
			||||||
 | 
					    "copyq", NULL, // clipboard manger
 | 
				
			||||||
 | 
					     NULL /* terminate */
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* tagging */
 | 
				
			||||||
 | 
					// static const char *tags[] = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
 | 
				
			||||||
 | 
					static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const Rule rules[] = {
 | 
				
			||||||
 | 
						/* xprop(1):
 | 
				
			||||||
 | 
						 *	WM_CLASS(STRING) = instance, class
 | 
				
			||||||
 | 
						 *	WM_NAME(STRING) = title
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						/* class      instance    title       tags mask     isfloating   monitor */
 | 
				
			||||||
 | 
						{ "Gimp",     NULL,       NULL,       0,            1,           -1 },
 | 
				
			||||||
 | 
						{ WEBBROWSER, NULL,       NULL,       1 << 8,       0,           -1 },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* layout(s) */
 | 
				
			||||||
 | 
					static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
 | 
				
			||||||
 | 
					static const int nmaster     = 1;    /* number of clients in master area */
 | 
				
			||||||
 | 
					static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
 | 
				
			||||||
 | 
					static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "layouts/layouts.h"
 | 
				
			||||||
 | 
					#include "movestack.c"
 | 
				
			||||||
 | 
					#include "keys/keys.h"
 | 
				
			||||||
							
								
								
									
										96
									
								
								src/config.def.h.rej
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/config.def.h.rej
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,96 @@
 | 
				
			||||||
 | 
					--- config.def.h
 | 
				
			||||||
 | 
					+++ config.def.h
 | 
				
			||||||
 | 
					@@ -45,11 +45,11 @@ static const Layout layouts[] = {
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* key definitions */
 | 
				
			||||||
 | 
					 #define MODKEY Mod1Mask
 | 
				
			||||||
 | 
					-#define TAGKEYS(KEY,TAG) \
 | 
				
			||||||
 | 
					-	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					-	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					+#define TAGKEYS(CHAIN,KEY,TAG) \
 | 
				
			||||||
 | 
					+	{ MODKEY,                       CHAIN,    KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ControlMask,           CHAIN,    KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             CHAIN,    KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ MODKEY|ControlMask|ShiftMask, CHAIN,    KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* helper for spawning shell commands in the pre dwm-5.0 fashion */
 | 
				
			||||||
 | 
					 #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
 | 
				
			||||||
 | 
					@@ -60,40 +60,42 @@ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont,
 | 
				
			||||||
 | 
					 static const char *termcmd[]  = { "st", NULL };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static Key keys[] = {
 | 
				
			||||||
 | 
					-	/* modifier                     key        function        argument */
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_b,      togglebar,      {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_Tab,    view,           {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_space,  setlayout,      {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_1,                      0)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_2,                      1)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_3,                      2)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_4,                      3)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_5,                      4)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_6,                      5)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_7,                      6)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_8,                      7)
 | 
				
			||||||
 | 
					-	TAGKEYS(                        XK_9,                      8)
 | 
				
			||||||
 | 
					-	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} },
 | 
				
			||||||
 | 
					+	/* modifier                     chain key   key        function        argument */
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_p,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_Return, spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_b,      togglebar,      {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_j,      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_k,      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_i,      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_d,      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_h,      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_l,      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_Tab,    view,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_c,      killclient,     {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_t,      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_f,      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_m,      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_space,  setlayout,      {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_space,  togglefloating, {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_0,      view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_0,      tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_comma,  focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       -1,         XK_period, focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_comma,  tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_period, tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_1,                      0)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_2,                      1)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_3,                      2)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_4,                      3)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_5,                      4)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_6,                      5)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_7,                      6)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_8,                      7)
 | 
				
			||||||
 | 
					+	TAGKEYS(                        -1,         XK_9,                      8)
 | 
				
			||||||
 | 
					+	{ MODKEY|ShiftMask,             -1,         XK_q,      quit,           {0} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_a,       XK_d,      spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_a,       XK_t,      spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* button definitions */
 | 
				
			||||||
| 
						 | 
					@ -16,9 +16,9 @@ static const unsigned int systrayspacing = 2;   /* systray spacing */
 | 
				
			||||||
static const int systraypinningfailfirst = 1;   /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
 | 
					static const int systraypinningfailfirst = 1;   /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
 | 
				
			||||||
static const int showsystray        = 1;     /* 0 means no systray */
 | 
					static const int showsystray        = 1;     /* 0 means no systray */
 | 
				
			||||||
static const int showbar            = 1;        /* 0 means no bar */
 | 
					static const int showbar            = 1;        /* 0 means no bar */
 | 
				
			||||||
static const int topbar             = 1;        /* 0 means bottom bar */
 | 
					static const int topbar             = 0;        /* 0 means bottom bar */
 | 
				
			||||||
static const char *fonts[]          = { "monospace:size=11", "Noto Color Emoji:size=11", "Nerd Font Mono:weight=bold:size=15:antialias=true:hinting=true" };
 | 
					static const char *fonts[]          = { "monospace:size=7", "Noto Color Emoji:size=8", "Nerd Font Mono:size=16:antialias=true:hinting=true" };
 | 
				
			||||||
static const char dmenufont[]       = "monospace:size=11";
 | 
					static const char dmenufont[]       = "monospace:size=8";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "colors.h"
 | 
					#include "colors.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,8 @@ static const char *const autostart[] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* tagging */
 | 
					/* tagging */
 | 
				
			||||||
// static const char *tags[] = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
 | 
					// static const char *tags[] = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
 | 
				
			||||||
static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
 | 
					// static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
 | 
				
			||||||
 | 
					static const char *tags[] = { "www", "dev", "sys", "chat", "img", "vid", "mus", "vbox", "gfx", ";" };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const Rule rules[] = {
 | 
					static const Rule rules[] = {
 | 
				
			||||||
	/* xprop(1):
 | 
						/* xprop(1):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
# dwm-anas version
 | 
					# yo-dwm version
 | 
				
			||||||
VERSION = 6.3-0.1.2
 | 
					VERSION = 6.3-0.2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Customize below to fit your system
 | 
					# Customize below to fit your system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										102
									
								
								src/dwm.c
									
										
									
									
									
								
							
							
						
						
									
										102
									
								
								src/dwm.c
									
										
									
									
									
								
							| 
						 | 
					@ -116,15 +116,11 @@ struct Client {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	unsigned int mod;
 | 
						unsigned int mod;
 | 
				
			||||||
 | 
					    KeySym chain;
 | 
				
			||||||
	KeySym keysym;
 | 
						KeySym keysym;
 | 
				
			||||||
} Key;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
	unsigned int n;
 | 
					 | 
				
			||||||
	const Key keys[5];
 | 
					 | 
				
			||||||
	void (*func)(const Arg *);
 | 
						void (*func)(const Arg *);
 | 
				
			||||||
	const Arg arg;
 | 
						const Arg arg;
 | 
				
			||||||
} Keychord;
 | 
					} Key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	const char *symbol;
 | 
						const char *symbol;
 | 
				
			||||||
| 
						 | 
					@ -214,7 +210,7 @@ static void monocle(Monitor *m);
 | 
				
			||||||
static void motionnotify(XEvent *e);
 | 
					static void motionnotify(XEvent *e);
 | 
				
			||||||
static void movemouse(const Arg *arg);
 | 
					static void movemouse(const Arg *arg);
 | 
				
			||||||
static Client *nexttiled(Client *c);
 | 
					static Client *nexttiled(Client *c);
 | 
				
			||||||
static void pop(Client *c);
 | 
					static void pop(Client *);
 | 
				
			||||||
static void propertynotify(XEvent *e);
 | 
					static void propertynotify(XEvent *e);
 | 
				
			||||||
static void quit(const Arg *arg);
 | 
					static void quit(const Arg *arg);
 | 
				
			||||||
static Monitor *recttomon(int x, int y, int w, int h);
 | 
					static Monitor *recttomon(int x, int y, int w, int h);
 | 
				
			||||||
| 
						 | 
					@ -243,7 +239,7 @@ static void spawn(const Arg *arg);
 | 
				
			||||||
static Monitor *systraytomon(Monitor *m);
 | 
					static Monitor *systraytomon(Monitor *m);
 | 
				
			||||||
static void tag(const Arg *arg);
 | 
					static void tag(const Arg *arg);
 | 
				
			||||||
static void tagmon(const Arg *arg);
 | 
					static void tagmon(const Arg *arg);
 | 
				
			||||||
static void tile(Monitor *m);
 | 
					static void tile(Monitor *);
 | 
				
			||||||
static void togglebar(const Arg *arg);
 | 
					static void togglebar(const Arg *arg);
 | 
				
			||||||
static void togglefloating(const Arg *arg);
 | 
					static void togglefloating(const Arg *arg);
 | 
				
			||||||
static void togglesticky(const Arg *arg);
 | 
					static void togglesticky(const Arg *arg);
 | 
				
			||||||
| 
						 | 
					@ -276,8 +272,8 @@ static void zoom(const Arg *arg);
 | 
				
			||||||
static void autostart_exec(void);
 | 
					static void autostart_exec(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* variables */
 | 
					/* variables */
 | 
				
			||||||
static const char broken[] = "broken";
 | 
					 | 
				
			||||||
static Systray *systray = NULL;
 | 
					static Systray *systray = NULL;
 | 
				
			||||||
 | 
					static const char broken[] = "broken";
 | 
				
			||||||
static char stext[256];
 | 
					static char stext[256];
 | 
				
			||||||
static int screen;
 | 
					static int screen;
 | 
				
			||||||
static int sw, sh;           /* X display screen geometry width, height */
 | 
					static int sw, sh;           /* X display screen geometry width, height */
 | 
				
			||||||
| 
						 | 
					@ -310,7 +306,7 @@ static Display *dpy;
 | 
				
			||||||
static Drw *drw;
 | 
					static Drw *drw;
 | 
				
			||||||
static Monitor *mons, *selmon;
 | 
					static Monitor *mons, *selmon;
 | 
				
			||||||
static Window root, wmcheckwin;
 | 
					static Window root, wmcheckwin;
 | 
				
			||||||
unsigned int currentkey = 0;
 | 
					static KeySym keychain = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* configuration, allows nested code to access above variables */
 | 
					/* configuration, allows nested code to access above variables */
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
| 
						 | 
					@ -1138,16 +1134,21 @@ grabkeys(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	updatenumlockmask();
 | 
						updatenumlockmask();
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		unsigned int i, k;
 | 
							unsigned int i, j;
 | 
				
			||||||
		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
							unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
				
			||||||
		KeyCode code;
 | 
							KeyCode code;
 | 
				
			||||||
 | 
							KeyCode chain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
							XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
				
			||||||
		for (i = 0; i < LENGTH(keychords); i++)
 | 
							for (i = 0; i < LENGTH(keys); i++)
 | 
				
			||||||
			if ((code = XKeysymToKeycode(dpy, keychords[i].keys[currentkey].keysym)))
 | 
								if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) {
 | 
				
			||||||
				for (k = 0; k < LENGTH(modifiers); k++)
 | 
									if (keys[i].chain != -1 &&
 | 
				
			||||||
					XGrabKey(dpy, code, keychords[i].keys[currentkey].mod | modifiers[k], root,
 | 
										((chain = XKeysymToKeycode(dpy, keys[i].chain))))
 | 
				
			||||||
							 True, GrabModeAsync, GrabModeAsync);
 | 
											code = chain;
 | 
				
			||||||
 | 
									for (j = 0; j < LENGTH(modifiers); j++)
 | 
				
			||||||
 | 
										XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
 | 
				
			||||||
 | 
											True, GrabModeAsync, GrabModeAsync);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1173,48 +1174,37 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
keypress(XEvent *e)
 | 
					keypress(XEvent *e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	XEvent event = *e;
 | 
						unsigned int i, j;
 | 
				
			||||||
	Keychord *keychord;
 | 
					 | 
				
			||||||
	unsigned int ran = 0;
 | 
					 | 
				
			||||||
	KeySym keysym;
 | 
						KeySym keysym;
 | 
				
			||||||
	XKeyEvent *ev;
 | 
						XKeyEvent *ev;
 | 
				
			||||||
	Keychord *newoptions;
 | 
						int current = 0;
 | 
				
			||||||
	Keychord *oldoptions = (Keychord *)malloc(sizeof(keychords));
 | 
						unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(oldoptions, keychords, sizeof(keychords));
 | 
						ev = &e->xkey;
 | 
				
			||||||
	size_t numoption = 0;
 | 
						keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
	while(!ran){
 | 
						for (i = 0; i < LENGTH(keys); i++) {
 | 
				
			||||||
		ev = &event.xkey;
 | 
							if (keysym == keys[i].keysym && keys[i].chain == -1
 | 
				
			||||||
		keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
									&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
		newoptions = (Keychord *)malloc(0);
 | 
									&& keys[i].func)
 | 
				
			||||||
		numoption = 0;
 | 
								keys[i].func(&(keys[i].arg));
 | 
				
			||||||
		for (keychord = oldoptions; keychord->n != 0 && currentkey < 5; keychord = (Keychord *)((char *)keychord + sizeof(Keychord))){
 | 
							else if (keysym == keys[i].chain && keychain == -1
 | 
				
			||||||
			if(keysym == keychord->keys[currentkey].keysym
 | 
									&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
			   && CLEANMASK(keychord->keys[currentkey].mod) == CLEANMASK(ev->state)
 | 
									&& keys[i].func) {
 | 
				
			||||||
			   && keychord->func){
 | 
								current = 1;
 | 
				
			||||||
				if(keychord->n == currentkey +1){
 | 
								keychain = keysym;
 | 
				
			||||||
					keychord->func(&(keychord->arg));
 | 
								for (j = 0; j < LENGTH(modifiers); j++)
 | 
				
			||||||
					ran = 1;
 | 
									XGrabKey(dpy, AnyKey, 0 | modifiers[j], root,
 | 
				
			||||||
				}else{
 | 
											True, GrabModeAsync, GrabModeAsync);
 | 
				
			||||||
					numoption++;
 | 
							} else if (!current && keysym == keys[i].keysym
 | 
				
			||||||
					newoptions = (Keychord *)realloc(newoptions, numoption * sizeof(Keychord));
 | 
									&& keychain != -1
 | 
				
			||||||
					memcpy((char *)newoptions + (numoption -1) * sizeof(Keychord),keychord, sizeof(Keychord));
 | 
									&& keys[i].chain == keychain
 | 
				
			||||||
				}
 | 
									&& keys[i].func)
 | 
				
			||||||
			}
 | 
								keys[i].func(&(keys[i].arg));
 | 
				
			||||||
		}
 | 
						}
 | 
				
			||||||
		currentkey++;
 | 
						if (!current) {
 | 
				
			||||||
		if(numoption == 0)
 | 
							keychain = -1;
 | 
				
			||||||
			break;
 | 
							grabkeys();
 | 
				
			||||||
		grabkeys();
 | 
					 | 
				
			||||||
		while (running && !XNextEvent(dpy, &event) && !ran)
 | 
					 | 
				
			||||||
			if(event.type == KeyPress)
 | 
					 | 
				
			||||||
				break;
 | 
					 | 
				
			||||||
		free(oldoptions);
 | 
					 | 
				
			||||||
		oldoptions = newoptions;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	free(newoptions);
 | 
					 | 
				
			||||||
	currentkey = 0;
 | 
					 | 
				
			||||||
	grabkeys();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -1823,7 +1813,7 @@ setmfact(const Arg *arg)
 | 
				
			||||||
	f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
 | 
						f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
 | 
				
			||||||
	if (f < 0.05 || f > 0.95)
 | 
						if (f < 0.05 || f > 0.95)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	selmon->mfact = f;
 | 
						selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
 | 
				
			||||||
	arrange(selmon);
 | 
						arrange(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1835,8 +1825,6 @@ setup(void)
 | 
				
			||||||
	Atom utf8string;
 | 
						Atom utf8string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* clean up any zombies immediately */
 | 
						/* clean up any zombies immediately */
 | 
				
			||||||
	if (signal(SIGCHLD, sigchld) == SIG_ERR)
 | 
					 | 
				
			||||||
		die("can't install SIGCHLD handler:");
 | 
					 | 
				
			||||||
	sigchld(0);
 | 
						sigchld(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* init screen */
 | 
						/* init screen */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2641
									
								
								src/dwm.c.orig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2641
									
								
								src/dwm.c.orig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										176
									
								
								src/keys/keys.c
									
										
									
									
									
								
							
							
						
						
									
										176
									
								
								src/keys/keys.c
									
										
									
									
									
								
							| 
						 | 
					@ -10,159 +10,161 @@ static const char *termcmd[]  = { TERMINAL, NULL };
 | 
				
			||||||
/* key definitions */
 | 
					/* key definitions */
 | 
				
			||||||
#define MODKEY Mod4Mask // win/super key
 | 
					#define MODKEY Mod4Mask // win/super key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TAGKEYS(KEY,TAG) \
 | 
					#define TAGKEYS(CHAIN,KEY,TAG) \
 | 
				
			||||||
	{1, {{MODKEY,                        KEY}},      view,           {.ui = 1 << TAG} }, \
 | 
					   { MODKEY,                       CHAIN,    KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ControlMask,            KEY}},      toggleview,     {.ui = 1 << TAG} }, \
 | 
					   { MODKEY|ControlMask,           CHAIN,    KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,              KEY}},      tag,            {.ui = 1 << TAG} }, \
 | 
					   { MODKEY|ShiftMask,             CHAIN,    KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ControlMask|ShiftMask,  KEY}},      toggletag,      {.ui = 1 << TAG} },
 | 
					   { MODKEY|ControlMask|ShiftMask, CHAIN,    KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
// X11 keysym definitions
 | 
					// X11 keysym definitions
 | 
				
			||||||
#include <X11/XF86keysym.h> // req (libxinerama1 and libxinerama-dev)
 | 
					#include <X11/XF86keysym.h> // req (libxinerama1 and libxinerama-dev)
 | 
				
			||||||
static Keychord keychords[] = {
 | 
					static Key keys[] = {
 | 
				
			||||||
	/* modifier                     key        function        argument */
 | 
						/* modifier                     chain key         key        function        argument */
 | 
				
			||||||
	/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
						/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
				
			||||||
	// Dmenu (launcher)
 | 
						// Dmenu (launcher)
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,             XK_d}},      spawn,                  {.v = dmenucmd } },
 | 
						{ MODKEY|ShiftMask,             -1,              XK_d,      spawn,                  {.v = dmenucmd } },
 | 
				
			||||||
	// Rofi launcher (small)
 | 
						// Rofi launcher (small)
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask|ControlMask, XK_d}},      spawn,                  SHCMD("rofi -show drun") }, 
 | 
						{ MODKEY|ShiftMask|ControlMask, -1,              XK_d,      spawn,                  SHCMD("rofi -show drun") },
 | 
				
			||||||
	// Start the main terminal
 | 
						// Start the main terminal
 | 
				
			||||||
	{1, {{MODKEY,                       XK_Return}}, spawn,                  {.v = termcmd } },
 | 
						{ MODKEY,                       -1,              XK_Return, spawn,                  {.v = termcmd } },
 | 
				
			||||||
        // Start the alacritty terminal
 | 
					        // Start the alacritty terminal
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {0, XK_a}},      spawn,              SHCMD("alacritty")  },
 | 
						{ MODKEY,                        XK_t,            XK_a,           spawn,              SHCMD("alacritty")  },
 | 
				
			||||||
	// Start the alacritty terminal with tmux
 | 
						// Start the alacritty terminal with tmux
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {ShiftMask, XK_a}},      spawn,           SHCMD("alacritty -e tmux")  },
 | 
						// { MODKEY,                        XK_t,            XK_a|ShiftMask, spawn,           SHCMD("alacritty -e tmux")  },
 | 
				
			||||||
        // kitty
 | 
					        // kitty
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
						{ MODKEY,                        XK_t,            XK_k,      spawn,           SHCMD("kitty")  },
 | 
				
			||||||
        // kitty with tmux
 | 
					        // kitty with tmux
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {ShiftMask, XK_k}},      spawn,           SHCMD("kitty -e tmux")  },
 | 
						// { MODKEY,                        XK_t,            ShiftMask|XK_k,      spawn,           SHCMD("kitty -e tmux")  },
 | 
				
			||||||
	/************************************* File browsers *************************************/
 | 
						/************************************* File browsers *************************************/
 | 
				
			||||||
        // GUI filebrowser (pcmanfm)
 | 
					        // GUI filebrowser (pcmanfm)
 | 
				
			||||||
	{2, {{MODKEY|ShiftMask, XK_f},      {0, XK_g}},     spawn,           SHCMD(GUI_FILEMANAGER) },
 | 
						{ MODKEY|ShiftMask,             XK_f,             XK_g,     spawn,           SHCMD(GUI_FILEMANAGER) },
 | 
				
			||||||
	// Rofi file browser (small)
 | 
						// Rofi file browser (small)
 | 
				
			||||||
        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_f}},     spawn,           SHCMD("rofi -show filebrowser") },
 | 
					        { MODKEY|ShiftMask,             XK_f,             XK_f,     spawn,           SHCMD("rofi -show filebrowser") },
 | 
				
			||||||
        // ranger
 | 
					        // Terminal file manager (ranger)
 | 
				
			||||||
        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_r}},     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
					        { MODKEY|ShiftMask,             XK_f,             XK_t,     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
				
			||||||
	/************************************* Start the web browers *************************************/
 | 
						/************************************* Start the web browers *************************************/
 | 
				
			||||||
        // Google chrome stable
 | 
					        // Google chrome stable
 | 
				
			||||||
	{2, {{MODKEY, XK_w},                {0, XK_g}},     spawn,           SHCMD(WEBBROWSER) },
 | 
						{ MODKEY,                       XK_w,             XK_g,     spawn,           SHCMD(WEBBROWSER) },
 | 
				
			||||||
        // Tor brower
 | 
					        // Tor brower
 | 
				
			||||||
	{2, {{MODKEY, XK_w},                {0, XK_t}},     spawn,           SHCMD("tor-browser") },
 | 
						{ MODKEY,                       XK_w,             XK_t,     spawn,           SHCMD("tor-browser") },
 | 
				
			||||||
	/************************************* Start the caht/email/\* apps *************************************/
 | 
						/************************************* Start the caht/email/\* apps *************************************/
 | 
				
			||||||
	// Discord
 | 
						// Discord
 | 
				
			||||||
	{2, {{MODKEY, XK_c},                {0, XK_d}},      spawn,           SHCMD("discord") },
 | 
						{ MODKEY,                       XK_c,             XK_d,      spawn,           SHCMD("discord") },
 | 
				
			||||||
        // Obsidian
 | 
					        // Obsidian
 | 
				
			||||||
	{2, {{MODKEY, XK_c},                {0, XK_o}},      spawn,           SHCMD("obsidian") },
 | 
						{ MODKEY,                       XK_c,             XK_o,      spawn,           SHCMD("obsidian") },
 | 
				
			||||||
	/************************************* Start the dev apps *************************************/
 | 
						/************************************* Start the dev apps *************************************/
 | 
				
			||||||
	// Jetbrains toolbox
 | 
						// Jetbrains toolbox
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_j}},     spawn,         SHCMD("jetbrains-toolbox") },
 | 
						{ MODKEY,                       XK_a,              XK_j,     spawn,         SHCMD("jetbrains-toolbox") },
 | 
				
			||||||
        // NeoVim
 | 
					        // NeoVim
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
						{ MODKEY,                       XK_a,              XK_n,     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
				
			||||||
        // Vim
 | 
					        // Vim
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
						{ MODKEY,                       XK_a,              XK_v,     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
				
			||||||
        // emacs
 | 
					        // emacs
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
						{ MODKEY,                       XK_a,              XK_e,     spawn,         SHCMD("emacs") },
 | 
				
			||||||
	/************************************* Start personalize apps *************************************/
 | 
						/************************************* Start personalize apps *************************************/
 | 
				
			||||||
        // nitrogen
 | 
					        // nitrogen
 | 
				
			||||||
        {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
					        { MODKEY,                       XK_p,             XK_b,    spawn,         SHCMD("nitrogen") },
 | 
				
			||||||
        // nm-connection-editor
 | 
					        // nm-connection-editor
 | 
				
			||||||
        {2, {{MODKEY, XK_p},                {0, XK_n}},    spawn,         SHCMD("nm-connection-editor") },
 | 
					        { MODKEY,                       XK_p,             XK_n,    spawn,         SHCMD("nm-connection-editor") },
 | 
				
			||||||
	/************************************* Start multi media apps *************************************/
 | 
						/************************************* Start multi media apps *************************************/
 | 
				
			||||||
        // cmus
 | 
					        // cmus
 | 
				
			||||||
        {2, {{MODKEY, XK_m},                 {0, XK_c}},    spawn,          SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
 | 
					        { MODKEY,                       XK_m,             XK_c,    spawn,          SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
 | 
				
			||||||
        // vlc
 | 
					        // vlc
 | 
				
			||||||
        {2, {{MODKEY, XK_m},                 {0, XK_v}},    spawn,          SHCMD("vlc") },
 | 
					        { MODKEY,                       XK_m,             XK_v,    spawn,          SHCMD("vlc") },
 | 
				
			||||||
        // vlc in the main terminal
 | 
					        // vlc in the main terminal
 | 
				
			||||||
        {2, {{MODKEY, XK_m},                 {ShiftMask, XK_v}},    spawn,          SHCMD(TERMINAL "nvlc") },
 | 
					        // { MODKEY|ShiftMask,             XK_m,             XK_v,    spawn,          SHCMD(TERMINAL "nvlc") },
 | 
				
			||||||
	/************************************* Start the emoji piker apps *************************************/
 | 
						/************************************* Start the emoji piker apps *************************************/
 | 
				
			||||||
	// Emoji selector (rofi)
 | 
						// Emoji selector (rofi)
 | 
				
			||||||
	{1, {{Mod4Mask,                    XK_e}},    spawn,          SHCMD("rofi -show emoji") },
 | 
					        { Mod4Mask,                     -1,               XK_e,    spawn,          SHCMD("rofimoji") },
 | 
				
			||||||
	/************************************* dwm keys *************************************/
 | 
						/************************************* dwm keys *************************************/
 | 
				
			||||||
	// Full screen mode
 | 
						// Full screen mode
 | 
				
			||||||
	{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
						{ MODKEY,			-1,               XK_f,    fullscreen,     {0} },
 | 
				
			||||||
	// Toggle the slstatus bar (hide/show)
 | 
						// Toggle the slstatus bar (hide/show)
 | 
				
			||||||
	{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
						{ MODKEY,                       -1,               XK_b,    togglebar,      {0} },
 | 
				
			||||||
        // Change the focus
 | 
					        // Change the focus
 | 
				
			||||||
	{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
						{ MODKEY,                       -1,               XK_j,    focusstack,     {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
						{ MODKEY,                       -1,               XK_k,    focusstack,     {.i = -1 } },
 | 
				
			||||||
        // Change the stack layout (horizontal/virtecal)
 | 
					        // Change the stack layout (horizontal/virtecal)
 | 
				
			||||||
	{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
						{ MODKEY,                       -1,               XK_i,    incnmaster,     {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_d}},      incnmaster,     {.i = -1 } },
 | 
						{ MODKEY,                       -1,               XK_d,    incnmaster,     {.i = -1 } },
 | 
				
			||||||
        // Change the focus window size (in the tile mode)
 | 
					        // Change the focus window size (in the tile mode)
 | 
				
			||||||
	{1, {{MODKEY,                   XK_h}},      setmfact,       {.f = -0.05} },
 | 
						{ MODKEY,                       -1,               XK_h,    setmfact,       {.f = -0.05} },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
						{ MODKEY,                       -1,               XK_l,    setmfact,       {.f = +0.05} },
 | 
				
			||||||
//	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
					//	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
						{ MODKEY,                       -1,               XK_Tab,  view,           {0} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
						{ MODKEY|ShiftMask,             -1,               XK_j,    movestack,      {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
						{ MODKEY|ShiftMask,             -1,               XK_k,    movestack,      {.i = -1 } },
 | 
				
			||||||
        // Toogle styky mode
 | 
					        // Toogle styky mode
 | 
				
			||||||
        {1, {{MODKEY|ShiftMask,          XK_s}},     togglesticky,    {0} },
 | 
					        { MODKEY|ShiftMask,             -1,               XK_s,   togglesticky,    {0} },
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
	// Quit from the foucsed window (kill)
 | 
						// Quit from the foucsed window (kill)
 | 
				
			||||||
	{2, {{MODKEY, XK_q},            {0, XK_q}},      killclient,     {0} },
 | 
						{ MODKEY,                      XK_q,              XK_q,   killclient,     {0} },
 | 
				
			||||||
        /************************* Switch between layouts *************************/
 | 
					        /************************* Switch between layouts *************************/
 | 
				
			||||||
	// Tiled layout
 | 
						// Tiled layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_t}},      setlayout,      {.v = &layouts[0]} },
 | 
						{ MODKEY,                     XK_s,              XK_t,    setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
	// Floating layout
 | 
						// Floating layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
					        { MODKEY,                     XK_s,              XK_f,    setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
	// Monocle layout
 | 
						// Monocle layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
						{ MODKEY,                     XK_s,              XK_m,    setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
        // Grid layout
 | 
					        // Grid layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
						{ MODKEY,                     XK_s,              XK_g,    setlayout,      {.v = &layouts[3]} },
 | 
				
			||||||
        // Spiral layout
 | 
					        // Spiral layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
						{ MODKEY,                     XK_s,              XK_r,    setlayout,      {.v = &layouts[4]} },
 | 
				
			||||||
        // Dwindle layout
 | 
					        // Dwindle layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
						{ MODKEY,                     XK_s,              XK_d,    setlayout,      {.v = &layouts[5]} },
 | 
				
			||||||
        // Centerd master layout
 | 
					        // Centerd master layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_c}},      setlayout,      {.v = &layouts[6]} },
 | 
						{ MODKEY,                     XK_s,              XK_c,    setlayout,      {.v = &layouts[6]} },
 | 
				
			||||||
        // Centerd floating master layout
 | 
					        // Centerd floating master layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {ShiftMask, XK_c}},      setlayout,      {.v = &layouts[7]} },
 | 
						{ MODKEY,                     XK_s,              XK_x,    setlayout,      {.v = &layouts[7]} },
 | 
				
			||||||
 | 
					        // Toggle between current layout and tile layout
 | 
				
			||||||
 | 
						{ MODKEY,                     XK_s,              XK_s,    setlayout,      {0} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Toggle between current layout and tile layout  
 | 
					 | 
				
			||||||
	{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
					 | 
				
			||||||
        // Toggle floating window
 | 
					        // Toggle floating window
 | 
				
			||||||
	{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
						{ MODKEY|Mod1Mask,           -1,                XK_f,     togglefloating,     {0} },
 | 
				
			||||||
        // View all tags
 | 
					        // View all tags
 | 
				
			||||||
	{1, {{MODKEY,                    XK_0}},        view,           {.ui = ~0 } },
 | 
						{ MODKEY,                    -1,                XK_0,      view,           {.ui = ~0 } },
 | 
				
			||||||
        // Mirror the current tagg in all tags
 | 
					        // Mirror the current tagg in all tags
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_0}},        tag,            {.ui = ~0 } },
 | 
						{ MODKEY|ShiftMask,          -1,                XK_0,      tag,            {.ui = ~0 } },
 | 
				
			||||||
        // I don't know
 | 
					        // I don't know
 | 
				
			||||||
	{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
						{ MODKEY,                    -1,                XK_comma,  focusmon,       {.i = -1 } },
 | 
				
			||||||
	{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
						{ MODKEY,                    -1,                XK_period, focusmon,       {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
						{ MODKEY|ShiftMask,          -1,                XK_comma,  tagmon,         {.i = -1 } },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
						{ MODKEY|ShiftMask,          -1,                XK_period, tagmon,         {.i = +1 } },
 | 
				
			||||||
        /************************* Tag keys *************************/
 | 
					        /************************* Tag keys *************************/
 | 
				
			||||||
	TAGKEYS(                         XK_1,                      0)
 | 
						TAGKEYS(                     -1,                XK_1,                      0)
 | 
				
			||||||
	TAGKEYS(                         XK_2,                      1)
 | 
						TAGKEYS(                     -1,                XK_2,                      1)
 | 
				
			||||||
	TAGKEYS(                         XK_3,                      2)
 | 
						TAGKEYS(                     -1,                XK_3,                      2)
 | 
				
			||||||
	TAGKEYS(                         XK_4,                      3)
 | 
						TAGKEYS(                     -1,                XK_4,                      3)
 | 
				
			||||||
	TAGKEYS(                         XK_5,                      4)
 | 
						TAGKEYS(                     -1,                XK_5,                      4)
 | 
				
			||||||
	TAGKEYS(                         XK_6,                      5)
 | 
						TAGKEYS(                     -1,                XK_6,                      5)
 | 
				
			||||||
	TAGKEYS(                         XK_7,                      6)
 | 
						TAGKEYS(                     -1,                XK_7,                      6)
 | 
				
			||||||
	TAGKEYS(                         XK_8,                      7)
 | 
						TAGKEYS(                     -1,                XK_8,                      7)
 | 
				
			||||||
	TAGKEYS(                         XK_9,                      8)
 | 
						TAGKEYS(                     -1,                XK_9,                      8)
 | 
				
			||||||
 | 
					        TAGKEYS(                     -1,                XK_semicolon,              9)
 | 
				
			||||||
	/* ---------------------------------- Control Keys ---------------------------------- */
 | 
						/* ---------------------------------- Control Keys ---------------------------------- */
 | 
				
			||||||
	// Brightness controllers (requires xbacklight)
 | 
						// Brightness controllers (requires xbacklight)
 | 
				
			||||||
	{1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
						{ 0,                            -1,      XF86XK_MonBrightnessUp,   spawn, SHCMD("xbacklight -inc 5") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
 | 
						{ 0,                            -1,      XF86XK_MonBrightnessDown, spawn, SHCMD("xbacklight -dec 5") },
 | 
				
			||||||
	// Sound controllers (requires pamixer)
 | 
						// Sound controllers (requires pamixer)
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
 | 
						{ 0,                            -1,      XF86XK_AudioRaiseVolume, spawn, SHCMD("pamixer --allow-boost -i 4") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
						{ 0,                            -1,      XF86XK_AudioLowerVolume, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
						{ 0,                            -1,      XF86XK_AudioMute,        spawn, SHCMD("pamixer -t") },
 | 
				
			||||||
	// Media controls (requires playerctl)
 | 
						// Media controls (requires playerctl)
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
						{ 0,                            -1,      XF86XK_AudioPlay,	 spawn,	SHCMD("playerctl play-pause") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
						{ 0,                            -1,      XF86XK_AudioStop,       spawn, SHCMD("playerctl stop") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
						{ 0,                            -1,      XF86XK_AudioNext,	 spawn,	SHCMD("playerctl next") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioPrev}},	 spawn,	SHCMD("playerctl previous")  },
 | 
						{ 0,                            -1,      XF86XK_AudioPrev,	 spawn,	SHCMD("playerctl previous")  },
 | 
				
			||||||
        // Mute and unmute mic
 | 
					        // Mute and unmute mic
 | 
				
			||||||
	{1, {{0,			       XF86XK_AudioMicMute}},	spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
						{ 0, 			        -1,      XF86XK_AudioMicMute,	 spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
				
			||||||
	// Take a screenshot
 | 
						// Take a screenshot
 | 
				
			||||||
	{1, {{0,			       XK_Print}},		spawn, SHCMD(SCREENSHOT) },
 | 
						{ 0,                            -1,      XK_Print,		 spawn, SHCMD(SCREENSHOT) },
 | 
				
			||||||
	/* ---------------------------------- lock Keys ---------------------------------- */
 | 
						/* ---------------------------------- lock Keys ---------------------------------- */
 | 
				
			||||||
	// Lock the screen
 | 
						// Lock the screen
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,    	       XK_x}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
						{ MODKEY|ShiftMask,             -1,      XK_x,                   spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
	// Kill dwm (super + shift + alt + q)
 | 
					        { 0,                            -1,      XF86XK_Suspend,         spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
						// // Kill dwm (super + shift + alt + q)
 | 
				
			||||||
 | 
						// { MODKEY|ShiftMask|Mod1Mask,    -1,      XK_q,                   quit,           {0} },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* button definitions */
 | 
					/* button definitions */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										442
									
								
								src/keys/keys.c.orig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										442
									
								
								src/keys/keys.c.orig
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,442 @@
 | 
				
			||||||
 | 
					/* 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", "-m", dmenumon, "-fn", dmenufont, "-nb", norm_bg, 
 | 
				
			||||||
 | 
					  "-nf", norm_fg, "-sb", sel_bg, "-sf", sel_fg, NULL };
 | 
				
			||||||
 | 
					static const char *termcmd[]  = { TERMINAL, NULL };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key definitions */
 | 
				
			||||||
 | 
					#define MODKEY Mod4Mask // win/super key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TAGKEYS(KEY,TAG) \
 | 
				
			||||||
 | 
						{ MODKEY,                        KEY,      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
						{ MODKEY|ControlMask,            KEY,      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
						{ MODKEY|ShiftMask,              KEY,      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
						{ MODKEY|ControlMask|ShiftMask,  KEY,      toggletag,      {.ui = 1 << TAG} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// X11 keysym definitions
 | 
				
			||||||
 | 
					#include <X11/XF86keysym.h> // req (libxinerama1 and libxinerama-dev)
 | 
				
			||||||
 | 
					static Key keys[] = {
 | 
				
			||||||
 | 
						/* modifier                     key        function        argument */
 | 
				
			||||||
 | 
						/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
				
			||||||
 | 
						// Dmenu (launcher)
 | 
				
			||||||
 | 
						{ MODKEY|ShiftMask,             XK_d,      spawn,                  {.v = dmenucmd } },
 | 
				
			||||||
 | 
						// Rofi launcher (small)
 | 
				
			||||||
 | 
						{ MODKEY|ShiftMask|ControlMask, XK_d,      spawn,                  SHCMD("rofi -show drun") }, 
 | 
				
			||||||
 | 
						// Start the main terminal
 | 
				
			||||||
 | 
						{ MODKEY,                       XK_Return, spawn,                  {.v = termcmd } },
 | 
				
			||||||
 | 
					        // Start the alacritty terminal
 | 
				
			||||||
 | 
					<<<<<<< HEAD
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_t},                {0, XK_a}},      spawn,              SHCMD("alacritty")  },
 | 
				
			||||||
 | 
					// 	// Start the alacritty terminal with tmux
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_t},                {ShiftMask, XK_a}},      spawn,           SHCMD("alacritty -e tmux")  },
 | 
				
			||||||
 | 
					//         // kitty
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
				
			||||||
 | 
					//         // kitty with tmux
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_t},                {ShiftMask, XK_k}},      spawn,           SHCMD("kitty -e tmux")  },
 | 
				
			||||||
 | 
					// 	/************************************* File browsers *************************************/
 | 
				
			||||||
 | 
					//         // GUI filebrowser (pcmanfm)
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY|ShiftMask, XK_f},      {0, XK_g}},     spawn,           SHCMD(GUI_FILEMANAGER) },
 | 
				
			||||||
 | 
					// 	// Rofi file browser (small)
 | 
				
			||||||
 | 
					//         {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_f}},     spawn,           SHCMD("rofi -show filebrowser") },
 | 
				
			||||||
 | 
					//         // ranger
 | 
				
			||||||
 | 
					//         {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_r}},     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
				
			||||||
 | 
					// 	/************************************* Start the web browers *************************************/
 | 
				
			||||||
 | 
					//         // Google chrome stable
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_w},                {0, XK_g}},     spawn,           SHCMD(WEBBROWSER) },
 | 
				
			||||||
 | 
					//         // Tor brower
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_w},                {0, XK_t}},     spawn,           SHCMD("tor-browser") },
 | 
				
			||||||
 | 
					// 	/************************************* Start the caht/email/\* apps *************************************/
 | 
				
			||||||
 | 
					// 	// Discord
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_c},                {0, XK_d}},      spawn,           SHCMD("discord") },
 | 
				
			||||||
 | 
					//         // Obsidian
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_c},                {0, XK_o}},      spawn,           SHCMD("obsidian") },
 | 
				
			||||||
 | 
					// 	/************************************* Start the dev apps *************************************/
 | 
				
			||||||
 | 
					// 	// Jetbrains toolbox
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_j}},     spawn,         SHCMD("jetbrains-toolbox") },
 | 
				
			||||||
 | 
					//         // NeoVim
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
				
			||||||
 | 
					//         // Vim
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
				
			||||||
 | 
					//         // emacs
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
				
			||||||
 | 
					// 	/************************************* Start personalize apps *************************************/
 | 
				
			||||||
 | 
					//         // nitrogen
 | 
				
			||||||
 | 
					//         {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
				
			||||||
 | 
					//         // nm-connection-editor
 | 
				
			||||||
 | 
					//         {2, {{MODKEY, XK_p},                {0, XK_n}},    spawn,         SHCMD("nm-connection-editor") },
 | 
				
			||||||
 | 
					// 	/************************************* Start multi media apps *************************************/
 | 
				
			||||||
 | 
					//         // cmus
 | 
				
			||||||
 | 
					//         {2, {{MODKEY, XK_m},                 {0, XK_c}},    spawn,          SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
 | 
				
			||||||
 | 
					//         // vlc
 | 
				
			||||||
 | 
					//         {2, {{MODKEY, XK_m},                 {0, XK_v}},    spawn,          SHCMD("vlc") },
 | 
				
			||||||
 | 
					//         // vlc in the main terminal
 | 
				
			||||||
 | 
					//         {2, {{MODKEY, XK_m},                 {ShiftMask, XK_v}},    spawn,          SHCMD(TERMINAL "nvlc") },
 | 
				
			||||||
 | 
					// 	/************************************* Start the emoji piker apps *************************************/
 | 
				
			||||||
 | 
					// 	// Emoji selector (rofi)
 | 
				
			||||||
 | 
					// 	{1, {{Mod4Mask,                    XK_e}},    spawn,          SHCMD("rofi -show emoji") },
 | 
				
			||||||
 | 
					// 	/************************************* dwm keys *************************************/
 | 
				
			||||||
 | 
					// 	// Full screen mode
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
				
			||||||
 | 
					// 	// Toggle the slstatus bar (hide/show)
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
				
			||||||
 | 
					//         // Change the focus
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					//         // Change the stack layout (horizontal/virtecal)
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_d}},      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					//         // Change the focus window size (in the tile mode)
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_h}},      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					// //	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
				
			||||||
 | 
					//         // Toogle styky mode
 | 
				
			||||||
 | 
					//         {1, {{MODKEY|ShiftMask,          XK_s}},     togglesticky,    {0} },
 | 
				
			||||||
 | 
					//     
 | 
				
			||||||
 | 
					// 	// Quit from the foucsed window (kill)
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_q},            {0, XK_q}},      killclient,     {0} },
 | 
				
			||||||
 | 
					//         /************************* Switch between layouts *************************/
 | 
				
			||||||
 | 
					// 	// Tiled layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_t}},      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					// 	// Floating layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					// 	// Monocle layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					//         // Grid layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
				
			||||||
 | 
					//         // Spiral layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
				
			||||||
 | 
					//         // Dwindle layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
				
			||||||
 | 
					//         // Centerd master layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_c}},      setlayout,      {.v = &layouts[6]} },
 | 
				
			||||||
 | 
					//         // Centerd floating master layout
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},           {ShiftMask, XK_c}},      setlayout,      {.v = &layouts[7]} },
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//         // Toggle between current layout and tile layout  
 | 
				
			||||||
 | 
					// 	{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
				
			||||||
 | 
					//         // Toggle floating window
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
				
			||||||
 | 
					//         // View all tags
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                    XK_0}},        view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					//         // Mirror the current tagg in all tags
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_0}},        tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					//         // I don't know
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					||||||| 95139f7
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {0, XK_a}},      spawn,              SHCMD("alacritty")  },
 | 
				
			||||||
 | 
						// Start the alacritty terminal with tmux
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {ShiftMask, XK_a}},      spawn,           SHCMD("alacritty -e tmux")  },
 | 
				
			||||||
 | 
					        // kitty
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
				
			||||||
 | 
					        // kitty with tmux
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {ShiftMask, XK_k}},      spawn,           SHCMD("kitty -e tmux")  },
 | 
				
			||||||
 | 
						/************************************* File browsers *************************************/
 | 
				
			||||||
 | 
					        // GUI filebrowser (pcmanfm)
 | 
				
			||||||
 | 
						{2, {{MODKEY|ShiftMask, XK_f},      {0, XK_g}},     spawn,           SHCMD(GUI_FILEMANAGER) },
 | 
				
			||||||
 | 
						// Rofi file browser (small)
 | 
				
			||||||
 | 
					        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_f}},     spawn,           SHCMD("rofi -show filebrowser") },
 | 
				
			||||||
 | 
					        // ranger
 | 
				
			||||||
 | 
					        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_r}},     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
				
			||||||
 | 
						/************************************* Start the web browers *************************************/
 | 
				
			||||||
 | 
					        // Google chrome stable
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_w},                {0, XK_g}},     spawn,           SHCMD(WEBBROWSER) },
 | 
				
			||||||
 | 
					        // Tor brower
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_w},                {0, XK_t}},     spawn,           SHCMD("tor-browser") },
 | 
				
			||||||
 | 
						/************************************* Start the caht/email/\* apps *************************************/
 | 
				
			||||||
 | 
						// Discord
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_c},                {0, XK_d}},      spawn,           SHCMD("discord") },
 | 
				
			||||||
 | 
					        // Obsidian
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_c},                {0, XK_o}},      spawn,           SHCMD("obsidian") },
 | 
				
			||||||
 | 
						/************************************* Start the dev apps *************************************/
 | 
				
			||||||
 | 
						// Jetbrains toolbox
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_j}},     spawn,         SHCMD("jetbrains-toolbox") },
 | 
				
			||||||
 | 
					        // NeoVim
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
				
			||||||
 | 
					        // Vim
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
				
			||||||
 | 
					        // emacs
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
				
			||||||
 | 
						/************************************* Start personalize apps *************************************/
 | 
				
			||||||
 | 
					        // nitrogen
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
				
			||||||
 | 
					        // nm-connection-editor
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_p},                {0, XK_n}},    spawn,         SHCMD("nm-connection-editor") },
 | 
				
			||||||
 | 
						/************************************* Start multi media apps *************************************/
 | 
				
			||||||
 | 
					        // cmus
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {0, XK_c}},    spawn,          SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
 | 
				
			||||||
 | 
					        // vlc
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {0, XK_v}},    spawn,          SHCMD("vlc") },
 | 
				
			||||||
 | 
					        // vlc in the main terminal
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {ShiftMask, XK_v}},    spawn,          SHCMD(TERMINAL "nvlc") },
 | 
				
			||||||
 | 
						/************************************* Start the emoji piker apps *************************************/
 | 
				
			||||||
 | 
						// Emoji selector (rofi)
 | 
				
			||||||
 | 
						{1, {{Mod4Mask,                    XK_e}},    spawn,          SHCMD("rofi -show emoji") },
 | 
				
			||||||
 | 
						/************************************* dwm keys *************************************/
 | 
				
			||||||
 | 
						// Full screen mode
 | 
				
			||||||
 | 
						{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
				
			||||||
 | 
						// Toggle the slstatus bar (hide/show)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
				
			||||||
 | 
					        // Change the focus
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					        // Change the stack layout (horizontal/virtecal)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_d}},      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					        // Change the focus window size (in the tile mode)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_h}},      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					//	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
				
			||||||
 | 
					        // Toogle styky mode
 | 
				
			||||||
 | 
					        {1, {{MODKEY|ShiftMask,          XK_s}},     togglesticky,    {0} },
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
						// Quit from the foucsed window (kill)
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_q},            {0, XK_q}},      killclient,     {0} },
 | 
				
			||||||
 | 
					        /************************* Switch between layouts *************************/
 | 
				
			||||||
 | 
						// Tiled layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_t}},      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
						// Floating layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
						// Monocle layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					        // Grid layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
				
			||||||
 | 
					        // Spiral layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
				
			||||||
 | 
					        // Dwindle layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
				
			||||||
 | 
					        // Centerd master layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_c}},      setlayout,      {.v = &layouts[6]} },
 | 
				
			||||||
 | 
					        // Centerd floating master layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {ShiftMask, XK_c}},      setlayout,      {.v = &layouts[7]} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Toggle between current layout and tile layout  
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
				
			||||||
 | 
					        // Toggle floating window
 | 
				
			||||||
 | 
						{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
				
			||||||
 | 
					        // View all tags
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_0}},        view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					        // Mirror the current tagg in all tags
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_0}},        tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					        // I don't know
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {0, XK_a}},      spawn,              SHCMD("alacritty")  },
 | 
				
			||||||
 | 
						// Start the alacritty terminal with tmux
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {ShiftMask, XK_a}},      spawn,           SHCMD("alacritty -e tmux")  },
 | 
				
			||||||
 | 
					        // kitty
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
				
			||||||
 | 
					        // kitty with tmux
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_t},                {ShiftMask, XK_k}},      spawn,           SHCMD("kitty -e tmux")  },
 | 
				
			||||||
 | 
						/************************************* File browsers *************************************/
 | 
				
			||||||
 | 
					        // GUI filebrowser (pcmanfm)
 | 
				
			||||||
 | 
						{2, {{MODKEY|ShiftMask, XK_f},      {0, XK_g}},     spawn,           SHCMD(GUI_FILEMANAGER) },
 | 
				
			||||||
 | 
						// Rofi file browser (small)
 | 
				
			||||||
 | 
					        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_f}},     spawn,           SHCMD("rofi -show filebrowser") },
 | 
				
			||||||
 | 
					        // Terminal file manager (ranger)
 | 
				
			||||||
 | 
					        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_t}},     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
				
			||||||
 | 
						/************************************* Start the web browers *************************************/
 | 
				
			||||||
 | 
					        // Google chrome stable
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_w},                {0, XK_g}},     spawn,           SHCMD(WEBBROWSER) },
 | 
				
			||||||
 | 
					        // Tor brower
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_w},                {0, XK_t}},     spawn,           SHCMD("tor-browser") },
 | 
				
			||||||
 | 
						/************************************* Start the caht/email/\* apps *************************************/
 | 
				
			||||||
 | 
						// Discord
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_c},                {0, XK_d}},      spawn,           SHCMD("discord") },
 | 
				
			||||||
 | 
					        // Obsidian
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_c},                {0, XK_o}},      spawn,           SHCMD("obsidian") },
 | 
				
			||||||
 | 
						/************************************* Start the dev apps *************************************/
 | 
				
			||||||
 | 
						// Jetbrains toolbox
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_j}},     spawn,         SHCMD("jetbrains-toolbox") },
 | 
				
			||||||
 | 
					        // NeoVim
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
				
			||||||
 | 
					        // Vim
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
				
			||||||
 | 
					        // emacs
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
				
			||||||
 | 
						/************************************* Start personalize apps *************************************/
 | 
				
			||||||
 | 
					        // nitrogen
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
				
			||||||
 | 
					        // nm-connection-editor
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_p},                {0, XK_n}},    spawn,         SHCMD("nm-connection-editor") },
 | 
				
			||||||
 | 
						/************************************* Start multi media apps *************************************/
 | 
				
			||||||
 | 
					        // cmus
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {0, XK_c}},    spawn,          SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
 | 
				
			||||||
 | 
					        // vlc
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {0, XK_v}},    spawn,          SHCMD("vlc") },
 | 
				
			||||||
 | 
					        // vlc in the main terminal
 | 
				
			||||||
 | 
					        {2, {{MODKEY, XK_m},                 {ShiftMask, XK_v}},    spawn,          SHCMD(TERMINAL "nvlc") },
 | 
				
			||||||
 | 
						/************************************* Start the emoji piker apps *************************************/
 | 
				
			||||||
 | 
						// Emoji selector (rofi)
 | 
				
			||||||
 | 
						{1, {{Mod4Mask,                    XK_e}},    spawn,          SHCMD("rofimoji") },
 | 
				
			||||||
 | 
						/************************************* dwm keys *************************************/
 | 
				
			||||||
 | 
						// Full screen mode
 | 
				
			||||||
 | 
						{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
				
			||||||
 | 
						// Toggle the slstatus bar (hide/show)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
				
			||||||
 | 
					        // Change the focus
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					        // Change the stack layout (horizontal/virtecal)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_d}},      incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					        // Change the focus window size (in the tile mode)
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_h}},      setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					//	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
				
			||||||
 | 
					        // Toogle styky mode
 | 
				
			||||||
 | 
					        {1, {{MODKEY|ShiftMask,          XK_s}},     togglesticky,    {0} },
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
						// Quit from the foucsed window (kill)
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_q},            {0, XK_q}},      killclient,     {0} },
 | 
				
			||||||
 | 
					        /************************* Switch between layouts *************************/
 | 
				
			||||||
 | 
						// Tiled layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_t}},      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
						// Floating layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
						// Monocle layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					        // Grid layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
				
			||||||
 | 
					        // Spiral layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
				
			||||||
 | 
					        // Dwindle layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
				
			||||||
 | 
					        // Centerd master layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {0, XK_c}},      setlayout,      {.v = &layouts[6]} },
 | 
				
			||||||
 | 
					        // Centerd floating master layout
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},           {ShiftMask, XK_c}},      setlayout,      {.v = &layouts[7]} },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Toggle between current layout and tile layout  
 | 
				
			||||||
 | 
						{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
				
			||||||
 | 
					        // Toggle floating window
 | 
				
			||||||
 | 
						{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
				
			||||||
 | 
					        // View all tags
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_0}},        view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					        // Mirror the current tagg in all tags
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_0}},        tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					        // I don't know
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
				
			||||||
 | 
					>>>>>>> update-stuff
 | 
				
			||||||
 | 
					        /************************* Tag keys *************************/
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_1,                      0)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_2,                      1)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_3,                      2)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_4,                      3)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_5,                      4)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_6,                      5)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_7,                      6)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_8,                      7)
 | 
				
			||||||
 | 
						TAGKEYS(                         XK_9,                      8)
 | 
				
			||||||
 | 
					        TAGKEYS(                         XK_semicolon,              9)
 | 
				
			||||||
 | 
						/* ---------------------------------- Control Keys ---------------------------------- */
 | 
				
			||||||
 | 
					<<<<<<< HEAD
 | 
				
			||||||
 | 
						// // Brightness controllers (requires xbacklight)
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
 | 
				
			||||||
 | 
						// // Sound controllers (requires pamixer)
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
				
			||||||
 | 
						// // Media controls (requires playerctl)
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
				
			||||||
 | 
						// {1, {{0,                               XF86XK_AudioPrev}},	 spawn,	SHCMD("playerctl previous")  },
 | 
				
			||||||
 | 
					 //        // Mute and unmute mic
 | 
				
			||||||
 | 
						// {1, {{0,			       XF86XK_AudioMicMute}},	spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
				
			||||||
 | 
						// // Take a screenshot
 | 
				
			||||||
 | 
						// {1, {{0,			       XK_Print}},		spawn, SHCMD(SCREENSHOT) },
 | 
				
			||||||
 | 
						// /* ---------------------------------- lock Keys ---------------------------------- */
 | 
				
			||||||
 | 
						// // Lock the screen
 | 
				
			||||||
 | 
						// {1, {{MODKEY|ShiftMask,    	       XK_x}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
 | 
						// // Kill dwm (super + shift + alt + q)
 | 
				
			||||||
 | 
						// {1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
				
			||||||
 | 
					||||||| 95139f7
 | 
				
			||||||
 | 
						// Brightness controllers (requires xbacklight)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
 | 
				
			||||||
 | 
						// Sound controllers (requires pamixer)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
				
			||||||
 | 
						// Media controls (requires playerctl)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioPrev}},	 spawn,	SHCMD("playerctl previous")  },
 | 
				
			||||||
 | 
					        // Mute and unmute mic
 | 
				
			||||||
 | 
						{1, {{0,			       XF86XK_AudioMicMute}},	spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
				
			||||||
 | 
						// Take a screenshot
 | 
				
			||||||
 | 
						{1, {{0,			       XK_Print}},		spawn, SHCMD(SCREENSHOT) },
 | 
				
			||||||
 | 
						/* ---------------------------------- lock Keys ---------------------------------- */
 | 
				
			||||||
 | 
						// Lock the screen
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,    	       XK_x}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
 | 
						// Kill dwm (super + shift + alt + q)
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
						// Brightness controllers (requires xbacklight)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
 | 
				
			||||||
 | 
						// Sound controllers (requires pamixer)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
				
			||||||
 | 
						// Media controls (requires playerctl)
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
				
			||||||
 | 
						{1, {{0,                               XF86XK_AudioPrev}},	 spawn,	SHCMD("playerctl previous")  },
 | 
				
			||||||
 | 
					        // Mute and unmute mic
 | 
				
			||||||
 | 
						{1, {{0,			       XF86XK_AudioMicMute}},	spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
				
			||||||
 | 
						// Take a screenshot
 | 
				
			||||||
 | 
						{1, {{0,			       XK_Print}},		spawn, SHCMD(SCREENSHOT) },
 | 
				
			||||||
 | 
						/* ---------------------------------- lock Keys ---------------------------------- */
 | 
				
			||||||
 | 
						// Lock the screen
 | 
				
			||||||
 | 
						{1, {{MODKEY|ShiftMask,    	       XK_x}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
 | 
						{1, {{0,                     XF86XK_Suspend}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
 | 
						// Kill dwm (super + shift + alt + q)
 | 
				
			||||||
 | 
						// {1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
				
			||||||
 | 
					>>>>>>> update-stuff
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* button definitions */
 | 
				
			||||||
 | 
					/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
 | 
				
			||||||
 | 
					static Button buttons[] = {
 | 
				
			||||||
 | 
						/* click                event mask      button          function        argument */
 | 
				
			||||||
 | 
						{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
 | 
				
			||||||
 | 
						{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
				
			||||||
 | 
						{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
 | 
				
			||||||
 | 
						{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
						{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
 | 
				
			||||||
 | 
						{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
 | 
				
			||||||
 | 
						{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
 | 
				
			||||||
 | 
						{ ClkTagBar,            0,              Button1,        view,           {0} },
 | 
				
			||||||
 | 
						{ ClkTagBar,            0,              Button3,        toggleview,     {0} },
 | 
				
			||||||
 | 
						{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
 | 
				
			||||||
 | 
						{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue