From b55c4bc2efa0331a6fb521d41169e8ddf8bc9b13 Mon Sep 17 00:00:00 2001 From: Jack Bird Date: Sun, 29 Aug 2021 17:30:40 +0100 Subject: [PATCH] Added momentary config option --- config.def.h | 3 +++ dwm.c | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index 1c0b587..4cfcef1 100644 --- a/config.def.h +++ b/config.def.h @@ -20,6 +20,8 @@ static const char *colors[][3] = { /* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; +static const char *tagsalt[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; +static const int momentaryalttags = 0; /* 1 means alttags will show only when key is held down*/ static const Rule rules[] = { /* xprop(1): @@ -84,6 +86,7 @@ static Key keys[] = { { MODKEY, XK_period, focusmon, {.i = +1 } }, { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, + { MODKEY, XK_n, togglealttag, {0} }, TAGKEYS( XK_1, 0) TAGKEYS( XK_2, 1) TAGKEYS( XK_3, 2) diff --git a/dwm.c b/dwm.c index 4465af1..1e6e6f3 100644 --- a/dwm.c +++ b/dwm.c @@ -130,6 +130,7 @@ struct Monitor { Monitor *next; Window barwin; const Layout *lt[2]; + unsigned int alttag; }; typedef struct { @@ -176,6 +177,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 keyrelease(XEvent *e); static void killclient(const Arg *arg); static void manage(Window w, XWindowAttributes *wa); static void mappingnotify(XEvent *e); @@ -209,6 +211,7 @@ static void spawn(const Arg *arg); static void tag(const Arg *arg); static void tagmon(const Arg *arg); static void tile(Monitor *); +static void togglealttag(); static void togglebar(const Arg *arg); static void togglefloating(const Arg *arg); static void toggletag(const Arg *arg); @@ -253,6 +256,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { [Expose] = expose, [FocusIn] = focusin, [KeyPress] = keypress, + [KeyRelease] = keyrelease, [MappingNotify] = mappingnotify, [MapRequest] = maprequest, [MotionNotify] = motionnotify, @@ -695,7 +699,7 @@ dirtomon(int dir) void drawbar(Monitor *m) { - int x, w, sw = 0; + int x, w, wdelta, sw = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; unsigned int i, occ = 0, urg = 0; @@ -716,8 +720,9 @@ drawbar(Monitor *m) x = 0; for (i = 0; i < LENGTH(tags); i++) { w = TEXTW(tags[i]); + wdelta = selmon->alttag ? abs(TEXTW(tags[i]) - TEXTW(tagsalt[i])) / 2 : 0; drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); + drw_text(drw, x, 0, w, bh, wdelta + lrpad / 2, (selmon->alttag ? tagsalt[i] : tags[i]), urg & 1 << i); if (occ & 1 << i) drw_rect(drw, x + boxs, boxs, boxw, boxw, m == selmon && selmon->sel && selmon->sel->tags & 1 << i, @@ -998,6 +1003,25 @@ keypress(XEvent *e) keys[i].func(&(keys[i].arg)); } +void +keyrelease(XEvent *e) +{ + unsigned int i; + KeySym keysym; + XKeyEvent *ev; + + ev = &e->xkey; + keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); + + for (i = 0; i < LENGTH(keys); i++) + if (momentaryalttags + && keys[i].func && keys[i].func == togglealttag + && selmon->alttag + && (keysym == keys[i].keysym + || CLEANMASK(keys[i].mod) == CLEANMASK(ev->state))) + keys[i].func(&(keys[i].arg)); +} + void killclient(const Arg *arg) { @@ -1696,6 +1720,13 @@ tile(Monitor *m) } } +void +togglealttag() +{ + selmon->alttag = !selmon->alttag; + drawbar(selmon); +} + void togglebar(const Arg *arg) { -- 2.33.0