mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 13:37:12 +00:00
Add support for the OSC 4 and OSC 104 palette setting escape sequences,
from S Gilles.
This commit is contained in:
36
tty.c
36
tty.c
@ -48,8 +48,10 @@ static void tty_cursor_pane(struct tty *, const struct tty_ctx *, u_int,
|
||||
u_int);
|
||||
|
||||
static void tty_colours(struct tty *, const struct grid_cell *);
|
||||
static void tty_check_fg(struct tty *, struct grid_cell *);
|
||||
static void tty_check_bg(struct tty *, struct grid_cell *);
|
||||
static void tty_check_fg(struct tty *, const struct window_pane *,
|
||||
struct grid_cell *);
|
||||
static void tty_check_bg(struct tty *, const struct window_pane *,
|
||||
struct grid_cell *);
|
||||
static void tty_colours_fg(struct tty *, const struct grid_cell *);
|
||||
static void tty_colours_bg(struct tty *, const struct grid_cell *);
|
||||
|
||||
@ -1507,8 +1509,8 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc,
|
||||
}
|
||||
|
||||
/* Fix up the colours if necessary. */
|
||||
tty_check_fg(tty, &gc2);
|
||||
tty_check_bg(tty, &gc2);
|
||||
tty_check_fg(tty, wp, &gc2);
|
||||
tty_check_bg(tty, wp, &gc2);
|
||||
|
||||
/* If any bits are being cleared, reset everything. */
|
||||
if (tc->attr & ~gc2.attr)
|
||||
@ -1604,12 +1606,18 @@ tty_colours(struct tty *tty, const struct grid_cell *gc)
|
||||
tty_colours_bg(tty, gc);
|
||||
}
|
||||
|
||||
void
|
||||
tty_check_fg(struct tty *tty, struct grid_cell *gc)
|
||||
static void
|
||||
tty_check_fg(struct tty *tty, const struct window_pane *wp,
|
||||
struct grid_cell *gc)
|
||||
{
|
||||
u_char r, g, b;
|
||||
u_int colours;
|
||||
|
||||
/* Perform substitution if this pane has a palette */
|
||||
if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
|
||||
gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
|
||||
gc->fg = wp->palette[gc->fg & 0xff];
|
||||
|
||||
/* Is this a 24-bit colour? */
|
||||
if (gc->fg & COLOUR_FLAG_RGB) {
|
||||
/* Not a 24-bit terminal? Translate to 256-colour palette. */
|
||||
@ -1646,12 +1654,18 @@ tty_check_fg(struct tty *tty, struct grid_cell *gc)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
tty_check_bg(struct tty *tty, struct grid_cell *gc)
|
||||
static void
|
||||
tty_check_bg(struct tty *tty, const struct window_pane *wp,
|
||||
struct grid_cell *gc)
|
||||
{
|
||||
u_char r, g, b;
|
||||
u_int colours;
|
||||
|
||||
/* Perform substitution if this pane has a palette */
|
||||
if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
|
||||
gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
|
||||
gc->bg = wp->palette[gc->bg & 0xff];
|
||||
|
||||
/* Is this a 24-bit colour? */
|
||||
if (gc->bg & COLOUR_FLAG_RGB) {
|
||||
/* Not a 24-bit terminal? Translate to 256-colour palette. */
|
||||
@ -1826,6 +1840,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
|
||||
gc->fg = agc->fg;
|
||||
else
|
||||
gc->fg = wgc->fg;
|
||||
|
||||
if (gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
|
||||
gc->fg = wp->palette[gc->fg & 0xff];
|
||||
}
|
||||
|
||||
if (gc->bg == 8) {
|
||||
@ -1835,6 +1852,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
|
||||
gc->bg = agc->bg;
|
||||
else
|
||||
gc->bg = wgc->bg;
|
||||
|
||||
if (gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
|
||||
gc->bg = wp->palette[gc->bg & 0xff];
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user