osc: set color: update both grids, but exclude scrollback

This commit is contained in:
Daniel Eklöf 2020-06-14 09:34:46 +02:00
parent 70c48091f3
commit c94cbdeb64
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 24 additions and 20 deletions

View file

@ -30,8 +30,8 @@
double forked. double forked.
* Unicode combining character overflow errors are only logged when * Unicode combining character overflow errors are only logged when
debug logging has been enabled. debug logging has been enabled.
* OSC 4 (_Set Color_) now updates already rendered cells in the * OSC 4 (_Set Color_) now updates already rendered cells, excluding
**current** grid (_normal_ or _alternate_). scrollback.
### Deprecated ### Deprecated

18
osc.c
View file

@ -9,6 +9,7 @@
#define LOG_ENABLE_DBG 0 #define LOG_ENABLE_DBG 0
#include "log.h" #include "log.h"
#include "base64.h" #include "base64.h"
#include "grid.h"
#include "render.h" #include "render.h"
#include "selection.h" #include "selection.h"
#include "terminal.h" #include "terminal.h"
@ -491,14 +492,16 @@ osc_dispatch(struct terminal *term)
* hope that it is unusual with palettes where all the * hope that it is unusual with palettes where all the
* colors aren't unique. * colors aren't unique.
* *
* TODO: we should update *both* grids... but that's * TODO(?): for performance reasons, we only update
* really really slow. Normal usage of this OSC is by * the current screen rows (of both
* full-screen applications using the alt screen. * grids). I.e. scrollback is *not* updates.
*/ */
for (size_t r = 0; r < term->grid->num_rows; r++) { for (size_t i = 0; i < 2; i++) {
struct row *row = term->grid->rows[r]; struct grid *grid = i == 0 ? &term->normal : &term->alt;
if (row == NULL)
continue; for (size_t r = 0; r < term->rows; r++) {
struct row *row = grid_row(grid, r);
assert(row != NULL);
for (size_t c = 0; c < term->grid->num_cols; c++) { for (size_t c = 0; c < term->grid->num_cols; c++) {
struct cell *cell = &row->cells[c]; struct cell *cell = &row->cells[c];
@ -515,6 +518,7 @@ osc_dispatch(struct terminal *term)
} }
} }
} }
}
term->colors.table[idx] = color; term->colors.table[idx] = color;
} }