mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
render: resize: update saved 'normal' cursor if we're in alt screen
When resizing in alt mode, we never updated the saved 'normal' cursor. This meant that when we exited alt mode, the cursor would be positioned where it was in the old pre-resize/reflow grid. Now, we update the saved cursor in the same way we update visible cursor. The result is that when we exit the alt screen, the cursor is restored to the same coordinates it would have been updated to had the resize been done in the 'normal' screen.
This commit is contained in:
parent
f7572d4ab1
commit
48091966cb
2 changed files with 15 additions and 0 deletions
|
|
@ -31,6 +31,8 @@
|
|||
* Sixel images moved or deleted on window resize.
|
||||
* Cursor sometimes incorrectly restored on exit from alternate screen.
|
||||
* 'Underline' cursor being invisible on underlined text.
|
||||
* Restored cursor position in 'normal' screen when window was resized
|
||||
while in 'alt' screen.
|
||||
|
||||
|
||||
### Security
|
||||
|
|
|
|||
13
render.c
13
render.c
|
|
@ -1645,6 +1645,19 @@ maybe_resize(struct terminal *term, int width, int height, bool force)
|
|||
cursor_row,
|
||||
min(term->cursor.point.col, term->cols - 1));
|
||||
|
||||
/* If in alt screen, update the saved 'normal' cursor too */
|
||||
if (term->grid == &term->alt) {
|
||||
int cursor_row = last_normal_row - term->normal.offset;
|
||||
|
||||
while (cursor_row < 0)
|
||||
cursor_row += term->grid->num_rows;
|
||||
|
||||
term->alt_saved_cursor.lcf = false;
|
||||
term->alt_saved_cursor.point.row = cursor_row;
|
||||
term->alt_saved_cursor.point.col = min(
|
||||
term->alt_saved_cursor.point.col, term->cols - 1);
|
||||
}
|
||||
|
||||
term->render.last_cursor.cell = NULL;
|
||||
|
||||
damage_view:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue