sites

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

dwm-splitstatus-20201114-61bb8b2.diff (2783B)


      1 From d2efb5e19eb466f77f0860f0175b84247799bb93 Mon Sep 17 00:00:00 2001
      2 From: Alex Cole <ajzcole@airmail.cc>
      3 Date: Sat, 14 Nov 2020 21:03:09 +1300
      4 Subject: [PATCH] splitstatus patch
      5 
      6 ---
      7  config.def.h |  2 ++
      8  dwm.c        | 31 +++++++++++++++----------------
      9  2 files changed, 17 insertions(+), 16 deletions(-)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 1c0b587..4161652 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -5,6 +5,8 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
     16  static const unsigned int snap      = 32;       /* snap pixel */
     17  static const int showbar            = 1;        /* 0 means no bar */
     18  static const int topbar             = 1;        /* 0 means bottom bar */
     19 +static const int splitstatus        = 1;        /* 1 for split status items */
     20 +static const char *splitdelim        = ";";       /* Character used for separating status */
     21  static const char *fonts[]          = { "monospace:size=10" };
     22  static const char dmenufont[]       = "monospace:size=10";
     23  static const char col_gray1[]       = "#222222";
     24 diff --git a/dwm.c b/dwm.c
     25 index 664c527..e1a8085 100644
     26 --- a/dwm.c
     27 +++ b/dwm.c
     28 @@ -701,13 +701,9 @@ drawbar(Monitor *m)
     29  	int boxw = drw->fonts->h / 6 + 2;
     30  	unsigned int i, occ = 0, urg = 0;
     31  	Client *c;
     32 -
     33 -	/* draw status first so it can be overdrawn by tags later */
     34 -	if (m == selmon) { /* status is only drawn on selected monitor */
     35 -		drw_setscheme(drw, scheme[SchemeNorm]);
     36 -		tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
     37 -		drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
     38 -	}
     39 +	char *mstext;
     40 +	char *rstext;
     41 +	int msx;
     42  
     43  	for (c = m->clients; c; c = c->next) {
     44  		occ |= c->tags;
     45 @@ -729,17 +725,20 @@ drawbar(Monitor *m)
     46  	drw_setscheme(drw, scheme[SchemeNorm]);
     47  	x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
     48  
     49 -	if ((w = m->ww - tw - x) > bh) {
     50 -		if (m->sel) {
     51 -			drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
     52 -			drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
     53 -			if (m->sel->isfloating)
     54 -				drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
     55 -		} else {
     56 -			drw_setscheme(drw, scheme[SchemeNorm]);
     57 -			drw_rect(drw, x, 0, w, bh, 1, 1);
     58 +	drw_setscheme(drw, scheme[SchemeNorm]);
     59 +	drw_rect(drw, x, 0, m->ww - x, bh, 1, 1);
     60 +
     61 +	if (m == selmon) { /* status is only drawn on selected monitor */
     62 +		rstext = strdup(stext);
     63 +		if (splitstatus) {
     64 +			mstext = strsep(&rstext, splitdelim);
     65 +			msx = (m->ww - TEXTW(mstext) + lrpad) / 2; /* x position of middle status text */
     66 +			drw_text(drw, msx, 0, TEXTW(mstext) - lrpad, bh, 0, mstext, 0);
     67  		}
     68 +		tw = TEXTW(rstext) - lrpad + 2; /* 2px right padding */
     69 +		drw_text(drw, m->ww - tw, 0, tw, bh, 0, rstext, 0);
     70  	}
     71 +
     72  	drw_map(drw, m->barwin, 0, 0, m->ww, bh);
     73  }
     74  
     75 -- 
     76 2.29.2
     77