term: track cell color source

Each cell now tracks it’s current color source:

* default fg/bg
* base16 fg/bg (maps to *both* the regular and bright colors)
* base256 fg/bg
* RGB

Note that we don’t have enough bits to separate the regular from the
bright colors. These _shouldn’t_ be the same, so we ought to be
fine...
This commit is contained in:
Daniel Eklöf 2021-11-20 16:29:57 +01:00
parent 37b82efa77
commit d46af6bd7a
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
6 changed files with 34 additions and 26 deletions

6
osc.c
View file

@ -503,7 +503,7 @@ osc_notify(struct terminal *term, char *string)
* (https://pub.phyks.me/scripts/urxvt/notify) is very simple:
*
* #!/usr/bin/perl
*
*
* sub on_osc_seq_perl {
* my ($term, $osc, $resp) = @_;
* if ($osc =~ /^notify;(\S+);(.*)$/) {
@ -560,7 +560,7 @@ update_color_in_grids(struct terminal *term, uint32_t old_color,
for (size_t c = 0; c < term->grid->num_cols; c++) {
struct cell *cell = &row->cells[c];
if (cell->attrs.have_fg &&
if (cell->attrs.fg_src != COLOR_DEFAULT &&
cell->attrs.fg == old_color)
{
cell->attrs.fg = new_color;
@ -568,7 +568,7 @@ update_color_in_grids(struct terminal *term, uint32_t old_color,
row->dirty = true;
}
if ( cell->attrs.have_bg &&
if (cell->attrs.bg_src != COLOR_DEFAULT &&
cell->attrs.bg == old_color)
{
cell->attrs.bg = new_color;