mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-31 07:11:09 -04:00
alt-screen: use a custom 'saved' cursor when switching to alt screen
This fixes an issue where we failed to restore the cursor correctly when exiting from the alternate screen, if the client had sent escapes to save the cursor position while inside the alternate screen. This was because we used the *same* storage for saving the cursor position through escapes, as for saving it when entering the alternate screen. Fix by using a custom variable dedicated to normal <--> alt screen switching.
This commit is contained in:
parent
6eeea06cc0
commit
1006608093
5 changed files with 11 additions and 10 deletions
6
csi.c
6
csi.c
|
|
@ -761,7 +761,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
case 'u':
|
||||
term_restore_cursor(term);
|
||||
term_restore_cursor(term, &term->saved_cursor);
|
||||
break;
|
||||
|
||||
case 't': {
|
||||
|
|
@ -1014,7 +1014,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
selection_cancel(term);
|
||||
|
||||
term->grid = &term->alt;
|
||||
term->saved_cursor = term->cursor;
|
||||
term->alt_saved_cursor = term->cursor;
|
||||
|
||||
term_cursor_to(term, term->cursor.point.row, term->cursor.point.col);
|
||||
|
||||
|
|
@ -1137,7 +1137,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
selection_cancel(term);
|
||||
|
||||
term->grid = &term->normal;
|
||||
term_restore_cursor(term);
|
||||
term_restore_cursor(term, &term->alt_saved_cursor);
|
||||
|
||||
tll_free(term->alt.damage);
|
||||
tll_free(term->alt.scroll_damage);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue