sites

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

dwm-status2d-20200508-60bb3df.diff (4744B)


      1 From 60bb3dfaf91227eb02e828d74e6f4758b2c56542 Mon Sep 17 00:00:00 2001
      2 From: cultab <rroarck@gmail.com>
      3 Date: Fri, 8 May 2020 13:56:08 +0300
      4 Subject: [PATCH] fix status2d to work after ed3ab6
      5 
      6 ed3ab6 changed the name of the variable sw to tw, now the patch won't apply nor work.
      7 This patch updates the variable name to the new one.
      8 ---
      9  dwm.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
     10  1 file changed, 114 insertions(+), 6 deletions(-)
     11 
     12 diff --git a/dwm.c b/dwm.c
     13 index 9fd0286..71e18be 100644
     14 --- a/dwm.c
     15 +++ b/dwm.c
     16 @@ -163,6 +163,7 @@ static void detachstack(Client *c);
     17  static Monitor *dirtomon(int dir);
     18  static void drawbar(Monitor *m);
     19  static void drawbars(void);
     20 +static int drawstatusbar(Monitor *m, int bh, char* text);
     21  static void enternotify(XEvent *e);
     22  static void expose(XEvent *e);
     23  static void focus(Client *c);
     24 @@ -237,7 +238,7 @@ static void zoom(const Arg *arg);
     25  
     26  /* variables */
     27  static const char broken[] = "broken";
     28 -static char stext[256];
     29 +static char stext[1024];
     30  static int screen;
     31  static int sw, sh;           /* X display screen geometry width, height */
     32  static int bh, blw = 0;      /* bar geometry */
     33 @@ -485,7 +486,7 @@ cleanup(void)
     34  		cleanupmon(mons);
     35  	for (i = 0; i < CurLast; i++)
     36  		drw_cur_free(drw, cursor[i]);
     37 -	for (i = 0; i < LENGTH(colors); i++)
     38 +	for (i = 0; i < LENGTH(colors) + 1; i++)
     39  		free(scheme[i]);
     40  	XDestroyWindow(dpy, wmcheckwin);
     41  	drw_free(drw);
     42 @@ -693,6 +694,114 @@ dirtomon(int dir)
     43  	return m;
     44  }
     45  
     46 +int
     47 +drawstatusbar(Monitor *m, int bh, char* stext) {
     48 +	int ret, i, w, x, len;
     49 +	short isCode = 0;
     50 +	char *text;
     51 +	char *p;
     52 +
     53 +	len = strlen(stext) + 1 ;
     54 +	if (!(text = (char*) malloc(sizeof(char)*len)))
     55 +		die("malloc");
     56 +	p = text;
     57 +	memcpy(text, stext, len);
     58 +
     59 +	/* compute width of the status text */
     60 +	w = 0;
     61 +	i = -1;
     62 +	while (text[++i]) {
     63 +		if (text[i] == '^') {
     64 +			if (!isCode) {
     65 +				isCode = 1;
     66 +				text[i] = '\0';
     67 +				w += TEXTW(text) - lrpad;
     68 +				text[i] = '^';
     69 +				if (text[++i] == 'f')
     70 +					w += atoi(text + ++i);
     71 +			} else {
     72 +				isCode = 0;
     73 +				text = text + i + 1;
     74 +				i = -1;
     75 +			}
     76 +		}
     77 +	}
     78 +	if (!isCode)
     79 +		w += TEXTW(text) - lrpad;
     80 +	else
     81 +		isCode = 0;
     82 +	text = p;
     83 +
     84 +	w += 2; /* 1px padding on both sides */
     85 +	ret = x = m->ww - w;
     86 +
     87 +	drw_setscheme(drw, scheme[LENGTH(colors)]);
     88 +	drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
     89 +	drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
     90 +	drw_rect(drw, x, 0, w, bh, 1, 1);
     91 +	x++;
     92 +
     93 +	/* process status text */
     94 +	i = -1;
     95 +	while (text[++i]) {
     96 +		if (text[i] == '^' && !isCode) {
     97 +			isCode = 1;
     98 +
     99 +			text[i] = '\0';
    100 +			w = TEXTW(text) - lrpad;
    101 +			drw_text(drw, x, 0, w, bh, 0, text, 0);
    102 +
    103 +			x += w;
    104 +
    105 +			/* process code */
    106 +			while (text[++i] != '^') {
    107 +				if (text[i] == 'c') {
    108 +					char buf[8];
    109 +					memcpy(buf, (char*)text+i+1, 7);
    110 +					buf[7] = '\0';
    111 +					drw_clr_create(drw, &drw->scheme[ColFg], buf);
    112 +					i += 7;
    113 +				} else if (text[i] == 'b') {
    114 +					char buf[8];
    115 +					memcpy(buf, (char*)text+i+1, 7);
    116 +					buf[7] = '\0';
    117 +					drw_clr_create(drw, &drw->scheme[ColBg], buf);
    118 +					i += 7;
    119 +				} else if (text[i] == 'd') {
    120 +					drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
    121 +					drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
    122 +				} else if (text[i] == 'r') {
    123 +					int rx = atoi(text + ++i);
    124 +					while (text[++i] != ',');
    125 +					int ry = atoi(text + ++i);
    126 +					while (text[++i] != ',');
    127 +					int rw = atoi(text + ++i);
    128 +					while (text[++i] != ',');
    129 +					int rh = atoi(text + ++i);
    130 +
    131 +					drw_rect(drw, rx + x, ry, rw, rh, 1, 0);
    132 +				} else if (text[i] == 'f') {
    133 +					x += atoi(text + ++i);
    134 +				}
    135 +			}
    136 +
    137 +			text = text + i + 1;
    138 +			i=-1;
    139 +			isCode = 0;
    140 +		}
    141 +	}
    142 +
    143 +	if (!isCode) {
    144 +		w = TEXTW(text) - lrpad;
    145 +		drw_text(drw, x, 0, w, bh, 0, text, 0);
    146 +	}
    147 +
    148 +	drw_setscheme(drw, scheme[SchemeNorm]);
    149 +	free(p);
    150 +
    151 +	return ret;
    152 +}
    153 +
    154  void
    155  drawbar(Monitor *m)
    156  {
    157 @@ -704,9 +813,7 @@ drawbar(Monitor *m)
    158  
    159  	/* draw status first so it can be overdrawn by tags later */
    160  	if (m == selmon) { /* status is only drawn on selected monitor */
    161 -		drw_setscheme(drw, scheme[SchemeNorm]);
    162 -		tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
    163 -		drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
    164 +		tw = m->ww - drawstatusbar(m, bh, stext);
    165  	}
    166  
    167  	for (c = m->clients; c; c = c->next) {
    168 @@ -1568,7 +1675,8 @@ setup(void)
    169  	cursor[CurResize] = drw_cur_create(drw, XC_sizing);
    170  	cursor[CurMove] = drw_cur_create(drw, XC_fleur);
    171  	/* init appearance */
    172 -	scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
    173 +	scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *));
    174 +	scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3);
    175  	for (i = 0; i < LENGTH(colors); i++)
    176  		scheme[i] = drw_scm_create(drw, colors[i], 3);
    177  	/* init bars */
    178 -- 
    179 2.26.2
    180