add
This commit is contained in:
		
							parent
							
								
									95139f7f17
								
							
						
					
					
						commit
						aa18032c01
					
				
					 7 changed files with 3558 additions and 195 deletions
				
			
		
							
								
								
									
										307
									
								
								patches/dwm-keymodes-20220422.diff
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								patches/dwm-keymodes-20220422.diff
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,307 @@
 | 
				
			||||||
 | 
					diff --git a/config.def.h b/config.def.h
 | 
				
			||||||
 | 
					index a2ac963..3bde49d 100644
 | 
				
			||||||
 | 
					--- a/config.def.h
 | 
				
			||||||
 | 
					+++ b/config.def.h
 | 
				
			||||||
 | 
					@@ -47,10 +47,10 @@ 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} },
 | 
				
			||||||
 | 
					+	{ {0,0,0,0},                     {KEY,0,0,0},      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ControlMask,0,0,0},           {KEY,0,0,0},      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ShiftMask,0,0,0},             {KEY,0,0,0},      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ControlMask|ShiftMask,0,0,0}, {KEY,0,0,0},      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 } }
 | 
				
			||||||
 | 
					@@ -62,39 +62,50 @@ 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} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_Escape, setkeymode,     {.ui = ModeCommand} },
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+static Key cmdkeys[] = {
 | 
				
			||||||
 | 
					+	/* modifier                    keys                     function         argument */
 | 
				
			||||||
 | 
					+	{ 0,                           XK_Escape,               clearcmd,        {0} },
 | 
				
			||||||
 | 
					+	{ ControlMask,                 XK_g,                    clearcmd,        {0} },
 | 
				
			||||||
 | 
					+	{ 0,                           XK_i,                    setkeymode,      {.ui = ModeInsert} },
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+static Command commands[] = {
 | 
				
			||||||
 | 
					+	/* modifier (4 keys)         keysyms (4 keys)         function        argument */
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_p,      0, 0, 0},   spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_Return, 0, 0, 0},   spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_b,      0, 0, 0},   togglebar,      {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_j,      0, 0, 0},   focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_k,      0, 0, 0},   focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_i,      0, 0, 0},   incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_d,      0, 0, 0},   incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_h,      0, 0, 0},   setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_l,      0, 0, 0},   setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_Return, 0, 0, 0},   zoom,           {0} },
 | 
				
			||||||
 | 
					+	{ {ControlMask, 0, 0, 0},    { XK_i,      0, 0, 0},   view,           {0} },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_k,      0, 0, 0},   killclient,     {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_t,      0, 0, 0},   setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_f,      0, 0, 0},   setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_m,      0, 0, 0},   setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_space,  0, 0, 0},   setlayout,      {0} },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_space,  0, 0, 0},   togglefloating, {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_0,      0, 0, 0},   view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_0,      0, 0, 0},   tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_comma,  0, 0, 0},   focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_period, 0, 0, 0},   focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_comma,  0, 0, 0},   tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_period, 0, 0, 0},   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)
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_q,      0, 0, 0},   quit,           {0} },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* button definitions */
 | 
				
			||||||
 | 
					@@ -113,4 +124,3 @@ static Button buttons[] = {
 | 
				
			||||||
 | 
					 	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
 | 
				
			||||||
 | 
					 	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					diff --git a/dwm.c b/dwm.c
 | 
				
			||||||
 | 
					index 0fc328a..487484e 100644
 | 
				
			||||||
 | 
					--- a/dwm.c
 | 
				
			||||||
 | 
					+++ b/dwm.c
 | 
				
			||||||
 | 
					@@ -60,6 +60,7 @@
 | 
				
			||||||
 | 
					 /* enums */
 | 
				
			||||||
 | 
					 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
 | 
				
			||||||
 | 
					 enum { SchemeNorm, SchemeSel }; /* color schemes */
 | 
				
			||||||
 | 
					+enum { ModeCommand, ModeInsert };
 | 
				
			||||||
 | 
					 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
 | 
				
			||||||
 | 
					        NetWMFullscreen, NetActiveWindow, NetWMWindowType,
 | 
				
			||||||
 | 
					        NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
 | 
				
			||||||
 | 
					@@ -99,6 +100,13 @@ struct Client {
 | 
				
			||||||
 | 
					 	Window win;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+typedef struct {
 | 
				
			||||||
 | 
					+	unsigned int mod[4];
 | 
				
			||||||
 | 
					+	KeySym keysym[4];
 | 
				
			||||||
 | 
					+	void (*func)(const Arg *);
 | 
				
			||||||
 | 
					+	const Arg arg;
 | 
				
			||||||
 | 
					+} Command;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 typedef struct {
 | 
				
			||||||
 | 
					 	unsigned int mod;
 | 
				
			||||||
 | 
					 	KeySym keysym;
 | 
				
			||||||
 | 
					@@ -152,6 +160,7 @@ static void buttonpress(XEvent *e);
 | 
				
			||||||
 | 
					 static void checkotherwm(void);
 | 
				
			||||||
 | 
					 static void cleanup(void);
 | 
				
			||||||
 | 
					 static void cleanupmon(Monitor *mon);
 | 
				
			||||||
 | 
					+static void clearcmd(const Arg *arg);
 | 
				
			||||||
 | 
					 static void clientmessage(XEvent *e);
 | 
				
			||||||
 | 
					 static void configure(Client *c);
 | 
				
			||||||
 | 
					 static void configurenotify(XEvent *e);
 | 
				
			||||||
 | 
					@@ -177,6 +186,7 @@ static void grabbuttons(Client *c, int focused);
 | 
				
			||||||
 | 
					 static void grabkeys(void);
 | 
				
			||||||
 | 
					 static void incnmaster(const Arg *arg);
 | 
				
			||||||
 | 
					 static void keypress(XEvent *e);
 | 
				
			||||||
 | 
					+static void keypresscmd(XEvent *e);
 | 
				
			||||||
 | 
					 static void killclient(const Arg *arg);
 | 
				
			||||||
 | 
					 static void manage(Window w, XWindowAttributes *wa);
 | 
				
			||||||
 | 
					 static void mappingnotify(XEvent *e);
 | 
				
			||||||
 | 
					@@ -200,6 +210,8 @@ static void sendmon(Client *c, Monitor *m);
 | 
				
			||||||
 | 
					 static void setclientstate(Client *c, long state);
 | 
				
			||||||
 | 
					 static void setfocus(Client *c);
 | 
				
			||||||
 | 
					 static void setfullscreen(Client *c, int fullscreen);
 | 
				
			||||||
 | 
					+static void setinsertmode(void);
 | 
				
			||||||
 | 
					+static void setkeymode(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setlayout(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setmfact(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setup(void);
 | 
				
			||||||
 | 
					@@ -243,6 +255,8 @@ static int sw, sh;           /* X display screen geometry width, height */
 | 
				
			||||||
 | 
					 static int bh, blw = 0;      /* bar geometry */
 | 
				
			||||||
 | 
					 static int lrpad;            /* sum of left and right padding for text */
 | 
				
			||||||
 | 
					 static int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
				
			||||||
 | 
					+static unsigned int cmdmod[4];
 | 
				
			||||||
 | 
					+static unsigned int keymode = ModeCommand;
 | 
				
			||||||
 | 
					 static unsigned int numlockmask = 0;
 | 
				
			||||||
 | 
					 static void (*handler[LASTEvent]) (XEvent *) = {
 | 
				
			||||||
 | 
					 	[ButtonPress] = buttonpress,
 | 
				
			||||||
 | 
					@@ -266,6 +280,7 @@ static Cur *cursor[CurLast];
 | 
				
			||||||
 | 
					 static Clr **scheme;
 | 
				
			||||||
 | 
					 static Display *dpy;
 | 
				
			||||||
 | 
					 static Drw *drw;
 | 
				
			||||||
 | 
					+static KeySym cmdkeysym[4];
 | 
				
			||||||
 | 
					 static Monitor *mons, *selmon;
 | 
				
			||||||
 | 
					 static Window root, wmcheckwin;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -513,6 +528,17 @@ cleanupmon(Monitor *mon)
 | 
				
			||||||
 | 
					 	free(mon);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+clearcmd(const Arg *arg)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	unsigned int i;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	for (i = 0; i < LENGTH(cmdkeysym); i++) {
 | 
				
			||||||
 | 
					+		cmdkeysym[i] = 0;
 | 
				
			||||||
 | 
					+		cmdmod[i] = 0;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 clientmessage(XEvent *e)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -955,6 +981,13 @@ grabbuttons(Client *c, int focused)
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 grabkeys(void)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					+	if (keymode == ModeCommand) {
 | 
				
			||||||
 | 
					+		XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
				
			||||||
 | 
					+		XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime);
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	XUngrabKeyboard(dpy, CurrentTime);
 | 
				
			||||||
 | 
					 	updatenumlockmask();
 | 
				
			||||||
 | 
					 	{
 | 
				
			||||||
 | 
					 		unsigned int i, j;
 | 
				
			||||||
 | 
					@@ -996,6 +1029,11 @@ keypress(XEvent *e)
 | 
				
			||||||
 | 
					 	KeySym keysym;
 | 
				
			||||||
 | 
					 	XKeyEvent *ev;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (keymode == ModeCommand) {
 | 
				
			||||||
 | 
					+		keypresscmd(e);
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	ev = &e->xkey;
 | 
				
			||||||
 | 
					 	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
 | 
					 	for (i = 0; i < LENGTH(keys); i++)
 | 
				
			||||||
 | 
					@@ -1005,6 +1043,53 @@ keypress(XEvent *e)
 | 
				
			||||||
 | 
					 			keys[i].func(&(keys[i].arg));
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+keypresscmd(XEvent *e) {
 | 
				
			||||||
 | 
					+	unsigned int i, j;
 | 
				
			||||||
 | 
					+	int matches = 0;
 | 
				
			||||||
 | 
					+	KeySym keysym;
 | 
				
			||||||
 | 
					+	XKeyEvent *ev;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	ev = &e->xkey;
 | 
				
			||||||
 | 
					+	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
 | 
					+	if (XK_Shift_L <= keysym && keysym <= XK_Hyper_R) {
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	for (i = 0; i < LENGTH(cmdkeys); i++) {
 | 
				
			||||||
 | 
					+		if (keysym == cmdkeys[i].keysym
 | 
				
			||||||
 | 
					+		&& CLEANMASK(cmdkeys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
 | 
					+		&& cmdkeys[i].func) {
 | 
				
			||||||
 | 
					+			cmdkeys[i].func(&(cmdkeys[i].arg));
 | 
				
			||||||
 | 
					+			return;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	for (j = 0; j < LENGTH(cmdkeysym); j++) {
 | 
				
			||||||
 | 
					+		if (cmdkeysym[j] == 0) {
 | 
				
			||||||
 | 
					+			cmdkeysym[j] = keysym;
 | 
				
			||||||
 | 
					+			cmdmod[j] = ev->state;
 | 
				
			||||||
 | 
					+			break;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	for (i = 0; i < LENGTH(commands); i++) {
 | 
				
			||||||
 | 
					+		matches = 0;
 | 
				
			||||||
 | 
					+		for (j = 0; j < LENGTH(cmdkeysym); j++) {
 | 
				
			||||||
 | 
					+			if (cmdkeysym[j] == commands[i].keysym[j]
 | 
				
			||||||
 | 
					+			&& CLEANMASK(cmdmod[j]) == CLEANMASK(commands[i].mod[j]))
 | 
				
			||||||
 | 
					+				matches++;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+		if (matches == LENGTH(cmdkeysym)) {
 | 
				
			||||||
 | 
					+			if (commands[i].func)
 | 
				
			||||||
 | 
					+				commands[i].func(&(commands[i].arg));
 | 
				
			||||||
 | 
					+			clearcmd(NULL);
 | 
				
			||||||
 | 
					+			return;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 killclient(const Arg *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -1438,6 +1523,24 @@ setclientstate(Client *c, long state)
 | 
				
			||||||
 | 
					 		PropModeReplace, (unsigned char *)data, 2);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+setinsertmode()
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	keymode = ModeInsert;
 | 
				
			||||||
 | 
					+	clearcmd(NULL);
 | 
				
			||||||
 | 
					+	grabkeys();
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+setkeymode(const Arg *arg)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	if(!arg)
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	keymode = arg->ui;
 | 
				
			||||||
 | 
					+	clearcmd(NULL);
 | 
				
			||||||
 | 
					+	grabkeys();
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 int
 | 
				
			||||||
 | 
					 sendevent(Client *c, Atom proto)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -1645,6 +1748,7 @@ sigchld(int unused)
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 spawn(const Arg *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					+	setinsertmode();
 | 
				
			||||||
 | 
					 	if (arg->v == dmenucmd)
 | 
				
			||||||
 | 
					 		dmenumon[0] = '0' + selmon->num;
 | 
				
			||||||
 | 
					 	if (fork() == 0) {
 | 
				
			||||||
							
								
								
									
										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"
 | 
				
			||||||
							
								
								
									
										106
									
								
								src/config.def.h.rej
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								src/config.def.h.rej
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,106 @@
 | 
				
			||||||
 | 
					--- config.def.h
 | 
				
			||||||
 | 
					+++ config.def.h
 | 
				
			||||||
 | 
					@@ -47,10 +47,10 @@ 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} },
 | 
				
			||||||
 | 
					+	{ {0,0,0,0},                     {KEY,0,0,0},      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ControlMask,0,0,0},           {KEY,0,0,0},      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ShiftMask,0,0,0},             {KEY,0,0,0},      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
 | 
					+	{ {ControlMask|ShiftMask,0,0,0}, {KEY,0,0,0},      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 } }
 | 
				
			||||||
 | 
					@@ -62,39 +62,50 @@ 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} },
 | 
				
			||||||
 | 
					+	{ MODKEY,                       XK_Escape, setkeymode,     {.ui = ModeCommand} },
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+static Key cmdkeys[] = {
 | 
				
			||||||
 | 
					+	/* modifier                    keys                     function         argument */
 | 
				
			||||||
 | 
					+	{ 0,                           XK_Escape,               clearcmd,        {0} },
 | 
				
			||||||
 | 
					+	{ ControlMask,                 XK_g,                    clearcmd,        {0} },
 | 
				
			||||||
 | 
					+	{ 0,                           XK_i,                    setkeymode,      {.ui = ModeInsert} },
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+static Command commands[] = {
 | 
				
			||||||
 | 
					+	/* modifier (4 keys)         keysyms (4 keys)         function        argument */
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_p,      0, 0, 0},   spawn,          {.v = dmenucmd } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_Return, 0, 0, 0},   spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_b,      0, 0, 0},   togglebar,      {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_j,      0, 0, 0},   focusstack,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_k,      0, 0, 0},   focusstack,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_i,      0, 0, 0},   incnmaster,     {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_d,      0, 0, 0},   incnmaster,     {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_h,      0, 0, 0},   setmfact,       {.f = -0.05} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_l,      0, 0, 0},   setmfact,       {.f = +0.05} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_Return, 0, 0, 0},   zoom,           {0} },
 | 
				
			||||||
 | 
					+	{ {ControlMask, 0, 0, 0},    { XK_i,      0, 0, 0},   view,           {0} },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_k,      0, 0, 0},   killclient,     {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_t,      0, 0, 0},   setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_f,      0, 0, 0},   setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_m,      0, 0, 0},   setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_space,  0, 0, 0},   setlayout,      {0} },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_space,  0, 0, 0},   togglefloating, {0} },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_0,      0, 0, 0},   view,           {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_0,      0, 0, 0},   tag,            {.ui = ~0 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_comma,  0, 0, 0},   focusmon,       {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {0,           0, 0, 0},    { XK_period, 0, 0, 0},   focusmon,       {.i = +1 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_comma,  0, 0, 0},   tagmon,         {.i = -1 } },
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_period, 0, 0, 0},   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)
 | 
				
			||||||
 | 
					+	{ {ShiftMask,   0, 0, 0},    { XK_q,      0, 0, 0},   quit,           {0} },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* button definitions */
 | 
				
			||||||
 | 
					@@ -113,4 +124,3 @@ static Button buttons[] = {
 | 
				
			||||||
 | 
					 	{ ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
 | 
				
			||||||
 | 
					 	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
							
								
								
									
										173
									
								
								src/dwm.c
									
										
									
									
									
								
							
							
						
						
									
										173
									
								
								src/dwm.c
									
										
									
									
									
								
							| 
						 | 
					@ -73,6 +73,7 @@
 | 
				
			||||||
/* enums */
 | 
					/* enums */
 | 
				
			||||||
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
 | 
					enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
 | 
				
			||||||
enum { SchemeNorm, SchemeSel, SchemeUrg }; /* color schemes */
 | 
					enum { SchemeNorm, SchemeSel, SchemeUrg }; /* color schemes */
 | 
				
			||||||
 | 
					enum { ModeCommand, ModeInsert };
 | 
				
			||||||
enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
 | 
					enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
 | 
				
			||||||
       NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
 | 
					       NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
 | 
				
			||||||
       NetWMFullscreen, NetActiveWindow, NetWMWindowType,
 | 
					       NetWMFullscreen, NetActiveWindow, NetWMWindowType,
 | 
				
			||||||
| 
						 | 
					@ -115,16 +116,18 @@ struct Client {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	unsigned int mod;
 | 
						unsigned int mod[4];
 | 
				
			||||||
	KeySym keysym;
 | 
						KeySym keysym[4];
 | 
				
			||||||
} 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;
 | 
					} Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						unsigned int mod;
 | 
				
			||||||
 | 
						KeySym keysym;
 | 
				
			||||||
 | 
						void (*func)(const Arg *);
 | 
				
			||||||
 | 
						const Arg arg;
 | 
				
			||||||
 | 
					} Key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	const char *symbol;
 | 
						const char *symbol;
 | 
				
			||||||
| 
						 | 
					@ -180,6 +183,7 @@ static void buttonpress(XEvent *e);
 | 
				
			||||||
static void checkotherwm(void);
 | 
					static void checkotherwm(void);
 | 
				
			||||||
static void cleanup(void);
 | 
					static void cleanup(void);
 | 
				
			||||||
static void cleanupmon(Monitor *mon);
 | 
					static void cleanupmon(Monitor *mon);
 | 
				
			||||||
 | 
					static void clearcmd(const Arg *arg);
 | 
				
			||||||
static void clientmessage(XEvent *e);
 | 
					static void clientmessage(XEvent *e);
 | 
				
			||||||
static void configure(Client *c);
 | 
					static void configure(Client *c);
 | 
				
			||||||
static void configurenotify(XEvent *e);
 | 
					static void configurenotify(XEvent *e);
 | 
				
			||||||
| 
						 | 
					@ -206,6 +210,7 @@ static void grabbuttons(Client *c, int focused);
 | 
				
			||||||
static void grabkeys(void);
 | 
					static void grabkeys(void);
 | 
				
			||||||
static void incnmaster(const Arg *arg);
 | 
					static void incnmaster(const Arg *arg);
 | 
				
			||||||
static void keypress(XEvent *e);
 | 
					static void keypress(XEvent *e);
 | 
				
			||||||
 | 
					static void keypresscmd(XEvent *e);
 | 
				
			||||||
static void killclient(const Arg *arg);
 | 
					static void killclient(const Arg *arg);
 | 
				
			||||||
static void manage(Window w, XWindowAttributes *wa);
 | 
					static void manage(Window w, XWindowAttributes *wa);
 | 
				
			||||||
static void mappingnotify(XEvent *e);
 | 
					static void mappingnotify(XEvent *e);
 | 
				
			||||||
| 
						 | 
					@ -233,6 +238,8 @@ static void setclientstate(Client *c, long state);
 | 
				
			||||||
static void setfocus(Client *c);
 | 
					static void setfocus(Client *c);
 | 
				
			||||||
static void setfullscreen(Client *c, int fullscreen);
 | 
					static void setfullscreen(Client *c, int fullscreen);
 | 
				
			||||||
static void fullscreen(const Arg *arg);
 | 
					static void fullscreen(const Arg *arg);
 | 
				
			||||||
 | 
					static void setinsertmode(void);
 | 
				
			||||||
 | 
					static void setkeymode(const Arg *arg);
 | 
				
			||||||
static void setlayout(const Arg *arg);
 | 
					static void setlayout(const Arg *arg);
 | 
				
			||||||
static void setmfact(const Arg *arg);
 | 
					static void setmfact(const Arg *arg);
 | 
				
			||||||
static void setup(void);
 | 
					static void setup(void);
 | 
				
			||||||
| 
						 | 
					@ -284,6 +291,8 @@ static int sw, sh;           /* X display screen geometry width, height */
 | 
				
			||||||
static int bh, blw = 0;      /* bar geometry */
 | 
					static int bh, blw = 0;      /* bar geometry */
 | 
				
			||||||
static int lrpad;            /* sum of left and right padding for text */
 | 
					static int lrpad;            /* sum of left and right padding for text */
 | 
				
			||||||
static int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
					static int (*xerrorxlib)(Display *, XErrorEvent *);
 | 
				
			||||||
 | 
					static unsigned int cmdmod[4];
 | 
				
			||||||
 | 
					static unsigned int keymode = ModeCommand;
 | 
				
			||||||
static unsigned int numlockmask = 0;
 | 
					static unsigned int numlockmask = 0;
 | 
				
			||||||
static void (*handler[LASTEvent]) (XEvent *) = {
 | 
					static void (*handler[LASTEvent]) (XEvent *) = {
 | 
				
			||||||
	[ButtonPress] = buttonpress,
 | 
						[ButtonPress] = buttonpress,
 | 
				
			||||||
| 
						 | 
					@ -308,9 +317,9 @@ static Cur *cursor[CurLast];
 | 
				
			||||||
static Clr **scheme;
 | 
					static Clr **scheme;
 | 
				
			||||||
static Display *dpy;
 | 
					static Display *dpy;
 | 
				
			||||||
static Drw *drw;
 | 
					static Drw *drw;
 | 
				
			||||||
 | 
					static KeySym cmdkeysym[4];
 | 
				
			||||||
static Monitor *mons, *selmon;
 | 
					static Monitor *mons, *selmon;
 | 
				
			||||||
static Window root, wmcheckwin;
 | 
					static Window root, wmcheckwin;
 | 
				
			||||||
unsigned int currentkey = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* configuration, allows nested code to access above variables */
 | 
					/* configuration, allows nested code to access above variables */
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
| 
						 | 
					@ -600,6 +609,17 @@ cleanupmon(Monitor *mon)
 | 
				
			||||||
	free(mon);
 | 
						free(mon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					clearcmd(const Arg *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						unsigned int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < LENGTH(cmdkeysym); i++) {
 | 
				
			||||||
 | 
							cmdkeysym[i] = 0;
 | 
				
			||||||
 | 
							cmdmod[i] = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
clientmessage(XEvent *e)
 | 
					clientmessage(XEvent *e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1136,18 +1156,25 @@ grabbuttons(Client *c, int focused)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
grabkeys(void)
 | 
					grabkeys(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (keymode == ModeCommand) {
 | 
				
			||||||
 | 
							XUngrabKey(dpy, AnyKey, AnyModifier, root);
 | 
				
			||||||
 | 
							XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XUngrabKeyboard(dpy, CurrentTime);
 | 
				
			||||||
	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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		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++)
 | 
									for (j = 0; j < LENGTH(modifiers); j++)
 | 
				
			||||||
					XGrabKey(dpy, code, keychords[i].keys[currentkey].mod | modifiers[k], root,
 | 
										XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
 | 
				
			||||||
							 True, GrabModeAsync, GrabModeAsync);
 | 
											True, GrabModeAsync, GrabModeAsync);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1173,50 +1200,71 @@ isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
keypress(XEvent *e)
 | 
					keypress(XEvent *e)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	XEvent event = *e;
 | 
						unsigned int i;
 | 
				
			||||||
	Keychord *keychord;
 | 
					 | 
				
			||||||
	unsigned int ran = 0;
 | 
					 | 
				
			||||||
	KeySym keysym;
 | 
						KeySym keysym;
 | 
				
			||||||
	XKeyEvent *ev;
 | 
						XKeyEvent *ev;
 | 
				
			||||||
	Keychord *newoptions;
 | 
					 | 
				
			||||||
	Keychord *oldoptions = (Keychord *)malloc(sizeof(keychords));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(oldoptions, keychords, sizeof(keychords));
 | 
						if (keymode == ModeCommand) {
 | 
				
			||||||
	size_t numoption = 0;
 | 
							keypresscmd(e);
 | 
				
			||||||
	while(!ran){
 | 
							return;
 | 
				
			||||||
		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;
 | 
						ev = &e->xkey;
 | 
				
			||||||
	grabkeys();
 | 
						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));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					keypresscmd(XEvent *e) {
 | 
				
			||||||
 | 
						unsigned int i, j;
 | 
				
			||||||
 | 
						int matches = 0;
 | 
				
			||||||
 | 
						KeySym keysym;
 | 
				
			||||||
 | 
						XKeyEvent *ev;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ev = &e->xkey;
 | 
				
			||||||
 | 
						keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
 | 
				
			||||||
 | 
						if (XK_Shift_L <= keysym && keysym <= XK_Hyper_R) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < LENGTH(cmdkeys); i++) {
 | 
				
			||||||
 | 
							if (keysym == cmdkeys[i].keysym
 | 
				
			||||||
 | 
							&& CLEANMASK(cmdkeys[i].mod) == CLEANMASK(ev->state)
 | 
				
			||||||
 | 
							&& cmdkeys[i].func) {
 | 
				
			||||||
 | 
								cmdkeys[i].func(&(cmdkeys[i].arg));
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (j = 0; j < LENGTH(cmdkeysym); j++) {
 | 
				
			||||||
 | 
							if (cmdkeysym[j] == 0) {
 | 
				
			||||||
 | 
								cmdkeysym[j] = keysym;
 | 
				
			||||||
 | 
								cmdmod[j] = ev->state;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < LENGTH(commands); i++) {
 | 
				
			||||||
 | 
							matches = 0;
 | 
				
			||||||
 | 
							for (j = 0; j < LENGTH(cmdkeysym); j++) {
 | 
				
			||||||
 | 
								if (cmdkeysym[j] == commands[i].keysym[j]
 | 
				
			||||||
 | 
								&& CLEANMASK(cmdmod[j]) == CLEANMASK(commands[i].mod[j]))
 | 
				
			||||||
 | 
									matches++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (matches == LENGTH(cmdkeysym)) {
 | 
				
			||||||
 | 
								if (commands[i].func)
 | 
				
			||||||
 | 
									commands[i].func(&(commands[i].arg));
 | 
				
			||||||
 | 
								clearcmd(NULL);
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
killclient(const Arg *arg)
 | 
					killclient(const Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1709,6 +1757,24 @@ setclientstate(Client *c, long state)
 | 
				
			||||||
		PropModeReplace, (unsigned char *)data, 2);
 | 
							PropModeReplace, (unsigned char *)data, 2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					setinsertmode()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						keymode = ModeInsert;
 | 
				
			||||||
 | 
						clearcmd(NULL);
 | 
				
			||||||
 | 
						grabkeys();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					setkeymode(const Arg *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(!arg)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						keymode = arg->ui;
 | 
				
			||||||
 | 
						clearcmd(NULL);
 | 
				
			||||||
 | 
						grabkeys();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4)
 | 
					sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1965,6 +2031,7 @@ sigchld(int unused)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
spawn(const Arg *arg)
 | 
					spawn(const Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						setinsertmode();
 | 
				
			||||||
	if (arg->v == dmenucmd)
 | 
						if (arg->v == dmenucmd)
 | 
				
			||||||
		dmenumon[0] = '0' + selmon->num;
 | 
							dmenumon[0] = '0' + selmon->num;
 | 
				
			||||||
	if (fork() == 0) {
 | 
						if (fork() == 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2641
									
								
								src/dwm.c.orig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2641
									
								
								src/dwm.c.orig
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										19
									
								
								src/dwm.c.rej
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/dwm.c.rej
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					--- dwm.c
 | 
				
			||||||
 | 
					+++ dwm.c
 | 
				
			||||||
 | 
					@@ -60,6 +60,7 @@
 | 
				
			||||||
 | 
					 /* enums */
 | 
				
			||||||
 | 
					 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
 | 
				
			||||||
 | 
					 enum { SchemeNorm, SchemeSel }; /* color schemes */
 | 
				
			||||||
 | 
					+enum { ModeCommand, ModeInsert };
 | 
				
			||||||
 | 
					 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
 | 
				
			||||||
 | 
					        NetWMFullscreen, NetActiveWindow, NetWMWindowType,
 | 
				
			||||||
 | 
					        NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
 | 
				
			||||||
 | 
					@@ -209,6 +219,8 @@ static void sendmon(Client *c, Monitor *m);
 | 
				
			||||||
 | 
					 static void setclientstate(Client *c, long state);
 | 
				
			||||||
 | 
					 static void setfocus(Client *c);
 | 
				
			||||||
 | 
					 static void setfullscreen(Client *c, int fullscreen);
 | 
				
			||||||
 | 
					+static void setinsertmode(void);
 | 
				
			||||||
 | 
					+static void setkeymode(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setlayout(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setmfact(const Arg *arg);
 | 
				
			||||||
 | 
					 static void setup(void);
 | 
				
			||||||
							
								
								
									
										439
									
								
								src/keys/keys.c
									
										
									
									
									
								
							
							
						
						
									
										439
									
								
								src/keys/keys.c
									
										
									
									
									
								
							| 
						 | 
					@ -11,158 +11,313 @@ static const char *termcmd[]  = { TERMINAL, NULL };
 | 
				
			||||||
#define MODKEY Mod4Mask // win/super key
 | 
					#define MODKEY Mod4Mask // win/super key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define TAGKEYS(KEY,TAG) \
 | 
					#define TAGKEYS(KEY,TAG) \
 | 
				
			||||||
	{1, {{MODKEY,                        KEY}},      view,           {.ui = 1 << TAG} }, \
 | 
						{ {0,0,0,0},                     {KEY,0,0,0},      view,           {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ControlMask,            KEY}},      toggleview,     {.ui = 1 << TAG} }, \
 | 
						{ {ControlMask,0,0,0},           {KEY,0,0,0},      toggleview,     {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,              KEY}},      tag,            {.ui = 1 << TAG} }, \
 | 
					        { {ShiftMask,0,0,0},             {KEY,0,0,0},      tag,            {.ui = 1 << TAG} }, \
 | 
				
			||||||
	{1, {{MODKEY|ControlMask|ShiftMask,  KEY}},      toggletag,      {.ui = 1 << TAG} },
 | 
						{ {ControlMask|ShiftMask,0,0,0}, {KEY,0,0,0},      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                     key        function        argument */
 | 
				
			||||||
	/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
						/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
				
			||||||
	// Dmenu (launcher)
 | 
						// Dmenu (launcher)
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,             XK_d}},      spawn,                  {.v = dmenucmd } },
 | 
						{ MODKEY|ShiftMask,             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, XK_d,      spawn,                  SHCMD("rofi -show drun") },
 | 
				
			||||||
	// Start the main terminal
 | 
						// Start the main terminal
 | 
				
			||||||
	{1, {{MODKEY,                       XK_Return}}, spawn,                  {.v = termcmd } },
 | 
						{ MODKEY,                       XK_Return, spawn,                  {.v = termcmd } },
 | 
				
			||||||
        // Start the alacritty terminal
 | 
					        // Start the alacritty terminal
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {0, XK_a}},      spawn,              SHCMD("alacritty")  },
 | 
						// {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 } },
 | 
				
			||||||
 | 
					//         /************************* 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)
 | 
				
			||||||
 | 
					// 	/* ---------------------------------- Control Keys ---------------------------------- */
 | 
				
			||||||
 | 
					// 	// 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} },
 | 
				
			||||||
 | 
						{ MODKEY,                             XK_Escape, setkeymode,     {.ui = ModeCommand} },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Key cmdkeys[] = {
 | 
				
			||||||
 | 
						/* modifier                    keys                     function         argument */
 | 
				
			||||||
 | 
						{ 0,                           XK_Escape,               clearcmd,        {0} },
 | 
				
			||||||
 | 
						{ ControlMask,                 XK_g,                    clearcmd,        {0} },
 | 
				
			||||||
 | 
						{ 0,                           XK_i,                    setkeymode,      {.ui = ModeInsert} },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Command commands[] = {
 | 
				
			||||||
 | 
						/* modifier (4 keys)                  keysyms (4 keys)         function        argument */
 | 
				
			||||||
 | 
						/* ---------------------------------- Apps Keys ---------------------------------- */
 | 
				
			||||||
 | 
						// Dmenu (launcher)
 | 
				
			||||||
 | 
						{ {ShiftMask,         0, 0, 0},            {XK_d,          0, 0, 0},      spawn,        {.v = dmenucmd } },
 | 
				
			||||||
 | 
						// Rofi launcher (small)
 | 
				
			||||||
 | 
						{ {ShiftMask, ControlMask,  0, 0},         {XK_d,          0, 0, 0},      spawn,        SHCMD("rofi -show drun") }, 
 | 
				
			||||||
 | 
						// Start the main terminal
 | 
				
			||||||
 | 
						{ {0, 0, 0, 0},                     {XK_Return,            0, 0, 0},      spawn,       {.v = termcmd } },
 | 
				
			||||||
 | 
					        // Start the alacritty terminal
 | 
				
			||||||
 | 
						{ {0, 0, 0, 0},                     {XK_t, XK_a,              0, 0},      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")  },
 | 
						{ {0, 0, 0, 0},              {XK_t, XK_a, XK_t,          0},      spawn,           SHCMD("alacritty -e tmux") },
 | 
				
			||||||
        // kitty
 | 
					//         // kitty
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
					// 	{2, {{MODKEY, XK_t},                {0, XK_k}},              spawn,           SHCMD("kitty")  },
 | 
				
			||||||
        // kitty with tmux
 | 
					//         // kitty with tmux
 | 
				
			||||||
	{2, {{MODKEY, XK_t},                {ShiftMask, XK_k}},      spawn,           SHCMD("kitty -e tmux")  },
 | 
					// 	{2, {{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) },
 | 
					// 	{2, {{MODKEY|ShiftMask, XK_f},      {0, 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") },
 | 
					//         {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_f}},     spawn,           SHCMD("rofi -show filebrowser") },
 | 
				
			||||||
        // ranger
 | 
					//         // ranger
 | 
				
			||||||
        {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_r}},     spawn,           SHCMD(TERMINAL " -e ranger") },
 | 
					//         {2, {{MODKEY|ShiftMask, XK_f},      {0, XK_r}},     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) },
 | 
					// 	{2, {{MODKEY, XK_w},                {0, XK_g}},     spawn,           SHCMD(WEBBROWSER) },
 | 
				
			||||||
        // Tor brower
 | 
					//         // Tor brower
 | 
				
			||||||
	{2, {{MODKEY, XK_w},                {0, XK_t}},     spawn,           SHCMD("tor-browser") },
 | 
					// 	{2, {{MODKEY, XK_w},                {0, 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") },
 | 
					// 	{2, {{MODKEY, XK_c},                {0, XK_d}},      spawn,           SHCMD("discord") },
 | 
				
			||||||
        // Obsidian
 | 
					//         // Obsidian
 | 
				
			||||||
	{2, {{MODKEY, XK_c},                {0, XK_o}},      spawn,           SHCMD("obsidian") },
 | 
					// 	{2, {{MODKEY, XK_c},                {0, 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") },
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_j}},     spawn,         SHCMD("jetbrains-toolbox") },
 | 
				
			||||||
        // NeoVim
 | 
					//         // NeoVim
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_n}},     spawn,         SHCMD(TERMINAL " -e nvim") },
 | 
				
			||||||
        // Vim
 | 
					//         // Vim
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_v}},     spawn,         SHCMD(TERMINAL " -e vim") },
 | 
				
			||||||
        // emacs
 | 
					//         // emacs
 | 
				
			||||||
	{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
					// 	{2, {{MODKEY, XK_a},                {0, XK_e}},     spawn,         SHCMD("emacs") },
 | 
				
			||||||
	/************************************* Start personalize apps *************************************/
 | 
					// 	/************************************* Start personalize apps *************************************/
 | 
				
			||||||
        // nitrogen
 | 
					//         // nitrogen
 | 
				
			||||||
        {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
					//         {2, {{MODKEY, XK_p},                {0, XK_b}},    spawn,         SHCMD("nitrogen") },
 | 
				
			||||||
        // nm-connection-editor
 | 
					//         // nm-connection-editor
 | 
				
			||||||
        {2, {{MODKEY, XK_p},                {0, XK_n}},    spawn,         SHCMD("nm-connection-editor") },
 | 
					//         {2, {{MODKEY, XK_p},                {0, 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\"") },
 | 
					//         {2, {{MODKEY, XK_m},                 {0, 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") },
 | 
					//         {2, {{MODKEY, XK_m},                 {0, 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") },
 | 
					//         {2, {{MODKEY, XK_m},                 {ShiftMask, 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") },
 | 
					// 	{1, {{Mod4Mask,                    XK_e}},    spawn,          SHCMD("rofi -show emoji") },
 | 
				
			||||||
	/************************************* dwm keys *************************************/
 | 
					// 	/************************************* dwm keys *************************************/
 | 
				
			||||||
	// Full screen mode
 | 
					// 	// Full screen mode
 | 
				
			||||||
	{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
					// 	{1, {{MODKEY,			XK_f}},      fullscreen,     {0} },
 | 
				
			||||||
	// Toggle the slstatus bar (hide/show)
 | 
					// 	// Toggle the slstatus bar (hide/show)
 | 
				
			||||||
	{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
					// 	{1, {{MODKEY,                   XK_b}},      togglebar,      {0} },
 | 
				
			||||||
        // Change the focus
 | 
					//         // Change the focus
 | 
				
			||||||
	{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
					// 	{1, {{MODKEY,                   XK_j}},      focusstack,     {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
					// 	{1, {{MODKEY,                   XK_k}},      focusstack,     {.i = -1 } },
 | 
				
			||||||
        // Change the stack layout (horizontal/virtecal)
 | 
					//         // Change the stack layout (horizontal/virtecal)
 | 
				
			||||||
	{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
					// 	{1, {{MODKEY,                   XK_i}},      incnmaster,     {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_d}},      incnmaster,     {.i = -1 } },
 | 
					// 	{1, {{MODKEY,                   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} },
 | 
					// 	{1, {{MODKEY,                   XK_h}},      setmfact,       {.f = -0.05} },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
					// 	{1, {{MODKEY,                   XK_l}},      setmfact,       {.f = +0.05} },
 | 
				
			||||||
//	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
					// //	{ MODKEY,                       XK_Return, zoom,           {0} },
 | 
				
			||||||
	{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
					// 	{1, {{MODKEY,                   XK_Tab}},    view,           {0} },
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_j}},     movestack,      {.i = +1 } }, 
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_k}},     movestack,      {.i = -1 } }, 
 | 
				
			||||||
        // Toogle styky mode
 | 
					//         // Toogle styky mode
 | 
				
			||||||
        {1, {{MODKEY|ShiftMask,          XK_s}},     togglesticky,    {0} },
 | 
					//         {1, {{MODKEY|ShiftMask,          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} },
 | 
					// 	{2, {{MODKEY, XK_q},            {0, 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]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_t}},      setlayout,      {.v = &layouts[0]} },
 | 
				
			||||||
	// Floating layout
 | 
					// 	// Floating layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_f}},      setlayout,      {.v = &layouts[1]} },
 | 
				
			||||||
	// Monocle layout
 | 
					// 	// Monocle layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_m}},      setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
        // Grid layout
 | 
					//         // Grid layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_g}},      setlayout,      {.v = &layouts[3]} },
 | 
				
			||||||
        // Spiral layout
 | 
					//         // Spiral layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, XK_r}},      setlayout,      {.v = &layouts[4]} },
 | 
				
			||||||
        // Dwindle layout
 | 
					//         // Dwindle layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {ShiftMask, XK_r}},      setlayout,      {.v = &layouts[5]} },
 | 
				
			||||||
        // Centerd master layout
 | 
					//         // Centerd master layout
 | 
				
			||||||
	{2, {{MODKEY, XK_s},           {0, XK_c}},      setlayout,      {.v = &layouts[6]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {0, 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]} },
 | 
					// 	{2, {{MODKEY, XK_s},           {ShiftMask, XK_c}},      setlayout,      {.v = &layouts[7]} },
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
        // Toggle between current layout and tile layout  
 | 
					//         // Toggle between current layout and tile layout  
 | 
				
			||||||
	{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
					// 	{2, {{MODKEY, XK_s},             {0, XK_space}},  setlayout,      {0} },
 | 
				
			||||||
        // Toggle floating window
 | 
					//         // Toggle floating window
 | 
				
			||||||
	{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
					// 	{1, {{MODKEY|Mod1Mask,           XK_f}},        togglefloating,     {0} },
 | 
				
			||||||
        // View all tags
 | 
					//         // View all tags
 | 
				
			||||||
	{1, {{MODKEY,                    XK_0}},        view,           {.ui = ~0 } },
 | 
					// 	{1, {{MODKEY,                    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 } },
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_0}},        tag,            {.ui = ~0 } },
 | 
				
			||||||
        // I don't know
 | 
					//         // I don't know
 | 
				
			||||||
	{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
					// 	{1, {{MODKEY,                    XK_comma}},    focusmon,       {.i = -1 } },
 | 
				
			||||||
	{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
					// 	{1, {{MODKEY,                    XK_period}},   focusmon,       {.i = +1 } },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_comma}},    tagmon,         {.i = -1 } },
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
					// 	{1, {{MODKEY|ShiftMask,          XK_period}},   tagmon,         {.i = +1 } },
 | 
				
			||||||
        /************************* Tag keys *************************/
 | 
					//         /************************* Tag keys *************************/
 | 
				
			||||||
	TAGKEYS(                         XK_1,                      0)
 | 
					// 	TAGKEYS(                         XK_1,                      0)
 | 
				
			||||||
	TAGKEYS(                         XK_2,                      1)
 | 
					// 	TAGKEYS(                         XK_2,                      1)
 | 
				
			||||||
	TAGKEYS(                         XK_3,                      2)
 | 
					// 	TAGKEYS(                         XK_3,                      2)
 | 
				
			||||||
	TAGKEYS(                         XK_4,                      3)
 | 
					// 	TAGKEYS(                         XK_4,                      3)
 | 
				
			||||||
	TAGKEYS(                         XK_5,                      4)
 | 
					// 	TAGKEYS(                         XK_5,                      4)
 | 
				
			||||||
	TAGKEYS(                         XK_6,                      5)
 | 
					// 	TAGKEYS(                         XK_6,                      5)
 | 
				
			||||||
	TAGKEYS(                         XK_7,                      6)
 | 
					// 	TAGKEYS(                         XK_7,                      6)
 | 
				
			||||||
	TAGKEYS(                         XK_8,                      7)
 | 
					// 	TAGKEYS(                         XK_8,                      7)
 | 
				
			||||||
	TAGKEYS(                         XK_9,                      8)
 | 
					// 	TAGKEYS(                         XK_9,                      8)
 | 
				
			||||||
	/* ---------------------------------- Control Keys ---------------------------------- */
 | 
					// 	/* ---------------------------------- Control Keys ---------------------------------- */
 | 
				
			||||||
	// Brightness controllers (requires xbacklight)
 | 
					// 	// Brightness controllers (requires xbacklight)
 | 
				
			||||||
	{1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
					// 	{1, {{0,                               XF86XK_MonBrightnessUp}},   spawn, SHCMD("xbacklight -inc 5") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
 | 
					// 	{1, {{0,                               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") },
 | 
					// 	{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_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
					// 	{1, {{0,                               XF86XK_AudioMute}},        spawn, SHCMD("pamixer -t") },
 | 
				
			||||||
	// Media controls (requires playerctl)
 | 
					// 	// Media controls (requires playerctl)
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
					// 	{1, {{0,                               XF86XK_AudioPlay}},	 spawn,	SHCMD("playerctl play-pause") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
					// 	{1, {{0,                               XF86XK_AudioStop}},       spawn, SHCMD("playerctl stop") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
					// 	{1, {{0,                               XF86XK_AudioNext}},	 spawn,	SHCMD("playerctl next") },
 | 
				
			||||||
	{1, {{0,                               XF86XK_AudioPrev}},	 spawn,	SHCMD("playerctl previous")  },
 | 
					// 	{1, {{0,                               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") },
 | 
					// 	{1, {{0,			       XF86XK_AudioMicMute}},	spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
 | 
				
			||||||
	// Take a screenshot
 | 
					// 	// Take a screenshot
 | 
				
			||||||
	{1, {{0,			       XK_Print}},		spawn, SHCMD(SCREENSHOT) },
 | 
					// 	{1, {{0,			       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") },
 | 
					// 	{1, {{MODKEY|ShiftMask,    	       XK_x}},     spawn,          SHCMD("betterlockscreen -l dim") },
 | 
				
			||||||
	// Kill dwm (super + shift + alt + q)
 | 
					// 	// Kill dwm (super + shift + alt + q)
 | 
				
			||||||
	{1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
					// 	{1, {{MODKEY|ShiftMask|Mod1Mask,       XK_q}},      quit,           {0} },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* button definitions */
 | 
					/* button definitions */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue