csi: save and restore cursor when switching to and from alt screen

This commit is contained in:
Daniel Eklöf 2019-06-23 15:03:06 +02:00
parent 199e4aa044
commit de7dcf1a5c
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 10 additions and 2 deletions

8
csi.c
View file

@ -423,7 +423,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
if (term->grid.cells != term->grid.alt_grid) {
term->grid.cells = term->grid.alt_grid;
/* TODO: save cursor position */
term->grid.alt_saved_cursor.row = term->grid.cursor.row;
term->grid.alt_saved_cursor.col = term->grid.cursor.col;
tll_free(term->grid.damage);
grid_erase(&term->grid, 0, term->grid.cols * term->grid.rows);
@ -455,7 +456,10 @@ csi_dispatch(struct terminal *term, uint8_t final)
if (term->grid.cells == term->grid.alt_grid) {
term->grid.cells = term->grid.normal_grid;
/* TODO: restore cursor position */
term->grid.cursor.row = term->grid.alt_saved_cursor.row;
term->grid.cursor.col = term->grid.alt_saved_cursor.col;
term->grid.linear_cursor = grid_cursor_linear(
&term->grid, term->grid.cursor.row, term->grid.cursor.col);
tll_free(term->grid.damage);
grid_damage_update(

View file

@ -63,6 +63,10 @@ struct grid {
struct cell *cells;
struct cell *normal_grid;
struct cell *alt_grid;
struct {
int row;
int col;
} alt_saved_cursor;
uint32_t foreground;
uint32_t background;