=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/grid.c,v retrieving revision 1.52 retrieving revision 1.53 diff -c -r1.52 -r1.53 *** src/usr.bin/tmux/grid.c 2016/01/31 09:57:09 1.52 --- src/usr.bin/tmux/grid.c 2016/07/15 00:42:56 1.53 *************** *** 1,4 **** ! /* $OpenBSD: grid.c,v 1.52 2016/01/31 09:57:09 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: grid.c,v 1.53 2016/07/15 00:42:56 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott *************** *** 37,43 **** /* Default grid cell data. */ const struct grid_cell grid_default_cell = { ! 0, 0, { .fg = 8 }, { .bg = 8 }, { { ' ' }, 0, 1, 1 } }; const struct grid_cell_entry grid_default_entry = { 0, { .data = { 0, 8, 8, ' ' } } --- 37,43 ---- /* Default grid cell data. */ const struct grid_cell grid_default_cell = { ! 0, 0, 8, 8, { { ' ' }, 0, 1, 1 } }; const struct grid_cell_entry grid_default_entry = { 0, { .data = { 0, 8, 8, ' ' } } *************** *** 270,279 **** return; } ! gc->flags = gce->flags & ~GRID_FLAG_EXTENDED; gc->attr = gce->data.attr; gc->fg = gce->data.fg; gc->bg = gce->data.bg; utf8_set(&gc->data, gce->data.data); } --- 270,283 ---- return; } ! gc->flags = gce->flags & ~(GRID_FLAG_FG256|GRID_FLAG_BG256); gc->attr = gce->data.attr; gc->fg = gce->data.fg; + if (gce->flags & GRID_FLAG_FG256) + gc->fg |= COLOUR_FLAG_256; gc->bg = gce->data.bg; + if (gce->flags & GRID_FLAG_BG256) + gc->bg |= COLOUR_FLAG_256; utf8_set(&gc->data, gce->data.data); } *************** *** 297,303 **** extended = (gce->flags & GRID_FLAG_EXTENDED); if (!extended && (gc->data.size != 1 || gc->data.width != 1)) extended = 1; ! if (!extended && (gc->flags & (GRID_FLAG_FGRGB|GRID_FLAG_BGRGB))) extended = 1; if (extended) { if (~gce->flags & GRID_FLAG_EXTENDED) { --- 301,308 ---- extended = (gce->flags & GRID_FLAG_EXTENDED); if (!extended && (gc->data.size != 1 || gc->data.width != 1)) extended = 1; ! if (!extended && ((gc->fg & COLOUR_FLAG_RGB) || ! (gc->bg & COLOUR_FLAG_RGB))) extended = 1; if (extended) { if (~gce->flags & GRID_FLAG_EXTENDED) { *************** *** 314,323 **** return; } ! gce->flags = gc->flags & ~GRID_FLAG_EXTENDED; gce->data.attr = gc->attr; ! gce->data.fg = gc->fg; ! gce->data.bg = gc->bg; gce->data.data = gc->data.data[0]; } --- 319,332 ---- return; } ! gce->flags = gc->flags; gce->data.attr = gc->attr; ! gce->data.fg = gc->fg & 0xff; ! if (gc->fg & COLOUR_FLAG_256) ! gce->flags |= GRID_FLAG_FG256; ! gce->data.bg = gc->bg & 0xff; ! if (gc->bg & COLOUR_FLAG_256) ! gce->flags |= GRID_FLAG_BG256; gce->data.data = gc->data.data[0]; } *************** *** 446,463 **** grid_string_cells_fg(const struct grid_cell *gc, int *values) { size_t n; n = 0; ! if (gc->flags & GRID_FLAG_FG256) { values[n++] = 38; values[n++] = 5; ! values[n++] = gc->fg; ! } else if (gc->flags & GRID_FLAG_FGRGB) { values[n++] = 38; values[n++] = 2; ! values[n++] = gc->fg_rgb.r; ! values[n++] = gc->fg_rgb.g; ! values[n++] = gc->fg_rgb.b; } else { switch (gc->fg) { case 0: --- 455,474 ---- grid_string_cells_fg(const struct grid_cell *gc, int *values) { size_t n; + u_char r, g, b; n = 0; ! if (gc->fg & COLOUR_FLAG_256) { values[n++] = 38; values[n++] = 5; ! values[n++] = gc->fg & 0xff; ! } else if (gc->fg & COLOUR_FLAG_RGB) { values[n++] = 38; values[n++] = 2; ! colour_split_rgb(gc->fg, &r, &g, &b); ! values[n++] = r; ! values[n++] = g; ! values[n++] = b; } else { switch (gc->fg) { case 0: *************** *** 493,510 **** grid_string_cells_bg(const struct grid_cell *gc, int *values) { size_t n; n = 0; ! if (gc->flags & GRID_FLAG_BG256) { values[n++] = 48; values[n++] = 5; ! values[n++] = gc->bg; ! } else if (gc->flags & GRID_FLAG_BGRGB) { values[n++] = 48; values[n++] = 2; ! values[n++] = gc->bg_rgb.r; ! values[n++] = gc->bg_rgb.g; ! values[n++] = gc->bg_rgb.b; } else { switch (gc->bg) { case 0: --- 504,523 ---- grid_string_cells_bg(const struct grid_cell *gc, int *values) { size_t n; + u_char r, g, b; n = 0; ! if (gc->bg & COLOUR_FLAG_256) { values[n++] = 48; values[n++] = 5; ! values[n++] = gc->bg & 0xff; ! } else if (gc->bg & COLOUR_FLAG_RGB) { values[n++] = 48; values[n++] = 2; ! colour_split_rgb(gc->bg, &r, &g, &b); ! values[n++] = r; ! values[n++] = g; ! values[n++] = b; } else { switch (gc->bg) { case 0: *************** *** 525,531 **** case 102: case 103: case 104: ! case 105: case 106: case 107: values[n++] = gc->bg - 10; --- 538,544 ---- case 102: case 103: case 104: ! case 105: case 106: case 107: values[n++] = gc->bg - 10;