From de7dcf1a5c89bc296e5b96931cd0523b3b28c411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 23 Jun 2019 15:03:06 +0200 Subject: [PATCH] csi: save and restore cursor when switching to and from alt screen --- csi.c | 8 ++++++-- terminal.h | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/csi.c b/csi.c index 87886e66..b82b5c3b 100644 --- a/csi.c +++ b/csi.c @@ -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( diff --git a/terminal.h b/terminal.h index ac5a50e4..28bfca17 100644 --- a/terminal.h +++ b/terminal.h @@ -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;