diff --git a/kitty/data-types.h b/kitty/data-types.h index 3efe1e8b4..579a9df03 100644 --- a/kitty/data-types.h +++ b/kitty/data-types.h @@ -256,9 +256,7 @@ typedef struct { uint32_t utf8_state, *g0_charset, *g1_charset, *g_charset; bool use_latin1; Cursor cursor; - bool mDECOM; - bool mDECAWM; - bool mDECSCNM; + bool mDECOM, mDECAWM, mDECSCNM, mDECTCEM; } Savepoint; diff --git a/kitty/screen.c b/kitty/screen.c index 2386239e7..de6729ca4 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -348,7 +348,8 @@ END_ALLOW_CASE_RANGE // Modes {{{ -void screen_toggle_screen_buffer(Screen *self) { +void +screen_toggle_screen_buffer(Screen *self) { screen_save_cursor(self); if (self->linebuf == self->main_linebuf) { linebuf_clear(self->alt_linebuf, ' '); @@ -637,6 +638,7 @@ screen_save_cursor(Screen *self) { sp->mDECOM = self->modes.mDECOM; sp->mDECAWM = self->modes.mDECAWM; sp->mDECSCNM = self->modes.mDECSCNM; + sp->mDECTCEM = self->modes.mDECTCEM; COPY_CHARSETS(self, sp); } @@ -650,11 +652,13 @@ screen_restore_cursor(Screen *self) { screen_reset_mode(self, DECOM); RESET_CHARSETS; screen_reset_mode(self, DECSCNM); + screen_set_mode(self, DECTCEM); } else { COPY_CHARSETS(sp, self); set_mode_from_const(self, DECOM, sp->mDECOM); set_mode_from_const(self, DECAWM, sp->mDECAWM); set_mode_from_const(self, DECSCNM, sp->mDECSCNM); + set_mode_from_const(self, DECTCEM, sp->mDECTCEM); cursor_copy_to(&(sp->cursor), self->cursor); screen_ensure_bounds(self, false); }