aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui-curses.c11
-rw-r--r--ui.h2
-rw-r--r--vis.c5
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;
diff --git a/ui.h b/ui.h
index 40e2ea7..18c9e0f 100644
--- a/ui.h
+++ b/ui.h
@@ -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 {
diff --git a/vis.c b/vis.c
index f4f712a..38cd0dd 100644
--- a/vis.c
+++ b/vis.c
@@ -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;
}