diff options
| author | Saumit Dinesan <justsaumit@protonmail.com> | 2022-10-07 05:53:05 +0530 | 
|---|---|---|
| committer | Saumit Dinesan <justsaumit@protonmail.com> | 2022-10-07 05:53:05 +0530 | 
| commit | dd9c4443eb4e92a7087747f7987baf5feaa47b0a (patch) | |
| tree | cefb72e4f1013ea8b5e5d270e9d6039c41a261e6 | |
| parent | 18907ce12912f8ae1a5596a61ef5f65b7b44ac9a (diff) | |
Applied adjacenttag-skipvacant patch
| -rw-r--r-- | config.h | 4 | ||||
| -rw-r--r-- | dwm.c | 93 | 
2 files changed, 97 insertions, 0 deletions
| @@ -101,6 +101,10 @@ static const Key keys[] = {  	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },  	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },  	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } }, +	{ MODKEY,                       XK_Right,  viewnext,       {0} }, +	{ MODKEY,                       XK_Left,   viewprev,       {0} }, +	{ MODKEY|ShiftMask,             XK_Right,  tagtonext,      {0} }, +	{ MODKEY|ShiftMask,             XK_Left,   tagtoprev,      {0} },  	{ MODKEY,                       XK_minus,  setgaps,        {.i = -1 } },  	{ MODKEY,                       XK_equal,  setgaps,        {.i = +1 } },  	{ MODKEY|ShiftMask,             XK_equal,  setgaps,        {.i = 0  } }, @@ -235,8 +235,10 @@ static void maprequest(XEvent *e);  static void monocle(Monitor *m);  static void motionnotify(XEvent *e);  static void movemouse(const Arg *arg); +static unsigned int nexttag(void);  static Client *nexttiled(Client *c);  static void pop(Client *c); +static unsigned int prevtag(void);  static void propertynotify(XEvent *e);  static void quit(const Arg *arg);  static Monitor *recttomon(int x, int y, int w, int h); @@ -267,6 +269,8 @@ static void spawn(const Arg *arg);  static Monitor *systraytomon(Monitor *m);  static void tag(const Arg *arg);  static void tagmon(const Arg *arg); +static void tagtonext(const Arg *arg); +static void tagtoprev(const Arg *arg);  static void tile(Monitor *m);  static void togglebar(const Arg *arg);  static void togglefloating(const Arg *arg); @@ -290,6 +294,8 @@ static void updatetitle(Client *c);  static void updatewindowtype(Client *c);  static void updatewmhints(Client *c);  static void view(const Arg *arg); +static void viewnext(const Arg *arg); +static void viewprev(const Arg *arg);  static Client *wintoclient(Window w);  static Monitor *wintomon(Window w);  static Client *wintosystrayicon(Window w); @@ -1480,6 +1486,29 @@ movemouse(const Arg *arg)  	}  } +unsigned int +nexttag(void) +{ +	unsigned int seltag = selmon->tagset[selmon->seltags]; +	unsigned int usedtags = 0; +	Client *c = selmon->clients; + +	if (!c) +		return seltag; + +	/* skip vacant tags */ +	do { +		usedtags |= c->tags; +		c = c->next; +	} while (c); + +	do { +		seltag = seltag == (1 << (LENGTH(tags) - 1)) ? 1 : seltag << 1; +	} while (!(seltag & usedtags)); + +	return seltag; +} +  Client *  nexttiled(Client *c)  { @@ -1496,6 +1525,28 @@ pop(Client *c)  	arrange(c->mon);  } +unsigned int +prevtag(void) +{ +	unsigned int seltag = selmon->tagset[selmon->seltags]; +	unsigned int usedtags = 0; +	Client *c = selmon->clients; +	if (!c) +		return seltag; + +	/* skip vacant tags */ +	do { +		usedtags |= c->tags; +		c = c->next; +	} while (c); + +	do { +		seltag = seltag == 1 ? (1 << (LENGTH(tags) - 1)) : seltag >> 1; +	} while (!(seltag & usedtags)); + +	return seltag; +} +  void  propertynotify(XEvent *e)  { @@ -2047,6 +2098,36 @@ tagmon(const Arg *arg)  }  void +tagtonext(const Arg *arg) +{ +	unsigned int tmp; + +	if (selmon->sel == NULL) +		return; + +	if ((tmp = nexttag()) == selmon->tagset[selmon->seltags]) +		return; + +	tag(&(const Arg){.ui = tmp }); +	view(&(const Arg){.ui = tmp }); +} + +void +tagtoprev(const Arg *arg) +{ +	unsigned int tmp; + +	if (selmon->sel == NULL) +		return; + +	if ((tmp = prevtag()) == selmon->tagset[selmon->seltags]) +		return; + +	tag(&(const Arg){.ui = tmp }); +	view(&(const Arg){.ui = tmp }); +} + +void  tile(Monitor *m)  {  	unsigned int i, n, h, mw, my, ty; @@ -2733,6 +2814,18 @@ swallowingclient(Window w)  	return NULL;  } +void +viewnext(const Arg *arg) +{ +	view(&(const Arg){.ui = nexttag()}); +} + +void +viewprev(const Arg *arg) +{ +	view(&(const Arg){.ui = prevtag()}); +} +   Client *  wintoclient(Window w)  { | 
