Compare commits
	
		
			1 Commits
		
	
	
		
			master
			...
			patch-stat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e1c7baaa0a | 
| @@ -11,7 +11,7 @@ static const char col_gray1[]       = "#222222"; | |||||||
| static const char col_gray2[]       = "#444444"; | static const char col_gray2[]       = "#444444"; | ||||||
| static const char col_gray3[]       = "#bbbbbb"; | static const char col_gray3[]       = "#bbbbbb"; | ||||||
| static const char col_gray4[]       = "#eeeeee"; | static const char col_gray4[]       = "#eeeeee"; | ||||||
| static const char col_cyan[]        = "#606060";  | static const char col_cyan[]        = "#005577"; | ||||||
| static const char *colors[][3]      = { | static const char *colors[][3]      = { | ||||||
| 	/*               fg         bg         border   */ | 	/*               fg         bg         border   */ | ||||||
| 	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, | 	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, | ||||||
| @@ -45,7 +45,7 @@ static const Layout layouts[] = { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /* key definitions */ | /* key definitions */ | ||||||
| #define MODKEY Mod4Mask | #define MODKEY Mod1Mask | ||||||
| #define TAGKEYS(KEY,TAG) \ | #define TAGKEYS(KEY,TAG) \ | ||||||
| 	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \ | 	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \ | ||||||
| 	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \ | 	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \ | ||||||
| @@ -58,7 +58,7 @@ static const Layout layouts[] = { | |||||||
| /* commands */ | /* commands */ | ||||||
| static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ | static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ | ||||||
| static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; | static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; | ||||||
| static const char *termcmd[]  = { "alacritty", NULL }; | static const char *termcmd[]  = { "st", NULL }; | ||||||
|  |  | ||||||
| static Key keys[] = { | static Key keys[] = { | ||||||
| 	/* modifier                     key        function        argument */ | 	/* modifier                     key        function        argument */ | ||||||
|   | |||||||
							
								
								
									
										166
									
								
								dwm-status2d-6.3.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								dwm-status2d-6.3.diff
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,166 @@ | |||||||
|  | diff --git a/dwm.c b/dwm.c | ||||||
|  | index a96f33c..24b1eeb 100644 | ||||||
|  | --- a/dwm.c | ||||||
|  | +++ b/dwm.c | ||||||
|  | @@ -163,6 +163,7 @@ static void detachstack(Client *c); | ||||||
|  |  static Monitor *dirtomon(int dir); | ||||||
|  |  static void drawbar(Monitor *m); | ||||||
|  |  static void drawbars(void); | ||||||
|  | +static int drawstatusbar(Monitor *m, int bh, char* text); | ||||||
|  |  static void enternotify(XEvent *e); | ||||||
|  |  static void expose(XEvent *e); | ||||||
|  |  static void focus(Client *c); | ||||||
|  | @@ -237,7 +238,7 @@ static void zoom(const Arg *arg); | ||||||
|  |   | ||||||
|  |  /* variables */ | ||||||
|  |  static const char broken[] = "broken"; | ||||||
|  | -static char stext[256]; | ||||||
|  | +static char stext[1024]; | ||||||
|  |  static int screen; | ||||||
|  |  static int sw, sh;           /* X display screen geometry width, height */ | ||||||
|  |  static int bh, blw = 0;      /* bar geometry */ | ||||||
|  | @@ -485,7 +486,7 @@ cleanup(void) | ||||||
|  |  		cleanupmon(mons); | ||||||
|  |  	for (i = 0; i < CurLast; i++) | ||||||
|  |  		drw_cur_free(drw, cursor[i]); | ||||||
|  | -	for (i = 0; i < LENGTH(colors); i++) | ||||||
|  | +	for (i = 0; i < LENGTH(colors) + 1; i++) | ||||||
|  |  		free(scheme[i]); | ||||||
|  |  	XDestroyWindow(dpy, wmcheckwin); | ||||||
|  |  	drw_free(drw); | ||||||
|  | @@ -693,6 +694,114 @@ dirtomon(int dir) | ||||||
|  |  	return m; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +int | ||||||
|  | +drawstatusbar(Monitor *m, int bh, char* stext) { | ||||||
|  | +	int ret, i, w, x, len; | ||||||
|  | +	short isCode = 0; | ||||||
|  | +	char *text; | ||||||
|  | +	char *p; | ||||||
|  | + | ||||||
|  | +	len = strlen(stext) + 1 ; | ||||||
|  | +	if (!(text = (char*) malloc(sizeof(char)*len))) | ||||||
|  | +		die("malloc"); | ||||||
|  | +	p = text; | ||||||
|  | +	memcpy(text, stext, len); | ||||||
|  | + | ||||||
|  | +	/* compute width of the status text */ | ||||||
|  | +	w = 0; | ||||||
|  | +	i = -1; | ||||||
|  | +	while (text[++i]) { | ||||||
|  | +		if (text[i] == '^') { | ||||||
|  | +			if (!isCode) { | ||||||
|  | +				isCode = 1; | ||||||
|  | +				text[i] = '\0'; | ||||||
|  | +				w += TEXTW(text) - lrpad; | ||||||
|  | +				text[i] = '^'; | ||||||
|  | +				if (text[++i] == 'f') | ||||||
|  | +					w += atoi(text + ++i); | ||||||
|  | +			} else { | ||||||
|  | +				isCode = 0; | ||||||
|  | +				text = text + i + 1; | ||||||
|  | +				i = -1; | ||||||
|  | +			} | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | +	if (!isCode) | ||||||
|  | +		w += TEXTW(text) - lrpad; | ||||||
|  | +	else | ||||||
|  | +		isCode = 0; | ||||||
|  | +	text = p; | ||||||
|  | + | ||||||
|  | +	w += 2; /* 1px padding on both sides */ | ||||||
|  | +	ret = x = m->ww - w; | ||||||
|  | + | ||||||
|  | +	drw_setscheme(drw, scheme[LENGTH(colors)]); | ||||||
|  | +	drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; | ||||||
|  | +	drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; | ||||||
|  | +	drw_rect(drw, x, 0, w, bh, 1, 1); | ||||||
|  | +	x++; | ||||||
|  | + | ||||||
|  | +	/* process status text */ | ||||||
|  | +	i = -1; | ||||||
|  | +	while (text[++i]) { | ||||||
|  | +		if (text[i] == '^' && !isCode) { | ||||||
|  | +			isCode = 1; | ||||||
|  | + | ||||||
|  | +			text[i] = '\0'; | ||||||
|  | +			w = TEXTW(text) - lrpad; | ||||||
|  | +			drw_text(drw, x, 0, w, bh, 0, text, 0); | ||||||
|  | + | ||||||
|  | +			x += w; | ||||||
|  | + | ||||||
|  | +			/* process code */ | ||||||
|  | +			while (text[++i] != '^') { | ||||||
|  | +				if (text[i] == 'c') { | ||||||
|  | +					char buf[8]; | ||||||
|  | +					memcpy(buf, (char*)text+i+1, 7); | ||||||
|  | +					buf[7] = '\0'; | ||||||
|  | +					drw_clr_create(drw, &drw->scheme[ColFg], buf); | ||||||
|  | +					i += 7; | ||||||
|  | +				} else if (text[i] == 'b') { | ||||||
|  | +					char buf[8]; | ||||||
|  | +					memcpy(buf, (char*)text+i+1, 7); | ||||||
|  | +					buf[7] = '\0'; | ||||||
|  | +					drw_clr_create(drw, &drw->scheme[ColBg], buf); | ||||||
|  | +					i += 7; | ||||||
|  | +				} else if (text[i] == 'd') { | ||||||
|  | +					drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; | ||||||
|  | +					drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; | ||||||
|  | +				} else if (text[i] == 'r') { | ||||||
|  | +					int rx = atoi(text + ++i); | ||||||
|  | +					while (text[++i] != ','); | ||||||
|  | +					int ry = atoi(text + ++i); | ||||||
|  | +					while (text[++i] != ','); | ||||||
|  | +					int rw = atoi(text + ++i); | ||||||
|  | +					while (text[++i] != ','); | ||||||
|  | +					int rh = atoi(text + ++i); | ||||||
|  | + | ||||||
|  | +					drw_rect(drw, rx + x, ry, rw, rh, 1, 0); | ||||||
|  | +				} else if (text[i] == 'f') { | ||||||
|  | +					x += atoi(text + ++i); | ||||||
|  | +				} | ||||||
|  | +			} | ||||||
|  | + | ||||||
|  | +			text = text + i + 1; | ||||||
|  | +			i=-1; | ||||||
|  | +			isCode = 0; | ||||||
|  | +		} | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (!isCode) { | ||||||
|  | +		w = TEXTW(text) - lrpad; | ||||||
|  | +		drw_text(drw, x, 0, w, bh, 0, text, 0); | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
|  | +	free(p); | ||||||
|  | + | ||||||
|  | +	return ret; | ||||||
|  | +} | ||||||
|  | + | ||||||
|  |  void | ||||||
|  |  drawbar(Monitor *m) | ||||||
|  |  { | ||||||
|  | @@ -707,9 +816,7 @@ drawbar(Monitor *m) | ||||||
|  |   | ||||||
|  |  	/* draw status first so it can be overdrawn by tags later */ | ||||||
|  |  	if (m == selmon) { /* status is only drawn on selected monitor */ | ||||||
|  | -		drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
|  | -		tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ | ||||||
|  | -		drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); | ||||||
|  | +		tw = m->ww - drawstatusbar(m, bh, stext); | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  	for (c = m->clients; c; c = c->next) { | ||||||
|  | @@ -1571,7 +1678,8 @@ setup(void) | ||||||
|  |  	cursor[CurResize] = drw_cur_create(drw, XC_sizing); | ||||||
|  |  	cursor[CurMove] = drw_cur_create(drw, XC_fleur); | ||||||
|  |  	/* init appearance */ | ||||||
|  | -	scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); | ||||||
|  | +	scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); | ||||||
|  | +	scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3); | ||||||
|  |  	for (i = 0; i < LENGTH(colors); i++) | ||||||
|  |  		scheme[i] = drw_scm_create(drw, colors[i], 3); | ||||||
|  |  	/* init bars */ | ||||||
							
								
								
									
										120
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								dwm.c
									
									
									
									
									
								
							| @@ -163,6 +163,7 @@ static void detachstack(Client *c); | |||||||
| static Monitor *dirtomon(int dir); | static Monitor *dirtomon(int dir); | ||||||
| static void drawbar(Monitor *m); | static void drawbar(Monitor *m); | ||||||
| static void drawbars(void); | static void drawbars(void); | ||||||
|  | static int drawstatusbar(Monitor *m, int bh, char* text); | ||||||
| static void enternotify(XEvent *e); | static void enternotify(XEvent *e); | ||||||
| static void expose(XEvent *e); | static void expose(XEvent *e); | ||||||
| static void focus(Client *c); | static void focus(Client *c); | ||||||
| @@ -237,7 +238,7 @@ static void zoom(const Arg *arg); | |||||||
|  |  | ||||||
| /* variables */ | /* variables */ | ||||||
| static const char broken[] = "broken"; | static const char broken[] = "broken"; | ||||||
| static char stext[256]; | static char stext[1024]; | ||||||
| static int screen; | static int screen; | ||||||
| static int sw, sh;           /* X display screen geometry width, height */ | static int sw, sh;           /* X display screen geometry width, height */ | ||||||
| static int bh, blw = 0;      /* bar geometry */ | static int bh, blw = 0;      /* bar geometry */ | ||||||
| @@ -485,7 +486,7 @@ cleanup(void) | |||||||
| 		cleanupmon(mons); | 		cleanupmon(mons); | ||||||
| 	for (i = 0; i < CurLast; i++) | 	for (i = 0; i < CurLast; i++) | ||||||
| 		drw_cur_free(drw, cursor[i]); | 		drw_cur_free(drw, cursor[i]); | ||||||
| 	for (i = 0; i < LENGTH(colors); i++) | 	for (i = 0; i < LENGTH(colors) + 1; i++) | ||||||
| 		free(scheme[i]); | 		free(scheme[i]); | ||||||
| 	XDestroyWindow(dpy, wmcheckwin); | 	XDestroyWindow(dpy, wmcheckwin); | ||||||
| 	drw_free(drw); | 	drw_free(drw); | ||||||
| @@ -693,6 +694,114 @@ dirtomon(int dir) | |||||||
| 	return m; | 	return m; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int | ||||||
|  | drawstatusbar(Monitor *m, int bh, char* stext) { | ||||||
|  | 	int ret, i, w, x, len; | ||||||
|  | 	short isCode = 0; | ||||||
|  | 	char *text; | ||||||
|  | 	char *p; | ||||||
|  |  | ||||||
|  | 	len = strlen(stext) + 1 ; | ||||||
|  | 	if (!(text = (char*) malloc(sizeof(char)*len))) | ||||||
|  | 		die("malloc"); | ||||||
|  | 	p = text; | ||||||
|  | 	memcpy(text, stext, len); | ||||||
|  |  | ||||||
|  | 	/* compute width of the status text */ | ||||||
|  | 	w = 0; | ||||||
|  | 	i = -1; | ||||||
|  | 	while (text[++i]) { | ||||||
|  | 		if (text[i] == '^') { | ||||||
|  | 			if (!isCode) { | ||||||
|  | 				isCode = 1; | ||||||
|  | 				text[i] = '\0'; | ||||||
|  | 				w += TEXTW(text) - lrpad; | ||||||
|  | 				text[i] = '^'; | ||||||
|  | 				if (text[++i] == 'f') | ||||||
|  | 					w += atoi(text + ++i); | ||||||
|  | 			} else { | ||||||
|  | 				isCode = 0; | ||||||
|  | 				text = text + i + 1; | ||||||
|  | 				i = -1; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if (!isCode) | ||||||
|  | 		w += TEXTW(text) - lrpad; | ||||||
|  | 	else | ||||||
|  | 		isCode = 0; | ||||||
|  | 	text = p; | ||||||
|  |  | ||||||
|  | 	w += 2; /* 1px padding on both sides */ | ||||||
|  | 	ret = x = m->ww - w; | ||||||
|  |  | ||||||
|  | 	drw_setscheme(drw, scheme[LENGTH(colors)]); | ||||||
|  | 	drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; | ||||||
|  | 	drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; | ||||||
|  | 	drw_rect(drw, x, 0, w, bh, 1, 1); | ||||||
|  | 	x++; | ||||||
|  |  | ||||||
|  | 	/* process status text */ | ||||||
|  | 	i = -1; | ||||||
|  | 	while (text[++i]) { | ||||||
|  | 		if (text[i] == '^' && !isCode) { | ||||||
|  | 			isCode = 1; | ||||||
|  |  | ||||||
|  | 			text[i] = '\0'; | ||||||
|  | 			w = TEXTW(text) - lrpad; | ||||||
|  | 			drw_text(drw, x, 0, w, bh, 0, text, 0); | ||||||
|  |  | ||||||
|  | 			x += w; | ||||||
|  |  | ||||||
|  | 			/* process code */ | ||||||
|  | 			while (text[++i] != '^') { | ||||||
|  | 				if (text[i] == 'c') { | ||||||
|  | 					char buf[8]; | ||||||
|  | 					memcpy(buf, (char*)text+i+1, 7); | ||||||
|  | 					buf[7] = '\0'; | ||||||
|  | 					drw_clr_create(drw, &drw->scheme[ColFg], buf); | ||||||
|  | 					i += 7; | ||||||
|  | 				} else if (text[i] == 'b') { | ||||||
|  | 					char buf[8]; | ||||||
|  | 					memcpy(buf, (char*)text+i+1, 7); | ||||||
|  | 					buf[7] = '\0'; | ||||||
|  | 					drw_clr_create(drw, &drw->scheme[ColBg], buf); | ||||||
|  | 					i += 7; | ||||||
|  | 				} else if (text[i] == 'd') { | ||||||
|  | 					drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; | ||||||
|  | 					drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; | ||||||
|  | 				} else if (text[i] == 'r') { | ||||||
|  | 					int rx = atoi(text + ++i); | ||||||
|  | 					while (text[++i] != ','); | ||||||
|  | 					int ry = atoi(text + ++i); | ||||||
|  | 					while (text[++i] != ','); | ||||||
|  | 					int rw = atoi(text + ++i); | ||||||
|  | 					while (text[++i] != ','); | ||||||
|  | 					int rh = atoi(text + ++i); | ||||||
|  |  | ||||||
|  | 					drw_rect(drw, rx + x, ry, rw, rh, 1, 0); | ||||||
|  | 				} else if (text[i] == 'f') { | ||||||
|  | 					x += atoi(text + ++i); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			text = text + i + 1; | ||||||
|  | 			i=-1; | ||||||
|  | 			isCode = 0; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (!isCode) { | ||||||
|  | 		w = TEXTW(text) - lrpad; | ||||||
|  | 		drw_text(drw, x, 0, w, bh, 0, text, 0); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	drw_setscheme(drw, scheme[SchemeNorm]); | ||||||
|  | 	free(p); | ||||||
|  |  | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
| void | void | ||||||
| drawbar(Monitor *m) | drawbar(Monitor *m) | ||||||
| { | { | ||||||
| @@ -707,9 +816,7 @@ drawbar(Monitor *m) | |||||||
|  |  | ||||||
| 	/* draw status first so it can be overdrawn by tags later */ | 	/* draw status first so it can be overdrawn by tags later */ | ||||||
| 	if (m == selmon) { /* status is only drawn on selected monitor */ | 	if (m == selmon) { /* status is only drawn on selected monitor */ | ||||||
| 		drw_setscheme(drw, scheme[SchemeNorm]); | 		tw = m->ww - drawstatusbar(m, bh, stext); | ||||||
| 		tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ |  | ||||||
| 		drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for (c = m->clients; c; c = c->next) { | 	for (c = m->clients; c; c = c->next) { | ||||||
| @@ -1571,7 +1678,8 @@ setup(void) | |||||||
| 	cursor[CurResize] = drw_cur_create(drw, XC_sizing); | 	cursor[CurResize] = drw_cur_create(drw, XC_sizing); | ||||||
| 	cursor[CurMove] = drw_cur_create(drw, XC_fleur); | 	cursor[CurMove] = drw_cur_create(drw, XC_fleur); | ||||||
| 	/* init appearance */ | 	/* init appearance */ | ||||||
| 	scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); | 	scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); | ||||||
|  | 	scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3); | ||||||
| 	for (i = 0; i < LENGTH(colors); i++) | 	for (i = 0; i < LENGTH(colors); i++) | ||||||
| 		scheme[i] = drw_scm_create(drw, colors[i], 3); | 		scheme[i] = drw_scm_create(drw, colors[i], 3); | ||||||
| 	/* init bars */ | 	/* init bars */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user