diff --git a/terminal.c b/terminal.c index f11ddad6..25e1246e 100644 --- a/terminal.c +++ b/terminal.c @@ -169,6 +169,12 @@ term_cursor_to(struct terminal *term, int row, int col) term->cursor.linear = new_linear; term->cursor.col = col; term->cursor.row = row; + + size_t len = term->cols; + term->grid->cur_line = grid_get_range( + term->grid, term->cursor.linear - col, &len); + + assert(len == (size_t)term->cols); } void @@ -253,6 +259,12 @@ term_scroll_partial(struct terminal *term, struct scroll_region region, int rows max(0, region.end - rows) * term->cols, 0, rows * term->cols); term_damage_scroll(term, DAMAGE_SCROLL, region, rows); + + size_t len = term->cols; + term->grid->cur_line = grid_get_range( + term->grid, term->cursor.linear - term->cursor.col, &len); + + assert(len == (size_t)term->cols); } void diff --git a/terminal.h b/terminal.h index 4efaab9f..66f6bde0 100644 --- a/terminal.h +++ b/terminal.h @@ -66,6 +66,7 @@ struct grid { int offset; struct cell *cells; + struct cell *cur_line; tll(struct damage) damage; tll(struct damage) scroll_damage; diff --git a/vt.c b/vt.c index 5d04008b..f2d85d4b 100644 --- a/vt.c +++ b/vt.c @@ -678,11 +678,7 @@ action(struct terminal *term, enum action action, uint8_t c) term_cursor_to(term, term->cursor.row + 1, 0); } - size_t cell_count = 1; - struct cell *cell = grid_get_range( - term->grid, term->cursor.linear, &cell_count); - assert(cell_count == 1); - + struct cell *cell = &term->grid->cur_line[term->cursor.col]; term_damage_update(term, term->cursor.linear, 1); if (term->vt.utf8.idx > 0) {