diff --git a/CHANGELOG.md b/CHANGELOG.md index 0700e018..3a310289 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/render.c b/render.c index 26ca92d3..d8a26060 100644 --- a/render.c +++ b/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: