aboutsummaryrefslogtreecommitdiff
path: root/ui-curses.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-10-27 11:06:20 +0100
committerMarc André Tanner <mat@brain-dump.org>2015-10-27 11:13:08 +0100
commit8b57764364fab4610e2e25f9c2005c8553f81053 (patch)
tree2f34080aa3b216dd2d7aacee93dc1e6dbbcaba3e /ui-curses.c
parent40370460029d2f3598b578c79f3d08e8921fded3 (diff)
downloadvis-8b57764364fab4610e2e25f9c2005c8553f81053.tar.gz
vis-8b57764364fab4610e2e25f9c2005c8553f81053.tar.xz
ui: properly restore terminal state upon exit
Diffstat (limited to 'ui-curses.c')
-rw-r--r--ui-curses.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/ui-curses.c b/ui-curses.c
index 3bc7c2b..eb6acff 100644
--- a/ui-curses.c
+++ b/ui-curses.c
@@ -853,7 +853,10 @@ static UiWin *ui_window_new(Ui *ui, View *view, File *file) {
}
static void ui_die(Ui *ui, const char *msg, va_list ap) {
+ UiCurses *uic = (UiCurses*)ui;
endwin();
+ if (uic->termkey)
+ termkey_stop(uic->termkey);
vfprintf(stderr, msg, ap);
exit(EXIT_FAILURE);
}
@@ -972,17 +975,17 @@ static const char *ui_getkey(Ui *ui) {
static void ui_terminal_save(Ui *ui) {
UiCurses *uic = (UiCurses*)ui;
- termkey_stop(uic->termkey);
curs_set(1);
reset_shell_mode();
+ termkey_stop(uic->termkey);
}
static void ui_terminal_restore(Ui *ui) {
UiCurses *uic = (UiCurses*)ui;
+ termkey_start(uic->termkey);
reset_prog_mode();
wclear(stdscr);
curs_set(0);
- termkey_start(uic->termkey);
}
Ui *ui_curses_new(void) {