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:
Daniel Eklöf 2020-03-16 12:00:25 +01:00
parent 6eeea06cc0
commit 1006608093
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 11 additions and 10 deletions

6
csi.c
View file

@ -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);