mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Instead of representing colours in several different forms with various
cell flags, convert to use an int with flags marking 256 or RGB colours in the top byte (except in cells, which we don't want to make any bigger). From Brad Town.
This commit is contained in:
		
							
								
								
									
										41
									
								
								colour.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								colour.c
									
									
									
									
									
								
							@@ -67,7 +67,7 @@ colour_find_rgb(u_char r, u_char g, u_char b)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* If we have hit the colour exactly, return early. */
 | 
						/* If we have hit the colour exactly, return early. */
 | 
				
			||||||
	if (cr == r && cg == g && cb == b)
 | 
						if (cr == r && cg == g && cb == b)
 | 
				
			||||||
		return (16 + (36 * qr) + (6 * qg) + qb);
 | 
							return ((16 + (36 * qr) + (6 * qg) + qb) | COLOUR_FLAG_256);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Work out the closest grey (average of RGB). */
 | 
						/* Work out the closest grey (average of RGB). */
 | 
				
			||||||
	grey_avg = (r + g + b) / 3;
 | 
						grey_avg = (r + g + b) / 3;
 | 
				
			||||||
@@ -83,25 +83,25 @@ colour_find_rgb(u_char r, u_char g, u_char b)
 | 
				
			|||||||
		idx = 232 + grey_idx;
 | 
							idx = 232 + grey_idx;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		idx = 16 + (36 * qr) + (6 * qg) + qb;
 | 
							idx = 16 + (36 * qr) + (6 * qg) + qb;
 | 
				
			||||||
	return (idx);
 | 
						return (idx | COLOUR_FLAG_256);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Set grid cell foreground colour. */
 | 
					/* Join RGB into a colour. */
 | 
				
			||||||
void
 | 
					int
 | 
				
			||||||
colour_set_fg(struct grid_cell *gc, int c)
 | 
					colour_join_rgb(u_char r, u_char g, u_char b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (c & 0x100)
 | 
						return ((((int)((r) & 0xff)) << 16) |
 | 
				
			||||||
		gc->flags |= GRID_FLAG_FG256;
 | 
						    (((int)((g) & 0xff)) << 8) |
 | 
				
			||||||
	gc->fg = c;
 | 
						    (((int)((b) & 0xff))) | COLOUR_FLAG_RGB);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Set grid cell background colour. */
 | 
					/* Split colour into RGB. */
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
colour_set_bg(struct grid_cell *gc, int c)
 | 
					colour_split_rgb(int c, u_char *r, u_char *g, u_char *b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (c & 0x100)
 | 
						*r = (c >> 16) & 0xff;
 | 
				
			||||||
		gc->flags |= GRID_FLAG_BG256;
 | 
						*g = (c >> 8) & 0xff;
 | 
				
			||||||
	gc->bg = c;
 | 
						*b = c & 0xff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Convert colour to a string. */
 | 
					/* Convert colour to a string. */
 | 
				
			||||||
@@ -109,9 +109,16 @@ const char *
 | 
				
			|||||||
colour_tostring(int c)
 | 
					colour_tostring(int c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static char	s[32];
 | 
						static char	s[32];
 | 
				
			||||||
 | 
						u_char		r, g, b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (c & 0x100) {
 | 
						if (c & COLOUR_FLAG_RGB) {
 | 
				
			||||||
		xsnprintf(s, sizeof s, "colour%d", c & ~0x100);
 | 
							colour_split_rgb(c, &r, &g, &b);
 | 
				
			||||||
 | 
							xsnprintf(s, sizeof s, "#%02x%02x%02x", r, g, b);
 | 
				
			||||||
 | 
							return (s);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (c & COLOUR_FLAG_256) {
 | 
				
			||||||
 | 
							xsnprintf(s, sizeof s, "colour%u", c & 0xff);
 | 
				
			||||||
		return (s);
 | 
							return (s);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -171,14 +178,14 @@ colour_fromstring(const char *s)
 | 
				
			|||||||
		n = sscanf(s + 1, "%2hhx%2hhx%2hhx", &r, &g, &b);
 | 
							n = sscanf(s + 1, "%2hhx%2hhx%2hhx", &r, &g, &b);
 | 
				
			||||||
		if (n != 3)
 | 
							if (n != 3)
 | 
				
			||||||
			return (-1);
 | 
								return (-1);
 | 
				
			||||||
		return (colour_find_rgb(r, g, b) | 0x100);
 | 
							return (colour_join_rgb(r, g, b));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
 | 
						if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
 | 
				
			||||||
		n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
 | 
							n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
 | 
				
			||||||
		if (errstr != NULL)
 | 
							if (errstr != NULL)
 | 
				
			||||||
			return (-1);
 | 
								return (-1);
 | 
				
			||||||
		return (n | 0x100);
 | 
							return (n | COLOUR_FLAG_256);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (strcasecmp(s, "black") == 0 || strcmp(s, "0") == 0)
 | 
						if (strcasecmp(s, "black") == 0 || strcmp(s, "0") == 0)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										43
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								input.c
									
									
									
									
									
								
							@@ -1628,23 +1628,15 @@ input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i)
 | 
				
			|||||||
	(*i)++;
 | 
						(*i)++;
 | 
				
			||||||
	c = input_get(ictx, *i, 0, -1);
 | 
						c = input_get(ictx, *i, 0, -1);
 | 
				
			||||||
	if (c == -1) {
 | 
						if (c == -1) {
 | 
				
			||||||
		if (fgbg == 38) {
 | 
							if (fgbg == 38)
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
 | 
					 | 
				
			||||||
			gc->fg = 8;
 | 
								gc->fg = 8;
 | 
				
			||||||
		} else if (fgbg == 48) {
 | 
							else if (fgbg == 48)
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
 | 
					 | 
				
			||||||
			gc->bg = 8;
 | 
								gc->bg = 8;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if (fgbg == 38) {
 | 
							if (fgbg == 38)
 | 
				
			||||||
			gc->flags |= GRID_FLAG_FG256;
 | 
								gc->fg = c | COLOUR_FLAG_256;
 | 
				
			||||||
			gc->flags &= ~GRID_FLAG_FGRGB;
 | 
							else if (fgbg == 48)
 | 
				
			||||||
			gc->fg = c;
 | 
								gc->bg = c | COLOUR_FLAG_256;
 | 
				
			||||||
		} else if (fgbg == 48) {
 | 
					 | 
				
			||||||
			gc->flags |= GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
			gc->flags &= ~GRID_FLAG_BGRGB;
 | 
					 | 
				
			||||||
			gc->bg = c;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1668,19 +1660,10 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i)
 | 
				
			|||||||
	if (b == -1 || b > 255)
 | 
						if (b == -1 || b > 255)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fgbg == 38) {
 | 
						if (fgbg == 38)
 | 
				
			||||||
		gc->flags &= ~GRID_FLAG_FG256;
 | 
							gc->fg = colour_join_rgb(r, g, b);
 | 
				
			||||||
		gc->flags |= GRID_FLAG_FGRGB;
 | 
						else if (fgbg == 48)
 | 
				
			||||||
		gc->fg_rgb.r = r;
 | 
							gc->bg = colour_join_rgb(r, g, b);
 | 
				
			||||||
		gc->fg_rgb.g = g;
 | 
					 | 
				
			||||||
		gc->fg_rgb.b = b;
 | 
					 | 
				
			||||||
	} else if (fgbg == 48) {
 | 
					 | 
				
			||||||
		gc->flags &= ~GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
		gc->flags |= GRID_FLAG_BGRGB;
 | 
					 | 
				
			||||||
		gc->bg_rgb.r = r;
 | 
					 | 
				
			||||||
		gc->bg_rgb.g = g;
 | 
					 | 
				
			||||||
		gc->bg_rgb.b = b;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Handle CSI SGR. */
 | 
					/* Handle CSI SGR. */
 | 
				
			||||||
@@ -1761,11 +1744,9 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
 | 
				
			|||||||
		case 35:
 | 
							case 35:
 | 
				
			||||||
		case 36:
 | 
							case 36:
 | 
				
			||||||
		case 37:
 | 
							case 37:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
 | 
					 | 
				
			||||||
			gc->fg = n - 30;
 | 
								gc->fg = n - 30;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 39:
 | 
							case 39:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
 | 
					 | 
				
			||||||
			gc->fg = 8;
 | 
								gc->fg = 8;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 40:
 | 
							case 40:
 | 
				
			||||||
@@ -1776,11 +1757,9 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
 | 
				
			|||||||
		case 45:
 | 
							case 45:
 | 
				
			||||||
		case 46:
 | 
							case 46:
 | 
				
			||||||
		case 47:
 | 
							case 47:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
 | 
					 | 
				
			||||||
			gc->bg = n - 40;
 | 
								gc->bg = n - 40;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 49:
 | 
							case 49:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
 | 
					 | 
				
			||||||
			gc->bg = 8;
 | 
								gc->bg = 8;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 90:
 | 
							case 90:
 | 
				
			||||||
@@ -1791,7 +1770,6 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
 | 
				
			|||||||
		case 95:
 | 
							case 95:
 | 
				
			||||||
		case 96:
 | 
							case 96:
 | 
				
			||||||
		case 97:
 | 
							case 97:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
 | 
					 | 
				
			||||||
			gc->fg = n;
 | 
								gc->fg = n;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 100:
 | 
							case 100:
 | 
				
			||||||
@@ -1802,7 +1780,6 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
 | 
				
			|||||||
		case 105:
 | 
							case 105:
 | 
				
			||||||
		case 106:
 | 
							case 106:
 | 
				
			||||||
		case 107:
 | 
							case 107:
 | 
				
			||||||
			gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
 | 
					 | 
				
			||||||
			gc->bg = n - 10;
 | 
								gc->bg = n - 10;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -552,9 +552,9 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
						memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
				
			||||||
	if (w->active == wp)
 | 
						if (w->active == wp)
 | 
				
			||||||
		colour_set_bg(&gc, active_colour);
 | 
							gc.bg = active_colour;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		colour_set_bg(&gc, colour);
 | 
							gc.bg = colour;
 | 
				
			||||||
	tty_attributes(tty, &gc, wp);
 | 
						tty_attributes(tty, &gc, wp);
 | 
				
			||||||
	for (ptr = buf; *ptr != '\0'; ptr++) {
 | 
						for (ptr = buf; *ptr != '\0'; ptr++) {
 | 
				
			||||||
		if (*ptr < '0' || *ptr > '9')
 | 
							if (*ptr < '0' || *ptr > '9')
 | 
				
			||||||
@@ -579,9 +579,9 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp, u_int top)
 | 
				
			|||||||
draw_text:
 | 
					draw_text:
 | 
				
			||||||
	memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
						memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
				
			||||||
	if (w->active == wp)
 | 
						if (w->active == wp)
 | 
				
			||||||
		colour_set_fg(&gc, active_colour);
 | 
							gc.fg = active_colour;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		colour_set_fg(&gc, colour);
 | 
							gc.fg = colour;
 | 
				
			||||||
	tty_attributes(tty, &gc, wp);
 | 
						tty_attributes(tty, &gc, wp);
 | 
				
			||||||
	tty_puts(tty, buf);
 | 
						tty_puts(tty, buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										105
									
								
								style.c
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								style.c
									
									
									
									
									
								
							@@ -33,7 +33,8 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc,
 | 
				
			|||||||
	char			tmp[32];
 | 
						char			tmp[32];
 | 
				
			||||||
	int			val;
 | 
						int			val;
 | 
				
			||||||
	size_t			end;
 | 
						size_t			end;
 | 
				
			||||||
	u_char			fg, bg, attr, flags;
 | 
						int			fg, bg;
 | 
				
			||||||
 | 
						u_char			attr, flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (*in == '\0')
 | 
						if (*in == '\0')
 | 
				
			||||||
		return (0);
 | 
							return (0);
 | 
				
			||||||
@@ -56,38 +57,20 @@ style_parse(const struct grid_cell *defgc, struct grid_cell *gc,
 | 
				
			|||||||
			fg = defgc->fg;
 | 
								fg = defgc->fg;
 | 
				
			||||||
			bg = defgc->bg;
 | 
								bg = defgc->bg;
 | 
				
			||||||
			attr = defgc->attr;
 | 
								attr = defgc->attr;
 | 
				
			||||||
			flags &= ~(GRID_FLAG_FG256|GRID_FLAG_BG256);
 | 
								flags = defgc->flags;
 | 
				
			||||||
			flags |=
 | 
					 | 
				
			||||||
			    defgc->flags & (GRID_FLAG_FG256|GRID_FLAG_BG256);
 | 
					 | 
				
			||||||
		} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
 | 
							} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
 | 
				
			||||||
			if ((val = colour_fromstring(tmp + 3)) == -1)
 | 
								if ((val = colour_fromstring(tmp + 3)) == -1)
 | 
				
			||||||
				goto error;
 | 
									goto error;
 | 
				
			||||||
			if (*in == 'f' || *in == 'F') {
 | 
								if (*in == 'f' || *in == 'F') {
 | 
				
			||||||
				if (val != 8) {
 | 
									if (val != 8)
 | 
				
			||||||
					if (val & 0x100) {
 | 
					 | 
				
			||||||
						flags |= GRID_FLAG_FG256;
 | 
					 | 
				
			||||||
						val &= ~0x100;
 | 
					 | 
				
			||||||
					} else
 | 
					 | 
				
			||||||
						flags &= ~GRID_FLAG_FG256;
 | 
					 | 
				
			||||||
					fg = val;
 | 
										fg = val;
 | 
				
			||||||
				} else {
 | 
									else
 | 
				
			||||||
					fg = defgc->fg;
 | 
										fg = defgc->fg;
 | 
				
			||||||
					flags &= ~GRID_FLAG_FG256;
 | 
					 | 
				
			||||||
					flags |= defgc->flags & GRID_FLAG_FG256;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			} else if (*in == 'b' || *in == 'B') {
 | 
								} else if (*in == 'b' || *in == 'B') {
 | 
				
			||||||
				if (val != 8) {
 | 
									if (val != 8)
 | 
				
			||||||
					if (val & 0x100) {
 | 
					 | 
				
			||||||
						flags |= GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
						val &= ~0x100;
 | 
					 | 
				
			||||||
					} else
 | 
					 | 
				
			||||||
						flags &= ~GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
					bg = val;
 | 
										bg = val;
 | 
				
			||||||
				} else {
 | 
									else
 | 
				
			||||||
					bg = defgc->bg;
 | 
										bg = defgc->bg;
 | 
				
			||||||
					flags &= ~GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
					flags |= defgc->flags & GRID_FLAG_BG256;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			} else
 | 
								} else
 | 
				
			||||||
				goto error;
 | 
									goto error;
 | 
				
			||||||
		} else if (strcasecmp(tmp, "none") == 0)
 | 
							} else if (strcasecmp(tmp, "none") == 0)
 | 
				
			||||||
@@ -120,27 +103,19 @@ error:
 | 
				
			|||||||
const char *
 | 
					const char *
 | 
				
			||||||
style_tostring(struct grid_cell *gc)
 | 
					style_tostring(struct grid_cell *gc)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int		 c, off = 0, comma = 0;
 | 
						int		 off = 0, comma = 0;
 | 
				
			||||||
	static char	 s[256];
 | 
						static char	 s[256];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*s = '\0';
 | 
						*s = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (gc->fg != 8 || gc->flags & GRID_FLAG_FG256) {
 | 
						if (gc->fg != 8) {
 | 
				
			||||||
		if (gc->flags & GRID_FLAG_FG256)
 | 
							off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(gc->fg));
 | 
				
			||||||
			c = gc->fg | 0x100;
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			c = gc->fg;
 | 
					 | 
				
			||||||
		off += xsnprintf(s, sizeof s, "fg=%s", colour_tostring(c));
 | 
					 | 
				
			||||||
		comma = 1;
 | 
							comma = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (gc->bg != 8 || gc->flags & GRID_FLAG_BG256) {
 | 
						if (gc->bg != 8) {
 | 
				
			||||||
		if (gc->flags & GRID_FLAG_BG256)
 | 
					 | 
				
			||||||
			c = gc->bg | 0x100;
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			c = gc->bg;
 | 
					 | 
				
			||||||
		off += xsnprintf(s + off, sizeof s - off, "%sbg=%s",
 | 
							off += xsnprintf(s + off, sizeof s - off, "%sbg=%s",
 | 
				
			||||||
		    comma ? "," : "", colour_tostring(c));
 | 
							    comma ? "," : "", colour_tostring(gc->bg));
 | 
				
			||||||
		comma = 1;
 | 
							comma = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -177,9 +152,9 @@ style_update_new(struct options *oo, const char *name, const char *newname)
 | 
				
			|||||||
	value = o->num;
 | 
						value = o->num;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (strstr(name, "-bg") != NULL)
 | 
						if (strstr(name, "-bg") != NULL)
 | 
				
			||||||
		colour_set_bg(gc, value);
 | 
							gc->bg = value;
 | 
				
			||||||
	else if (strstr(name, "-fg") != NULL)
 | 
						else if (strstr(name, "-fg") != NULL)
 | 
				
			||||||
		colour_set_fg(gc, value);
 | 
							gc->fg = value;
 | 
				
			||||||
	else if (strstr(name, "-attr") != NULL)
 | 
						else if (strstr(name, "-attr") != NULL)
 | 
				
			||||||
		gc->attr = value;
 | 
							gc->attr = value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -189,23 +164,15 @@ void
 | 
				
			|||||||
style_update_old(struct options *oo, const char *name, struct grid_cell *gc)
 | 
					style_update_old(struct options *oo, const char *name, struct grid_cell *gc)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char	newname[128];
 | 
						char	newname[128];
 | 
				
			||||||
	int	c, size;
 | 
						int	size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size = strrchr(name, '-') - name;
 | 
						size = strrchr(name, '-') - name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (gc->flags & GRID_FLAG_BG256)
 | 
					 | 
				
			||||||
		c = gc->bg | 0x100;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		c = gc->bg;
 | 
					 | 
				
			||||||
	xsnprintf(newname, sizeof newname, "%.*s-bg", size, name);
 | 
						xsnprintf(newname, sizeof newname, "%.*s-bg", size, name);
 | 
				
			||||||
	options_set_number(oo, newname, c);
 | 
						options_set_number(oo, newname, gc->bg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (gc->flags & GRID_FLAG_FG256)
 | 
					 | 
				
			||||||
		c = gc->fg | 0x100;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		c = gc->fg;
 | 
					 | 
				
			||||||
	xsnprintf(newname, sizeof newname, "%.*s-fg", size, name);
 | 
						xsnprintf(newname, sizeof newname, "%.*s-fg", size, name);
 | 
				
			||||||
	options_set_number(oo, newname, c);
 | 
						options_set_number(oo, newname, gc->fg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xsnprintf(newname, sizeof newname, "%.*s-attr", size, name);
 | 
						xsnprintf(newname, sizeof newname, "%.*s-attr", size, name);
 | 
				
			||||||
	options_set_number(oo, newname, gc->attr);
 | 
						options_set_number(oo, newname, gc->attr);
 | 
				
			||||||
@@ -219,14 +186,8 @@ style_apply(struct grid_cell *gc, struct options *oo, const char *name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	memcpy(gc, &grid_default_cell, sizeof *gc);
 | 
						memcpy(gc, &grid_default_cell, sizeof *gc);
 | 
				
			||||||
	gcp = options_get_style(oo, name);
 | 
						gcp = options_get_style(oo, name);
 | 
				
			||||||
	if (gcp->flags & GRID_FLAG_FG256)
 | 
						gc->fg = gcp->fg;
 | 
				
			||||||
		colour_set_fg(gc, gcp->fg | 0x100);
 | 
						gc->bg = gcp->bg;
 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		colour_set_fg(gc, gcp->fg);
 | 
					 | 
				
			||||||
	if (gcp->flags & GRID_FLAG_BG256)
 | 
					 | 
				
			||||||
		colour_set_bg(gc, gcp->bg | 0x100);
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		colour_set_bg(gc, gcp->bg);
 | 
					 | 
				
			||||||
	gc->attr |= gcp->attr;
 | 
						gc->attr |= gcp->attr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -237,18 +198,10 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name)
 | 
				
			|||||||
	struct grid_cell	*gcp;
 | 
						struct grid_cell	*gcp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gcp = options_get_style(oo, name);
 | 
						gcp = options_get_style(oo, name);
 | 
				
			||||||
	if (gcp->fg != 8 || gcp->flags & GRID_FLAG_FG256) {
 | 
						if (gcp->fg != 8)
 | 
				
			||||||
		if (gcp->flags & GRID_FLAG_FG256)
 | 
							gc->fg = gcp->fg;
 | 
				
			||||||
			colour_set_fg(gc, gcp->fg | 0x100);
 | 
						if (gcp->bg != 8)
 | 
				
			||||||
		else
 | 
							gc->bg = gcp->bg;
 | 
				
			||||||
			colour_set_fg(gc, gcp->fg);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (gcp->bg != 8 || gcp->flags & GRID_FLAG_BG256) {
 | 
					 | 
				
			||||||
		if (gcp->flags & GRID_FLAG_BG256)
 | 
					 | 
				
			||||||
			colour_set_bg(gc, gcp->bg | 0x100);
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			colour_set_bg(gc, gcp->bg);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (gcp->attr != 0)
 | 
						if (gcp->attr != 0)
 | 
				
			||||||
		gc->attr |= gcp->attr;
 | 
							gc->attr |= gcp->attr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -257,10 +210,10 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name)
 | 
				
			|||||||
int
 | 
					int
 | 
				
			||||||
style_equal(const struct grid_cell *gc1, const struct grid_cell *gc2)
 | 
					style_equal(const struct grid_cell *gc1, const struct grid_cell *gc2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return gc1->fg == gc2->fg &&
 | 
						return (gc1->fg == gc2->fg &&
 | 
				
			||||||
		gc1->bg == gc2->bg &&
 | 
						    gc1->bg == gc2->bg &&
 | 
				
			||||||
		(gc1->flags & ~GRID_FLAG_PADDING) ==
 | 
						    (gc1->flags & ~GRID_FLAG_PADDING) ==
 | 
				
			||||||
		(gc2->flags & ~GRID_FLAG_PADDING) &&
 | 
						    (gc2->flags & ~GRID_FLAG_PADDING) &&
 | 
				
			||||||
		(gc1->attr & ~GRID_ATTR_CHARSET) ==
 | 
						    (gc1->attr & ~GRID_ATTR_CHARSET) ==
 | 
				
			||||||
		(gc2->attr & ~GRID_ATTR_CHARSET);
 | 
						    (gc2->attr & ~GRID_ATTR_CHARSET));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -230,7 +230,7 @@ window_clock_draw_screen(struct window_pane *wp)
 | 
				
			|||||||
			screen_write_cursormove(&ctx, x, y);
 | 
								screen_write_cursormove(&ctx, x, y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
								memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
				
			||||||
			colour_set_fg(&gc, colour);
 | 
								gc.fg = colour;
 | 
				
			||||||
			screen_write_puts(&ctx, &gc, "%s", tim);
 | 
								screen_write_puts(&ctx, &gc, "%s", tim);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -242,7 +242,7 @@ window_clock_draw_screen(struct window_pane *wp)
 | 
				
			|||||||
	y = (screen_size_y(s) / 2) - 3;
 | 
						y = (screen_size_y(s) / 2) - 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
						memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
				
			||||||
	colour_set_bg(&gc, colour);
 | 
						gc.bg = colour;
 | 
				
			||||||
	for (ptr = tim; *ptr != '\0'; ptr++) {
 | 
						for (ptr = tim; *ptr != '\0'; ptr++) {
 | 
				
			||||||
		if (*ptr >= '0' && *ptr <= '9')
 | 
							if (*ptr >= '0' && *ptr <= '9')
 | 
				
			||||||
			idx = *ptr - '0';
 | 
								idx = *ptr - '0';
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user