aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglacambre <code@lacamb.re>2019-04-19 07:49:05 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2019-04-20 10:41:46 +0200
commitb3fd83a0eae2d6353dc72ed62ba32949cc11a1b0 (patch)
tree7e2ddcbe1a4776fdea7ee4e0abb17fd930c6d1fe
parent773bdd41ec19c9909e979c4580cf098d71d168d7 (diff)
downloadrneovim-b3fd83a0eae2d6353dc72ed62ba32949cc11a1b0.tar.gz
rneovim-b3fd83a0eae2d6353dc72ed62ba32949cc11a1b0.tar.bz2
rneovim-b3fd83a0eae2d6353dc72ed62ba32949cc11a1b0.zip
Reset stop_insert_mode in terminal_enter rather than terminal_check
Problem: Using `:stopinsert` while in normal mode in a terminal buffer prevents neovim from entering insert mode. Solution: Move `stop_insert_mode = false` from terminal_check to terminal_enter to be consistent with edit.c, as suggested by bfredl in #9889. Closes https://github.com/neovim/neovim/issues/9889.
-rw-r--r--src/nvim/terminal.c2
-rw-r--r--test/functional/terminal/ex_terminal_spec.lua9
2 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 79b0df842f..a802a1ffc6 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -374,6 +374,7 @@ void terminal_enter(void)
TerminalState state, *s = &state;
memset(s, 0, sizeof(TerminalState));
s->term = buf->terminal;
+ stop_insert_mode = false;
// Ensure the terminal is properly sized. Ideally window size management
// code should always have resized the terminal already, but check here to
@@ -435,7 +436,6 @@ void terminal_enter(void)
static int terminal_check(VimState *state)
{
if (stop_insert_mode) {
- stop_insert_mode = false;
return 0;
}
return 1;
diff --git a/test/functional/terminal/ex_terminal_spec.lua b/test/functional/terminal/ex_terminal_spec.lua
index ca5737db7f..f3849709e3 100644
--- a/test/functional/terminal/ex_terminal_spec.lua
+++ b/test/functional/terminal/ex_terminal_spec.lua
@@ -106,6 +106,15 @@ describe(':terminal', function()
command('stopinsert')
eq({ blocking=false, mode='n' }, nvim('get_mode'))
end)
+
+ it(':stopinsert in normal mode doesn\'t break insert mode #9889', function()
+ command(':terminal')
+ eq({ blocking=false, mode='n' }, nvim('get_mode'))
+ command(':stopinsert')
+ eq({ blocking=false, mode='n' }, nvim('get_mode'))
+ feed('a')
+ eq({ blocking=false, mode='t' }, nvim('get_mode'))
+ end)
end)
describe(':terminal (with fake shell)', function()