vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit f8b5120a101a88ef7def4cb1e2691803c7dda741 parent 535beaecbbc255ed9a9c06b24237d0f7ae1c6b57 Author: Marc André Tanner <mat@brain-dump.org> Date: Thu, 9 Jul 2015 15:10:15 +0200 ui: move terminal state handling code to ui specific file Diffstat:
| M | ui-curses.c | | | 11 | +++++++++++ |
| M | ui.h | | | 2 | ++ |
| M | vis.c | | | 5 | ++--- |
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git 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 @@ -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 @@ -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; }