Merge branch 'master' of git://git.suckless.org/st
						commit
						01f86e5c2a
					
				|  | @ -162,10 +162,10 @@ static const char *altcolorname[] = { | ||||||
|  * Default colors (colorname index) |  * Default colors (colorname index) | ||||||
|  * foreground, background, cursor, reverse cursor |  * foreground, background, cursor, reverse cursor | ||||||
|  */ |  */ | ||||||
| unsigned int defaultfg = 12; | unsigned int defaultfg = 258; | ||||||
| unsigned int defaultbg = 8; | unsigned int defaultbg = 259; | ||||||
| static unsigned int defaultcs = 14; | unsigned int defaultcs = 256; | ||||||
| static unsigned int defaultrcs = 15; | static unsigned int defaultrcs = 257; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Default shape of cursor |  * Default shape of cursor | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								config.h
								
								
								
								
							
							
						
						
									
										2
									
								
								config.h
								
								
								
								
							|  | @ -151,7 +151,7 @@ static const char *altcolorname[] = { | ||||||
|  */ |  */ | ||||||
| unsigned int defaultfg = 12; | unsigned int defaultfg = 12; | ||||||
| unsigned int defaultbg = 8; | unsigned int defaultbg = 8; | ||||||
| static unsigned int defaultcs = 14; | unsigned int defaultcs = 14; | ||||||
| static unsigned int defaultrcs = 15; | static unsigned int defaultrcs = 15; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
							
								
								
									
										86
									
								
								st.c
								
								
								
								
							
							
						
						
									
										86
									
								
								st.c
								
								
								
								
							|  | @ -1912,6 +1912,42 @@ csireset(void) | ||||||
| 	memset(&csiescseq, 0, sizeof(csiescseq)); | 	memset(&csiescseq, 0, sizeof(csiescseq)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | osc4_color_response(int num) | ||||||
|  | { | ||||||
|  | 	int n; | ||||||
|  | 	char buf[32]; | ||||||
|  | 	unsigned char r, g, b; | ||||||
|  | 
 | ||||||
|  | 	if (xgetcolor(num, &r, &g, &b)) { | ||||||
|  | 		fprintf(stderr, "erresc: failed to fetch osc4 color %d\n", num); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	n = snprintf(buf, sizeof buf, "\033]4;%d;rgb:%02x%02x/%02x%02x/%02x%02x\007", | ||||||
|  | 		     num, r, r, g, g, b, b); | ||||||
|  | 
 | ||||||
|  | 	ttywrite(buf, n, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | osc_color_response(int index, int num) | ||||||
|  | { | ||||||
|  | 	int n; | ||||||
|  | 	char buf[32]; | ||||||
|  | 	unsigned char r, g, b; | ||||||
|  | 
 | ||||||
|  | 	if (xgetcolor(index, &r, &g, &b)) { | ||||||
|  | 		fprintf(stderr, "erresc: failed to fetch osc color %d\n", index); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	n = snprintf(buf, sizeof buf, "\033]%d;rgb:%02x%02x/%02x%02x/%02x%02x\007", | ||||||
|  | 		     num, r, r, g, g, b, b); | ||||||
|  | 
 | ||||||
|  | 	ttywrite(buf, n, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| strhandle(void) | strhandle(void) | ||||||
| { | { | ||||||
|  | @ -1950,14 +1986,56 @@ strhandle(void) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			return; | 			return; | ||||||
|  | 		case 10: | ||||||
|  | 			if (narg < 2) | ||||||
|  | 				break; | ||||||
|  | 
 | ||||||
|  | 			p = strescseq.args[1]; | ||||||
|  | 
 | ||||||
|  | 			if (!strcmp(p, "?")) | ||||||
|  | 				osc_color_response(defaultfg, 10); | ||||||
|  | 			else if (xsetcolorname(defaultfg, p)) | ||||||
|  | 				fprintf(stderr, "erresc: invalid foreground color: %s\n", p); | ||||||
|  | 			else | ||||||
|  | 				redraw(); | ||||||
|  | 			return; | ||||||
|  | 		case 11: | ||||||
|  | 			if (narg < 2) | ||||||
|  | 				break; | ||||||
|  | 
 | ||||||
|  | 			p = strescseq.args[1]; | ||||||
|  | 
 | ||||||
|  | 			if (!strcmp(p, "?")) | ||||||
|  | 				osc_color_response(defaultbg, 11); | ||||||
|  | 			else if (xsetcolorname(defaultbg, p)) | ||||||
|  | 				fprintf(stderr, "erresc: invalid background color: %s\n", p); | ||||||
|  | 			else | ||||||
|  | 				redraw(); | ||||||
|  | 			return; | ||||||
|  | 		case 12: | ||||||
|  | 			if (narg < 2) | ||||||
|  | 				break; | ||||||
|  | 
 | ||||||
|  | 			p = strescseq.args[1]; | ||||||
|  | 
 | ||||||
|  | 			if (!strcmp(p, "?")) | ||||||
|  | 				osc_color_response(defaultcs, 12); | ||||||
|  | 			else if (xsetcolorname(defaultcs, p)) | ||||||
|  | 				fprintf(stderr, "erresc: invalid cursor color: %s\n", p); | ||||||
|  | 			else | ||||||
|  | 				redraw(); | ||||||
|  | 			return; | ||||||
| 		case 4: /* color set */ | 		case 4: /* color set */ | ||||||
| 			if (narg < 3) | 			if (narg < 3) | ||||||
| 				break; | 				break; | ||||||
| 			p = strescseq.args[2]; | 			p = strescseq.args[2]; | ||||||
| 			/* FALLTHROUGH */ | 			/* FALLTHROUGH */ | ||||||
| 		case 104: /* color reset, here p = NULL */ | 		case 104: /* color reset */ | ||||||
| 			j = (narg > 1) ? atoi(strescseq.args[1]) : -1; | 			j = (narg > 1) ? atoi(strescseq.args[1]) : -1; | ||||||
| 			if (xsetcolorname(j, p)) { | 
 | ||||||
|  | 			if (p && !strcmp(p, "?")) | ||||||
|  | 				osc4_color_response(j); | ||||||
|  | 			else if (xsetcolorname(j, p)) { | ||||||
| 				if (par == 104 && narg <= 1) | 				if (par == 104 && narg <= 1) | ||||||
| 					return; /* color reset without parameter */ | 					return; /* color reset without parameter */ | ||||||
| 				fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", | 				fprintf(stderr, "erresc: invalid color j=%d, p=%s\n", | ||||||
|  | @ -2499,6 +2577,10 @@ check_control_code: | ||||||
| 	if (width == 2) { | 	if (width == 2) { | ||||||
| 		gp->mode |= ATTR_WIDE; | 		gp->mode |= ATTR_WIDE; | ||||||
| 		if (term.c.x+1 < term.col) { | 		if (term.c.x+1 < term.col) { | ||||||
|  | 			if (gp[1].mode == ATTR_WIDE && term.c.x+2 < term.col) { | ||||||
|  | 				gp[2].u = ' '; | ||||||
|  | 				gp[2].mode &= ~ATTR_WDUMMY; | ||||||
|  | 			} | ||||||
| 			gp[1].u = '\0'; | 			gp[1].u = '\0'; | ||||||
| 			gp[1].mode = ATTR_WDUMMY; | 			gp[1].mode = ATTR_WDUMMY; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								st.h
								
								
								
								
							
							
						
						
									
										1
									
								
								st.h
								
								
								
								
							|  | @ -140,3 +140,4 @@ extern unsigned int defaultfg; | ||||||
| extern unsigned int defaultbg; | extern unsigned int defaultbg; | ||||||
| extern const int boxdraw, boxdraw_bold, boxdraw_braille; | extern const int boxdraw, boxdraw_bold, boxdraw_braille; | ||||||
| extern float alpha; | extern float alpha; | ||||||
|  | extern unsigned int defaultcs; | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								x.c
								
								
								
								
							
							
						
						
									
										13
									
								
								x.c
								
								
								
								
							|  | @ -854,6 +854,19 @@ xloadcols(void) | ||||||
| 	loaded = 1; | 	loaded = 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int | ||||||
|  | xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b) | ||||||
|  | { | ||||||
|  | 	if (!BETWEEN(x, 0, dc.collen)) | ||||||
|  | 		return 1; | ||||||
|  | 
 | ||||||
|  | 	*r = dc.col[x].color.red >> 8; | ||||||
|  | 	*g = dc.col[x].color.green >> 8; | ||||||
|  | 	*b = dc.col[x].color.blue >> 8; | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int | int | ||||||
| xsetcolorname(int x, const char *name) | xsetcolorname(int x, const char *name) | ||||||
| { | { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue