aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrian m. carlson <sandals@crustytoothpaste.net>2022-01-08 02:13:11 +0000
committerbrian m. carlson <sandals@crustytoothpaste.net>2022-01-08 03:11:50 +0000
commit600e7e3b32345d71842b6b167359f4f72093e9b0 (patch)
tree3e7e1d855c6f1fa85c304b8593a5cf8ae9f43776
parentb4fbb9dcf2752d95b9be335d99b0c55efb5f17de (diff)
downloadrneovim-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.c2
-rw-r--r--test/functional/core/startup_spec.lua17
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' }))