sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-clientindicatorshidevacant-6.2.diff (2391B)


      1 From 166fe643c650defe3b9b18367969dd1359775e0b Mon Sep 17 00:00:00 2001
      2 From: Miles Alan <m@milesalan.com>
      3 Date: Mon, 17 Aug 2020 21:46:14 -0500
      4 Subject: [PATCH] Combination of the clientindicators & hidevacant patches
      5 
      6 The clientindicator patch draws a dot indicator overlayed on each tag icon
      7 for each client. The selected client is drawn as a larger horizontal line.
      8 
      9 The hidevacant patch hides tags which have no clients.
     10 ---
     11  dwm.c | 31 +++++++++++++++++++++++--------
     12  1 file changed, 23 insertions(+), 8 deletions(-)
     13 
     14 diff --git a/dwm.c b/dwm.c
     15 index 4465af1..969b129 100644
     16 --- a/dwm.c
     17 +++ b/dwm.c
     18 @@ -416,7 +416,7 @@ attachstack(Client *c)
     19  void
     20  buttonpress(XEvent *e)
     21  {
     22 -	unsigned int i, x, click;
     23 +	unsigned int i, x, click, occ = 0;
     24  	Arg arg = {0};
     25  	Client *c;
     26  	Monitor *m;
     27 @@ -431,9 +431,14 @@ buttonpress(XEvent *e)
     28  	}
     29  	if (ev->window == selmon->barwin) {
     30  		i = x = 0;
     31 -		do
     32 +		for (c = m->clients; c; c = c->next)
     33 +			occ |= c->tags == 255 ? 0 : c->tags;
     34 +		do {
     35 +			/* do not reserve space for vacant tags */
     36 +			if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
     37 +				continue;
     38  			x += TEXTW(tags[i]);
     39 -		while (ev->x >= x && ++i < LENGTH(tags));
     40 +		} while (ev->x >= x && ++i < LENGTH(tags));
     41  		if (i < LENGTH(tags)) {
     42  			click = ClkTagBar;
     43  			arg.ui = 1 << i;
     44 @@ -695,6 +700,7 @@ dirtomon(int dir)
     45  void
     46  drawbar(Monitor *m)
     47  {
     48 +	int indn;
     49  	int x, w, sw = 0;
     50  	int boxs = drw->fonts->h / 9;
     51  	int boxw = drw->fonts->h / 6 + 2;
     52 @@ -709,19 +715,28 @@ drawbar(Monitor *m)
     53  	}
     54  
     55  	for (c = m->clients; c; c = c->next) {
     56 -		occ |= c->tags;
     57 +		occ |= c->tags == 255 ? 0 : c->tags;
     58  		if (c->isurgent)
     59  			urg |= c->tags;
     60  	}
     61  	x = 0;
     62  	for (i = 0; i < LENGTH(tags); i++) {
     63 +		/* do not draw vacant tags */
     64 +		if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
     65 +		continue;
     66 +
     67 +		indn = 0;
     68  		w = TEXTW(tags[i]);
     69  		drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
     70  		drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
     71 -		if (occ & 1 << i)
     72 -			drw_rect(drw, x + boxs, boxs, boxw, boxw,
     73 -				m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
     74 -				urg & 1 << i);
     75 +
     76 +		for (c = m->clients; c; c = c->next) {
     77 +			if (c->tags & (1 << i)) {
     78 +				drw_rect(drw, x, 1 + (indn * 2), selmon->sel == c ? 6 : 1, 1, 1, urg & 1 << i);
     79 +				indn++;
     80 +			}
     81 +		}
     82 +
     83  		x += w;
     84  	}
     85  	w = blw = TEXTW(m->ltsymbol);
     86 -- 
     87 2.25.4
     88