mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-27 13:15:17 +02:00
Support for RGB colour, using the extended cell mechanism to avoid
wasting unnecessary space. The 'Tc' flag must be set in the external TERM entry (using terminal-overrides or a custom terminfo entry), if not tmux will map to the closest of the 256 or 16 colour palettes. Mostly from Suraj N Kurapati, based on a diff originally by someone else.
This commit is contained in:
35
input.c
35
input.c
@@ -1629,18 +1629,20 @@ input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i)
|
||||
c = input_get(ictx, *i, 0, -1);
|
||||
if (c == -1) {
|
||||
if (fgbg == 38) {
|
||||
gc->flags &= ~GRID_FLAG_FG256;
|
||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
||||
gc->fg = 8;
|
||||
} else if (fgbg == 48) {
|
||||
gc->flags &= ~GRID_FLAG_BG256;
|
||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
||||
gc->bg = 8;
|
||||
}
|
||||
} else {
|
||||
if (fgbg == 38) {
|
||||
gc->flags |= GRID_FLAG_FG256;
|
||||
gc->flags &= ~GRID_FLAG_FGRGB;
|
||||
gc->fg = c;
|
||||
} else if (fgbg == 48) {
|
||||
gc->flags |= GRID_FLAG_BG256;
|
||||
gc->flags &= ~GRID_FLAG_BGRGB;
|
||||
gc->bg = c;
|
||||
}
|
||||
}
|
||||
@@ -1651,7 +1653,7 @@ void
|
||||
input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i)
|
||||
{
|
||||
struct grid_cell *gc = &ictx->cell.cell;
|
||||
int c, r, g, b;
|
||||
int r, g, b;
|
||||
|
||||
(*i)++;
|
||||
r = input_get(ictx, *i, 0, -1);
|
||||
@@ -1666,13 +1668,18 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i)
|
||||
if (b == -1 || b > 255)
|
||||
return;
|
||||
|
||||
c = colour_find_rgb(r, g, b);
|
||||
if (fgbg == 38) {
|
||||
gc->flags |= GRID_FLAG_FG256;
|
||||
gc->fg = c;
|
||||
gc->flags &= ~GRID_FLAG_FG256;
|
||||
gc->flags |= GRID_FLAG_FGRGB;
|
||||
gc->fg_rgb.r = r;
|
||||
gc->fg_rgb.g = g;
|
||||
gc->fg_rgb.b = b;
|
||||
} else if (fgbg == 48) {
|
||||
gc->flags |= GRID_FLAG_BG256;
|
||||
gc->bg = c;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1754,11 +1761,11 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
||||
case 35:
|
||||
case 36:
|
||||
case 37:
|
||||
gc->flags &= ~GRID_FLAG_FG256;
|
||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
||||
gc->fg = n - 30;
|
||||
break;
|
||||
case 39:
|
||||
gc->flags &= ~GRID_FLAG_FG256;
|
||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
||||
gc->fg = 8;
|
||||
break;
|
||||
case 40:
|
||||
@@ -1769,11 +1776,11 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
||||
case 45:
|
||||
case 46:
|
||||
case 47:
|
||||
gc->flags &= ~GRID_FLAG_BG256;
|
||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
||||
gc->bg = n - 40;
|
||||
break;
|
||||
case 49:
|
||||
gc->flags &= ~GRID_FLAG_BG256;
|
||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
||||
gc->bg = 8;
|
||||
break;
|
||||
case 90:
|
||||
@@ -1784,7 +1791,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
||||
case 95:
|
||||
case 96:
|
||||
case 97:
|
||||
gc->flags &= ~GRID_FLAG_FG256;
|
||||
gc->flags &= ~(GRID_FLAG_FG256|GRID_FLAG_FGRGB);
|
||||
gc->fg = n;
|
||||
break;
|
||||
case 100:
|
||||
@@ -1795,7 +1802,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
|
||||
case 105:
|
||||
case 106:
|
||||
case 107:
|
||||
gc->flags &= ~GRID_FLAG_BG256;
|
||||
gc->flags &= ~(GRID_FLAG_BG256|GRID_FLAG_BGRGB);
|
||||
gc->bg = n - 10;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user