add hide vacant tags and used tags

This commit is contained in:
speedie 2023-07-04 18:18:31 +02:00
parent 30ae2a876d
commit c94ae037d5
2 changed files with 56 additions and 23 deletions

View file

@ -1,29 +1,31 @@
/* See LICENSE file for copyright and license details. */ /* See LICENSE file for copyright and license details. */
/* appearance */ /* appearance */
static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */ static const unsigned int snap = 32; /* snap pixel */
static const unsigned int gappih = 20; /* horiz inner gap between windows */ static const unsigned int gappih = 20; /* horiz inner gap between windows */
static const unsigned int gappiv = 10; /* vert inner gap between windows */ static const unsigned int gappiv = 10; /* vert inner gap between windows */
static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */
static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */ static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */
static int smartgaps = 0; /* 1 means no outer gap when there is only one window */ static int smartgaps = 0; /* 1 means no outer gap when there is only one window */
static const int showbar = 1; /* 0 means no bar */ static const int showbar = 1; /* 0 means no bar */
static const int topbar = 1; /* 0 means bottom bar */ static const int topbar = 1; /* 0 means bottom bar */
static const unsigned int systrayspacing = 2; /* systray spacing */ static const unsigned int systrayspacing = 2; /* systray spacing */
static const int showsystray = 1; /* 0 means no systray */ static const int showsystray = 1; /* 0 means no systray */
static const char statussep = ';'; /* separator between status bars */ static const char statussep = ';'; /* separator between status bars */
static char font[] = "monospace 10"; static char font[] = "monospace 10";
static char col_gray1[] = "#222222"; static char col_gray1[] = "#222222";
static char col_gray2[] = "#444444"; static char col_gray2[] = "#444444";
static char col_gray3[] = "#bbbbbb"; static char col_gray3[] = "#bbbbbb";
static char col_gray4[] = "#eeeeee"; static char col_gray4[] = "#eeeeee";
static char col_cyan[] = "#005577"; static char col_cyan[] = "#005577";
static const int monoclenogaps = 1; static const int hidevacant = 1;
static const int monoclenogaps = 1;
/* tagging */ /* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const char *usedtags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
static const Rule rules[] = { static const Rule rules[] = {
/* xprop(1): /* xprop(1):
@ -59,7 +61,7 @@ static const BarRule barrules[] = {
}; };
/* layout(s) */ /* layout(s) */
static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ static const float mfact = 0.50; /* factor of master area size [0.05..0.95] */
static const int nmaster = 1; /* number of clients in master area */ static const int nmaster = 1; /* number of clients in master area */
static const int nstack = 0; /* number of clients in primary stack area */ static const int nstack = 0; /* number of clients in primary stack area */
static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */ static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
@ -110,7 +112,7 @@ static const Key keys[] = {
{ MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } }, { MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_n, incnmaster, {.i = -1 } },
{ MODKEY|ControlMask, XK_i, incnstack, {.i = +1 } }, { MODKEY|ControlMask, XK_i, incnstack, {.i = +1 } },
{ MODKEY|ControlMask, XK_u, incnstack, {.i = -1 } }, { MODKEY|ControlMask, XK_u, incnstack, {.i = -1 } },
{ MODKEY, XK_a, setmfact, {.f = -0.05} }, { MODKEY, XK_a, setmfact, {.f = -0.05} },

View file

@ -2,9 +2,21 @@ int
width_tags(Bar *bar, BarWidthArg *a) width_tags(Bar *bar, BarWidthArg *a)
{ {
int w, i; int w, i;
Client *c;
unsigned int occ = 0;
if (!hidevacant) {
for (c = bar->mon->clients; c; c = c->next)
occ |= c->tags;
} else {
for (c = bar->mon->clients; c; c = c->next)
occ |= c->tags == 255 ? 0 : c->tags;
}
for (w = 0, i = 0; i < LENGTH(tags); i++) { for (w = 0, i = 0; i < LENGTH(tags); i++) {
w += TEXTW(tags[i]); if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i) && hidevacant)
continue;
w += TEXTW(occ & 1 << i ? usedtags[i] : tags[i]);
} }
return w; return w;
} }
@ -20,17 +32,24 @@ draw_tags(Bar *bar, BarDrawArg *a)
Monitor *m = bar->mon; Monitor *m = bar->mon;
for (c = m->clients; c; c = c->next) { for (c = m->clients; c; c = c->next) {
occ |= c->tags; if (!hidevacant) {
occ |= c->tags;
} else {
occ |= c->tags == 255 ? 0 : c->tags;
}
if (c->isurgent) if (c->isurgent)
urg |= c->tags; urg |= c->tags;
} }
for (i = 0; i < LENGTH(tags); i++) { for (i = 0; i < LENGTH(tags); i++) {
if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i) && hidevacant)
continue;
w = TEXTW(tags[i]); w = TEXTW(tags[i]);
int ts = m->tagset[m->seltags] & 1 << i ? 1 : 0; int ts = m->tagset[m->seltags] & 1 << i ? 1 : 0;
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i, False, ts ? col_gray4 : col_gray3, ts ? col_cyan : col_gray1, 255, 255); drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i, False, ts ? col_gray4 : col_gray3, ts ? col_cyan : col_gray1, 255, 255);
if (occ & 1 << i) if (occ & 1 << i && !hidevacant)
drw_rect(drw, x + boxs, boxs, boxw, boxw, drw_rect(drw, x + boxs, boxs, boxw, boxw,
m == selmon && selmon->sel && selmon->sel->tags & 1 << i, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
urg & 1 << i, ts ? col_gray4 : col_gray3, ts ? col_cyan : col_gray1, 255, 255); urg & 1 << i, ts ? col_gray4 : col_gray3, ts ? col_cyan : col_gray1, 255, 255);
@ -45,9 +64,21 @@ int
click_tags(Bar *bar, Arg *arg, BarClickArg *a) click_tags(Bar *bar, Arg *arg, BarClickArg *a)
{ {
int i = 0, x = lrpad / 2; int i = 0, x = lrpad / 2;
unsigned int occ = 0;
Client *c;
if (hidevacant) {
for (c = bar->mon->clients; c; c = c->next)
occ |= c->tags == 255 ? 0 : c->tags;
} else {
for (c = bar->mon->clients; c; c = c->next)
occ |= c->tags;
}
do { do {
x += TEXTW(tags[i]); if (!(occ & 1 << i || bar->mon->tagset[bar->mon->seltags] & 1 << i) && hidevacant)
continue;
x += TEXTW(occ & 1 << i ? usedtags[i] : tags[i]);
} while (a->rel_x >= x && ++i < LENGTH(tags)); } while (a->rel_x >= x && ++i < LENGTH(tags));
if (i < LENGTH(tags)) { if (i < LENGTH(tags)) {
arg->ui = 1 << i; arg->ui = 1 << i;