From b3a84ba71b021b484e0ddc023480eb6d9f885991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 26 Dec 2021 16:05:18 +0100 Subject: [PATCH] term: modify term_fill() to optionally reset the SGR attributes --- csi.c | 2 +- terminal.c | 9 +++++++-- terminal.h | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/csi.c b/csi.c index ac03825e..558c2dc2 100644 --- a/csi.c +++ b/csi.c @@ -1942,7 +1942,7 @@ csi_dispatch(struct terminal *term, uint8_t final) term, top, left, bottom - top + 1, right - left + 1); for (int r = top; r <= bottom; r++) - term_fill(term, r, left, c, right - left + 1); + term_fill(term, r, left, c, right - left + 1, true); } break; } diff --git a/terminal.c b/terminal.c index 8abe61e8..d826282b 100644 --- a/terminal.c +++ b/terminal.c @@ -3511,17 +3511,22 @@ print_spacer(struct terminal *term, int col, int remaining) * - double width characters not supported */ void -term_fill(struct terminal *term, int r, int c, char data, size_t count) +term_fill(struct terminal *term, int r, int c, char data, size_t count, + bool use_sgr_attrs) { struct row *row = grid_row(term->grid, r); row->dirty = true; xassert(c + count <= term->cols); + const struct attributes attrs = use_sgr_attrs + ? term->vt.attrs + : (struct attributes){0}; + const struct cell *last = &row->cells[c + count]; for (struct cell *cell = &row->cells[c]; cell < last; cell++) { cell->wc = data; - cell->attrs = term->vt.attrs; + cell->attrs = attrs; if (unlikely(term->vt.osc8.uri != NULL)) { grid_row_uri_range_put(row, c, term->vt.osc8.uri, term->vt.osc8.id); diff --git a/terminal.h b/terminal.h index f56ffdb0..c8a43c64 100644 --- a/terminal.h +++ b/terminal.h @@ -798,7 +798,8 @@ void term_cursor_down(struct terminal *term, int count); void term_cursor_blink_update(struct terminal *term); void term_print(struct terminal *term, char32_t wc, int width); -void term_fill(struct terminal *term, int row, int col, char c, size_t count); +void term_fill(struct terminal *term, int row, int col, char c, size_t count, + bool use_sgr_attrs); void term_scroll(struct terminal *term, int rows); void term_scroll_reverse(struct terminal *term, int rows);