grid: reflow: fix cursor reflow when LCF is set

When the cursor is at the end of the line, with a pending wrap (LCF
set), the lcf flag should be cleared *and* the cursor moved one cell
to the right.

Before this patch, we cleared LCF, but didn't move the cursor.

Closes #1954
This commit is contained in:
Daniel Eklöf 2025-02-13 08:00:50 +01:00
parent 888a6770da
commit d7a4f9e99e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 17 additions and 3 deletions

17
grid.c
View file

@ -1211,15 +1211,26 @@ grid_resize_and_reflow(
saved_cursor.row = min(saved_cursor.row, new_screen_rows - 1);
saved_cursor.col = min(saved_cursor.col, new_cols - 1);
if (grid->cursor.lcf) {
if (cursor.col + 1 < new_cols) {
cursor.col++;
grid->cursor.lcf = false;
}
}
if (grid->saved_cursor.lcf) {
if (saved_cursor.col + 1 < new_cols) {
saved_cursor.col++;
grid->saved_cursor.lcf = false;
}
}
grid->cur_row = new_grid[(grid->offset + cursor.row) & (new_rows - 1)];
xassert(grid->cur_row != NULL);
grid->cursor.point = cursor;
grid->saved_cursor.point = saved_cursor;
grid->cursor.lcf = false;
grid->saved_cursor.lcf = false;
/* Free sixels we failed to "map" to the new grid */
tll_foreach(untranslated_sixels, it)
sixel_destroy(&it->item);