diff options
| -rw-r--r-- | ui-curses.c | 11 | ||||
| -rw-r--r-- | ui.h | 2 | ||||
| -rw-r--r-- | vis.c | 5 |
3 files changed, 15 insertions, 3 deletions
diff --git a/ui-curses.c b/ui-curses.c index f2f6899..f333c1d 100644 --- a/ui-curses.c +++ b/ui-curses.c @@ -568,6 +568,15 @@ static Key ui_getkey(Ui *ui) { return key; } +static void ui_terminal_save(Ui *ui) { + reset_shell_mode(); +} + +static void ui_terminal_restore(Ui *ui) { + reset_prog_mode(); + wclear(stdscr); +} + Ui *ui_curses_new(void) { setlocale(LC_CTYPE, ""); if (!getenv("ESCDELAY")) @@ -613,6 +622,8 @@ Ui *ui_curses_new(void) { .color_get = color_get, .haskey = ui_haskey, .getkey = ui_getkey, + .terminal_save = ui_terminal_save, + .terminal_restore = ui_terminal_restore, }; struct sigaction sa; @@ -47,6 +47,8 @@ struct Ui { void (*resume)(Ui*); Key (*getkey)(Ui*); bool (*haskey)(Ui*); + void (*terminal_save)(Ui*); + void (*terminal_restore)(Ui*); }; struct UiWin { @@ -1744,7 +1744,7 @@ static bool cmd_filter(Filerange *range, enum CmdOpt opt, const char *argv[]) { return false; } - reset_shell_mode(); + vis->ui->terminal_save(vis->ui); pid_t pid = fork(); if (pid == -1) { @@ -1922,8 +1922,7 @@ static bool cmd_filter(Filerange *range, enum CmdOpt opt, const char *argv[]) { if (restore_signals) sigaction(SIGTERM, &oldsa, NULL); - reset_prog_mode(); - wclear(stdscr); + vis->ui->terminal_restore(vis->ui); return status == 0; } |
