Combo Tag & View Patches

- Add combo tag & view patch
- Change tag and view functions to combotag and comboview in config.h
This commit is contained in:
Sravan Balaji
2020-07-28 22:02:28 -04:00
parent d194f2c726
commit 0f49dbddfb
2 changed files with 45 additions and 2 deletions

View File

@@ -50,9 +50,9 @@ static const Layout layouts[] = {
/* key definitions */ /* key definitions */
#define MODKEY Mod4Mask /* Mod1Mask = Alt, Mod4Mask = Super */ #define MODKEY Mod4Mask /* Mod1Mask = Alt, Mod4Mask = Super */
#define TAGKEYS(KEY,TAG) \ #define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \ { MODKEY, KEY, comboview, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ { MODKEY|ShiftMask, KEY, combotag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */ /* helper for spawning shell commands in the pre dwm-5.0 fashion */

43
dwm.c
View File

@@ -270,6 +270,11 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee);
static int xerrorstart(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg); static void zoom(const Arg *arg);
static void keyrelease(XEvent *e);
static void combotag(const Arg *arg);
static void comboview(const Arg *arg);
/* variables */ /* variables */
static const char autostartblocksh[] = "autostart_blocking.sh"; static const char autostartblocksh[] = "autostart_blocking.sh";
static const char autostartsh[] = "autostart.sh"; static const char autostartsh[] = "autostart.sh";
@@ -285,6 +290,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0; static unsigned int numlockmask = 0;
static void (*handler[LASTEvent]) (XEvent *) = { static void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress, [ButtonPress] = buttonpress,
[ButtonRelease] = keyrelease,
[ClientMessage] = clientmessage, [ClientMessage] = clientmessage,
[ConfigureRequest] = configurerequest, [ConfigureRequest] = configurerequest,
[ConfigureNotify] = configurenotify, [ConfigureNotify] = configurenotify,
@@ -292,6 +298,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
[EnterNotify] = enternotify, [EnterNotify] = enternotify,
[Expose] = expose, [Expose] = expose,
[FocusIn] = focusin, [FocusIn] = focusin,
[KeyRelease] = keyrelease,
[KeyPress] = keypress, [KeyPress] = keypress,
[MappingNotify] = mappingnotify, [MappingNotify] = mappingnotify,
[MapRequest] = maprequest, [MapRequest] = maprequest,
@@ -316,6 +323,42 @@ static Window root, wmcheckwin;
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
/* function implementations */ /* function implementations */
static int combo = 0;
void
keyrelease(XEvent *e) {
combo = 0;
}
void
combotag(const Arg *arg) {
if(selmon->sel && arg->ui & TAGMASK) {
if (combo) {
selmon->sel->tags |= arg->ui & TAGMASK;
} else {
combo = 1;
selmon->sel->tags = arg->ui & TAGMASK;
}
focus(NULL);
arrange(selmon);
}
}
void
comboview(const Arg *arg) {
unsigned newtags = arg->ui & TAGMASK;
if (combo) {
selmon->tagset[selmon->seltags] |= newtags;
} else {
selmon->seltags ^= 1; /*toggle tagset*/
combo = 1;
if (newtags)
selmon->tagset[selmon->seltags] = newtags;
}
focus(NULL);
arrange(selmon);
}
void void
applyrules(Client *c) applyrules(Client *c)
{ {