From 08eb0532ad3aba6ddfecfdef970788e1837f34b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 22 Jan 2020 18:22:15 +0100 Subject: [PATCH] terminal: regression: char printed to wrong column When term_print() was implemented, it introduced a regression where printing a character when the last cursor was in the last column on a line would print the character in the wrong column. This is because term_print() retrieved a pointer to the current cell *before* line wrapping (and possibly inserting empty cells). --- terminal.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/terminal.c b/terminal.c index 63e4266e..e7d68d1e 100644 --- a/terminal.c +++ b/terminal.c @@ -1894,12 +1894,13 @@ term_print(struct terminal *term, wchar_t wc, int width) if (unlikely(width <= 0)) return; - struct row *row = term->grid->cur_row; - struct cell *cell = &row->cells[term->cursor.point.col]; - print_linewrap(term); print_insert(term, width); + /* *Must* get current cell *after* linewrap+insert */ + struct row *row = term->grid->cur_row; + struct cell *cell = &row->cells[term->cursor.point.col]; + cell->wc = term->vt.last_printed = wc; cell->attrs = term->vt.attrs;