From d928b036dc2be8f043545c0d7e2a2b2285528aaa Mon Sep 17 00:00:00 2001 From: glacambre Date: Mon, 8 Apr 2019 01:13:43 +0200 Subject: :stopinsert should leave terminal-mode #9856 Problem: Calling :stopinsert from RPC while in terminal-mode does not go back to normal-mode. Solution: Implement a check() handler for state_enter(), adapted from insert_check(). Fix #7807 --- src/nvim/terminal.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/nvim/terminal.c') diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index 43beb684da..79b0df842f 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -403,6 +403,7 @@ void terminal_enter(void) redraw(false); s->state.execute = terminal_execute; + s->state.check = terminal_check; state_enter(&s->state); restart_edit = 0; @@ -427,6 +428,19 @@ void terminal_enter(void) } } +// Function executed before each iteration of terminal mode. +// Return: +// 1 if the iteration should continue normally +// 0 if the main loop must exit +static int terminal_check(VimState *state) +{ + if (stop_insert_mode) { + stop_insert_mode = false; + return 0; + } + return 1; +} + static int terminal_execute(VimState *state, int key) { TerminalState *s = (TerminalState *)state; -- cgit