mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Add a "fill" style attribute to clear the entire format drawing area in
a colour, GitHub issue 1815.
This commit is contained in:
		@@ -511,8 +511,9 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base,
 | 
				
			|||||||
	u_int			 ocx = os->cx, ocy = os->cy, i, width[TOTAL];
 | 
						u_int			 ocx = os->cx, ocy = os->cy, i, width[TOTAL];
 | 
				
			||||||
	u_int			 map[] = { LEFT, LEFT, CENTRE, RIGHT };
 | 
						u_int			 map[] = { LEFT, LEFT, CENTRE, RIGHT };
 | 
				
			||||||
	int			 focus_start = -1, focus_end = -1;
 | 
						int			 focus_start = -1, focus_end = -1;
 | 
				
			||||||
	int			 list_state = -1;
 | 
						int			 list_state = -1, fill = -1;
 | 
				
			||||||
	enum style_align	 list_align = STYLE_ALIGN_DEFAULT;
 | 
						enum style_align	 list_align = STYLE_ALIGN_DEFAULT;
 | 
				
			||||||
 | 
						struct grid_cell	 gc;
 | 
				
			||||||
	struct style		 sy;
 | 
						struct style		 sy;
 | 
				
			||||||
	struct utf8_data	*ud = &sy.gc.data;
 | 
						struct utf8_data	*ud = &sy.gc.data;
 | 
				
			||||||
	const char		*cp, *end;
 | 
						const char		*cp, *end;
 | 
				
			||||||
@@ -590,6 +591,10 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base,
 | 
				
			|||||||
		    style_tostring(&sy));
 | 
							    style_tostring(&sy));
 | 
				
			||||||
		free(tmp);
 | 
							free(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* If this style has a fill colour, store it for later. */
 | 
				
			||||||
 | 
							if (sy.fill != 8)
 | 
				
			||||||
 | 
								fill = sy.fill;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Check the list state. */
 | 
							/* Check the list state. */
 | 
				
			||||||
		switch (sy.list) {
 | 
							switch (sy.list) {
 | 
				
			||||||
		case STYLE_LIST_ON:
 | 
							case STYLE_LIST_ON:
 | 
				
			||||||
@@ -711,6 +716,14 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base,
 | 
				
			|||||||
		    fr->argument, names[fr->index], fr->start, fr->end);
 | 
							    fr->argument, names[fr->index], fr->start, fr->end);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Clear the available area. */
 | 
				
			||||||
 | 
						if (fill != -1) {
 | 
				
			||||||
 | 
							memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
				
			||||||
 | 
							gc.bg = fill;
 | 
				
			||||||
 | 
							for (i = 0; i < available; i++)
 | 
				
			||||||
 | 
								screen_write_putc(octx, &gc, ' ');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Draw the screens. How they are arranged depends on where the list
 | 
						 * Draw the screens. How they are arranged depends on where the list
 | 
				
			||||||
	 * appearsq.
 | 
						 * appearsq.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								style.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								style.c
									
									
									
									
									
								
							@@ -32,6 +32,7 @@
 | 
				
			|||||||
static struct style style_default = {
 | 
					static struct style style_default = {
 | 
				
			||||||
	{ 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } },
 | 
						{ 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						8,
 | 
				
			||||||
	STYLE_ALIGN_DEFAULT,
 | 
						STYLE_ALIGN_DEFAULT,
 | 
				
			||||||
	STYLE_LIST_OFF,
 | 
						STYLE_LIST_OFF,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,6 +128,10 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in)
 | 
				
			|||||||
				sy->align = STYLE_ALIGN_RIGHT;
 | 
									sy->align = STYLE_ALIGN_RIGHT;
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				goto error;
 | 
									goto error;
 | 
				
			||||||
 | 
							} else if (end > 5 && strncasecmp(tmp, "fill=", 5) == 0) {
 | 
				
			||||||
 | 
								if ((value = colour_fromstring(tmp + 5)) == -1)
 | 
				
			||||||
 | 
									goto error;
 | 
				
			||||||
 | 
								sy->fill = value;
 | 
				
			||||||
		} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
 | 
							} else if (end > 3 && strncasecmp(tmp + 1, "g=", 2) == 0) {
 | 
				
			||||||
			if ((value = colour_fromstring(tmp + 3)) == -1)
 | 
								if ((value = colour_fromstring(tmp + 3)) == -1)
 | 
				
			||||||
				goto error;
 | 
									goto error;
 | 
				
			||||||
@@ -213,6 +218,11 @@ style_tostring(struct style *sy)
 | 
				
			|||||||
		    tmp);
 | 
							    tmp);
 | 
				
			||||||
		comma = ",";
 | 
							comma = ",";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (sy->fill != 8) {
 | 
				
			||||||
 | 
							off += xsnprintf(s + off, sizeof s - off, "%sfill=%s", comma,
 | 
				
			||||||
 | 
							    colour_tostring(sy->fill));
 | 
				
			||||||
 | 
							comma = ",";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if (gc->fg != 8) {
 | 
						if (gc->fg != 8) {
 | 
				
			||||||
		off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma,
 | 
							off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma,
 | 
				
			||||||
		    colour_tostring(gc->fg));
 | 
							    colour_tostring(gc->fg));
 | 
				
			||||||
@@ -290,6 +300,8 @@ style_equal(struct style *sy1, struct style *sy2)
 | 
				
			|||||||
		return (0);
 | 
							return (0);
 | 
				
			||||||
	if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK))
 | 
						if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK))
 | 
				
			||||||
		return (0);
 | 
							return (0);
 | 
				
			||||||
 | 
						if (sy1->fill != sy2->fill)
 | 
				
			||||||
 | 
							return (0);
 | 
				
			||||||
	if (sy1->align != sy2->align)
 | 
						if (sy1->align != sy2->align)
 | 
				
			||||||
		return (0);
 | 
							return (0);
 | 
				
			||||||
	return (1);
 | 
						return (1);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.1
									
									
									
									
									
								
							@@ -4337,6 +4337,9 @@ to unset.
 | 
				
			|||||||
.Ic align=right
 | 
					.Ic align=right
 | 
				
			||||||
.Xc
 | 
					.Xc
 | 
				
			||||||
Align text to the left, centre or right of the available space if appropriate.
 | 
					Align text to the left, centre or right of the available space if appropriate.
 | 
				
			||||||
 | 
					.It Xo Ic fill=colour
 | 
				
			||||||
 | 
					.Xc
 | 
				
			||||||
 | 
					Fill the available space with a background colour if appropriate.
 | 
				
			||||||
.It Xo Ic list=on ,
 | 
					.It Xo Ic list=on ,
 | 
				
			||||||
.Ic list=focus ,
 | 
					.Ic list=focus ,
 | 
				
			||||||
.Ic list=left-marker ,
 | 
					.Ic list=left-marker ,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user