mirror of
https://github.com/tmux/tmux.git
synced 2025-01-06 07:48:48 +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:
parent
cf30e0f935
commit
2da050413c
@ -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 map[] = { LEFT, LEFT, CENTRE, RIGHT };
|
||||
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;
|
||||
struct grid_cell gc;
|
||||
struct style sy;
|
||||
struct utf8_data *ud = &sy.gc.data;
|
||||
const char *cp, *end;
|
||||
@ -590,6 +591,10 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base,
|
||||
style_tostring(&sy));
|
||||
free(tmp);
|
||||
|
||||
/* If this style has a fill colour, store it for later. */
|
||||
if (sy.fill != 8)
|
||||
fill = sy.fill;
|
||||
|
||||
/* Check the list state. */
|
||||
switch (sy.list) {
|
||||
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);
|
||||
}
|
||||
|
||||
/* 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
|
||||
* appearsq.
|
||||
|
12
style.c
12
style.c
@ -32,6 +32,7 @@
|
||||
static struct style style_default = {
|
||||
{ 0, 0, 8, 8, 0, { { ' ' }, 0, 1, 1 } },
|
||||
|
||||
8,
|
||||
STYLE_ALIGN_DEFAULT,
|
||||
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;
|
||||
else
|
||||
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) {
|
||||
if ((value = colour_fromstring(tmp + 3)) == -1)
|
||||
goto error;
|
||||
@ -213,6 +218,11 @@ style_tostring(struct style *sy)
|
||||
tmp);
|
||||
comma = ",";
|
||||
}
|
||||
if (sy->fill != 8) {
|
||||
off += xsnprintf(s + off, sizeof s - off, "%sfill=%s", comma,
|
||||
colour_tostring(sy->fill));
|
||||
comma = ",";
|
||||
}
|
||||
if (gc->fg != 8) {
|
||||
off += xsnprintf(s + off, sizeof s - off, "%sfg=%s", comma,
|
||||
colour_tostring(gc->fg));
|
||||
@ -290,6 +300,8 @@ style_equal(struct style *sy1, struct style *sy2)
|
||||
return (0);
|
||||
if ((gc1->attr & STYLE_ATTR_MASK) != (gc2->attr & STYLE_ATTR_MASK))
|
||||
return (0);
|
||||
if (sy1->fill != sy2->fill)
|
||||
return (0);
|
||||
if (sy1->align != sy2->align)
|
||||
return (0);
|
||||
return (1);
|
||||
|
3
tmux.1
3
tmux.1
@ -4337,6 +4337,9 @@ to unset.
|
||||
.Ic align=right
|
||||
.Xc
|
||||
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 ,
|
||||
.Ic list=focus ,
|
||||
.Ic list=left-marker ,
|
||||
|
Loading…
Reference in New Issue
Block a user