diff options
author | brian m. carlson <sandals@crustytoothpaste.net> | 2022-01-08 02:13:11 +0000 |
---|---|---|
committer | brian m. carlson <sandals@crustytoothpaste.net> | 2022-01-08 03:11:50 +0000 |
commit | 600e7e3b32345d71842b6b167359f4f72093e9b0 (patch) | |
tree | 3e7e1d855c6f1fa85c304b8593a5cf8ae9f43776 | |
parent | b4fbb9dcf2752d95b9be335d99b0c55efb5f17de (diff) | |
download | rneovim-600e7e3b32345d71842b6b167359f4f72093e9b0.tar.gz rneovim-600e7e3b32345d71842b6b167359f4f72093e9b0.tar.bz2 rneovim-600e7e3b32345d71842b6b167359f4f72093e9b0.zip |
fix: make mode() return correct value in ex mode
When the user is in ex mode, a call to mode(1) is documented to return
"cv". However, it does not currently do so, because the check which
checks for ex mode is nested inside a conditional which is never reached
in ex mode. Vim uses an explicit check for exmode_active, so let's do
the same thing here. Add some tests for this case both with a TTY and
in silent mode.
-rw-r--r-- | src/nvim/state.c | 2 | ||||
-rw-r--r-- | test/functional/core/startup_spec.lua | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/nvim/state.c b/src/nvim/state.c index 68bc76660d..1fe8bb671d 100644 --- a/src/nvim/state.c +++ b/src/nvim/state.c @@ -180,7 +180,7 @@ char *get_mode(void) buf[1] = 'x'; } } - } else if (State & CMDLINE) { + } else if ((State & CMDLINE) || exmode_active) { buf[0] = 'c'; if (exmode_active) { buf[1] = 'v'; diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua index 4220d68ee1..ecec18346a 100644 --- a/test/functional/core/startup_spec.lua +++ b/test/functional/core/startup_spec.lua @@ -224,6 +224,23 @@ describe('startup', function() end end) + it('-e sets ex mode', function() + local screen = Screen.new(25, 3) + clear('-e') + screen:attach() + -- Verify we set the proper mode both before and after :vi. + feed("put =mode(1)<CR>vi<CR>:put =mode(1)<CR>") + screen:expect([[ + cv | + ^n | + :put =mode(1) | + ]]) + + eq('cv\n', + funcs.system({nvim_prog, '-n', '-es' }, + { 'put =mode(1)', 'print', '' })) + end) + it('fails on --embed with -es/-Es', function() matches('nvim[.exe]*: %-%-embed conflicts with %-es/%-Es', funcs.system({nvim_prog, '--embed', '-es' })) |