From c5fdc13ea4cf8c213008d0b17534d927aa42623d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 5 Jul 2019 09:09:28 +0200 Subject: [PATCH] term_erase(): erased cells get the currently selected background color --- terminal.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/terminal.c b/terminal.c index 4de5a1a8..a4466d90 100644 --- a/terminal.c +++ b/terminal.c @@ -161,8 +161,30 @@ term_erase(struct terminal *term, int start, int end) assert(end >= start); assert(end <= term->rows * term->cols); - grid_memset(term->grid, start, 0, end - start); - term_damage_erase(term, start, end - start); + if (term->vt.attrs.have_background) { + int erase_start = start; + int left = end - erase_start; + + while (left > 0) { + int len = left; + struct cell *cells = grid_get_range(term->grid, erase_start, &len); + + memset(cells, 0, len * sizeof(cells[0])); + + for (int i = 0; i < len; i++) { + cells[i].attrs.background = term->vt.attrs.background; + cells[i].attrs.have_background = true; + } + + erase_start += len; + left -= len; + } + + term_damage_update(term, start, end - start); + } else { + grid_memset(term->grid, start, 0, end - start); + term_damage_erase(term, start, end - start); + } } int