From a9c2a093fceec3a09eaffe29db157802af47dc59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 30 Sep 2014 16:26:55 +0200 Subject: Allow to supend the editor via CTRL-Z --- config.def.h | 1 + vis.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/config.def.h b/config.def.h index ab44ddd..cc2a076 100644 --- a/config.def.h +++ b/config.def.h @@ -93,6 +93,7 @@ static bool vis_keypress(Key *key) { } static KeyBinding basic_movement[] = { + { { CONTROL('Z') }, suspend, { NULL } }, { { KEY(LEFT) }, movement, { .i = MOVE_CHAR_PREV } }, { { KEY(SLEFT) }, movement, { .i = MOVE_LONGWORD_START_PREV } }, { { KEY(RIGHT) }, movement, { .i = MOVE_CHAR_NEXT } }, diff --git a/vis.c b/vis.c index e6c670e..7b93eae 100644 --- a/vis.c +++ b/vis.c @@ -372,6 +372,8 @@ static TextObject *moves_linewise[] = { }; /** functions to be called from keybindings */ +/* temporarily suspend the editor and return to the shell, type 'fg' to get back */ +static void suspend(const Arg *arg); /* switch to mode indicated by arg->i */ static void switchmode(const Arg *arg); /* set mark indicated by arg->i to current cursor position */ @@ -768,6 +770,11 @@ static size_t window_lines_bottom(const Arg *arg) { /** key bindings functions of type: void (*func)(const Arg*) */ +static void suspend(const Arg *arg) { + endwin(); + raise(SIGSTOP); +} + static void repeat(const Arg *arg) { action = action_prev; action_do(&action); @@ -1512,6 +1519,7 @@ static void setup() { sigemptyset(&sa.sa_mask); sa.sa_handler = sigwinch_handler; sigaction(SIGWINCH, &sa, NULL); + sigaction(SIGCONT, &sa, NULL); } static bool keymatch(Key *key0, Key *key1) { -- cgit v1.2.3