Add "us" to styles for underscore colour, GitHub issue 3589.

This commit is contained in:
nicm 2023-06-26 07:17:40 +00:00
parent 9e14c1f88d
commit ff8882a24f
3 changed files with 27 additions and 3 deletions

15
style.c
View File

@ -77,6 +77,7 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in)
if (strcasecmp(tmp, "default") == 0) { if (strcasecmp(tmp, "default") == 0) {
sy->gc.fg = base->fg; sy->gc.fg = base->fg;
sy->gc.bg = base->bg; sy->gc.bg = base->bg;
sy->gc.us = base->us;
sy->gc.attr = base->attr; sy->gc.attr = base->attr;
sy->gc.flags = base->flags; sy->gc.flags = base->flags;
} else if (strcasecmp(tmp, "ignore") == 0) } else if (strcasecmp(tmp, "ignore") == 0)
@ -162,6 +163,13 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in)
sy->gc.bg = base->bg; sy->gc.bg = base->bg;
} else } else
goto error; goto error;
} else if (end > 3 && strncasecmp(tmp, "us=", 3) == 0) {
if ((value = colour_fromstring(tmp + 3)) == -1)
goto error;
if (value != 8)
sy->gc.us = value;
else
sy->gc.us = base->us;
} else if (strcasecmp(tmp, "none") == 0) } else if (strcasecmp(tmp, "none") == 0)
sy->gc.attr = 0; sy->gc.attr = 0;
else if (end > 2 && strncasecmp(tmp, "no", 2) == 0) { else if (end > 2 && strncasecmp(tmp, "no", 2) == 0) {
@ -258,6 +266,11 @@ style_tostring(struct style *sy)
colour_tostring(gc->bg)); colour_tostring(gc->bg));
comma = ","; comma = ",";
} }
if (gc->us != 8) {
off += xsnprintf(s + off, sizeof s - off, "%sus=%s", comma,
colour_tostring(gc->us));
comma = ",";
}
if (gc->attr != 0) { if (gc->attr != 0) {
xsnprintf(s + off, sizeof s - off, "%s%s", comma, xsnprintf(s + off, sizeof s - off, "%s%s", comma,
attributes_tostring(gc->attr)); attributes_tostring(gc->attr));
@ -287,6 +300,8 @@ style_add(struct grid_cell *gc, struct options *oo, const char *name,
gc->fg = sy->gc.fg; gc->fg = sy->gc.fg;
if (sy->gc.bg != 8) if (sy->gc.bg != 8)
gc->bg = sy->gc.bg; gc->bg = sy->gc.bg;
if (sy->gc.us != 8)
gc->us = sy->gc.us;
gc->attr |= sy->gc.attr; gc->attr |= sy->gc.attr;
if (ft0 != NULL) if (ft0 != NULL)

2
tmux.1
View File

@ -5384,6 +5384,8 @@ for the terminal default colour; or a hexadecimal RGB string such as
.Ql #ffffff . .Ql #ffffff .
.It Ic bg=colour .It Ic bg=colour
Set the background colour. Set the background colour.
.It Ic us=colour
Set the underscore colour.
.It Ic none .It Ic none
Set no attributes (turn off any active attributes). Set no attributes (turn off any active attributes).
.It Xo Ic acs , .It Xo Ic acs ,

13
tty.c
View File

@ -483,6 +483,12 @@ tty_update_features(struct tty *tty)
if (tty->term->flags & TERM_VT100LIKE) if (tty->term->flags & TERM_VT100LIKE)
tty_puts(tty, "\033[?7727h"); tty_puts(tty, "\033[?7727h");
/*
* Features might have changed since the first draw during attach. For
* example, this happens when DA responses are received.
*/
server_redraw_client(c);
tty_invalidate(tty); tty_invalidate(tty);
} }
@ -2808,9 +2814,10 @@ tty_check_us(__unused struct tty *tty, struct colour_palette *palette,
gc->us = c; gc->us = c;
} }
/* Underscore colour is set as RGB so convert a 256 colour to RGB. */ /* Underscore colour is set as RGB so convert. */
if (gc->us & COLOUR_FLAG_256) gc->us = colour_force_rgb (gc->us);
gc->us = colour_256toRGB (gc->us); if (gc->us == -1)
gc->us = 8;
} }
static void static void