diff options
-rw-r--r-- | runtime/doc/various.txt | 11 | ||||
-rw-r--r-- | src/nvim/message.c | 7 | ||||
-rw-r--r-- | test/functional/eval/input_spec.lua | 42 | ||||
-rw-r--r-- | test/functional/ex_cmds/swapfile_preserve_recover_spec.lua | 8 |
4 files changed, 58 insertions, 10 deletions
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index 5f40ccf2ec..d78dd90f18 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -517,14 +517,9 @@ m *+xim* X input method |xim| :silent! /^begin :if v:errmsg != "" : ... pattern was not found -< ":silent" will also avoid the hit-enter prompt. When - using this for an external command, this may cause the - screen to be messed up. Use |CTRL-L| to clean it up - then. - ":silent menu ..." defines a menu that will not echo a - Command-line command. The command will still produce - messages though. Use ":silent" in the command itself - to avoid that: ":silent menu .... :silent command". +< ":silent" also skips the hit-enter prompt. + Dialogs that prompt for user input (|confirm()|, + 'swapfile', …) are never silent. *:uns* *:unsilent* :uns[ilent] {command} Execute {command} not silently. Only makes a diff --git a/src/nvim/message.c b/src/nvim/message.c index 10f4905fb2..26fa8fc7f1 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -2825,7 +2825,6 @@ do_dialog ( Ex command */ ) { - int oldState; int retval = 0; char_u *hotkeys; int c; @@ -2838,7 +2837,10 @@ do_dialog ( } - oldState = State; + int save_msg_silent = msg_silent; + int oldState = State; + + msg_silent = 0; // If dialog prompts for input, user needs to see it! #8788 State = CONFIRM; setmouse(); @@ -2891,6 +2893,7 @@ do_dialog ( xfree(hotkeys); + msg_silent = save_msg_silent; State = oldState; setmouse(); --no_wait_return; diff --git a/test/functional/eval/input_spec.lua b/test/functional/eval/input_spec.lua index 8c65297ac6..e774b939f7 100644 --- a/test/functional/eval/input_spec.lua +++ b/test/functional/eval/input_spec.lua @@ -8,6 +8,7 @@ local clear = helpers.clear local source = helpers.source local command = helpers.command local exc_exec = helpers.exc_exec +local nvim_async = helpers.nvim_async local screen @@ -59,6 +60,7 @@ before_each(function() RBP3={background=Screen.colors.Green}, RBP4={background=Screen.colors.Blue}, SEP={bold = true, reverse = true}, + CONFIRM={bold = true, foreground = Screen.colors.SeaGreen4}, }) end) @@ -439,3 +441,43 @@ describe('inputdialog()', function() ]]) end) end) + +describe('confirm()', function() + it("shows dialog even if :silent #8788", function() + command("autocmd BufNewFile * call confirm('test')") + + local function check_and_clear(edit_line) + screen:expect([[ + | + {SEP: }| + ]]..edit_line..[[ + {CONFIRM:test} | + {CONFIRM:[O]k: }^ | + ]]) + feed('<cr>') + command('redraw') + command('bdelete!') + end + + -- With shortmess-=F + command('set shortmess-=F') + feed(':edit foo<cr>') + check_and_clear('"foo" [New File] |\n') + + -- With shortmess+=F + command('set shortmess+=F') + feed(':edit foo<cr>') + check_and_clear(':edit foo |\n') + + -- With :silent + feed(':silent edit foo<cr>') + check_and_clear(':silent edit foo |\n') + + -- With API (via eval/VimL) call and shortmess+=F + feed(':call nvim_command("edit x")<cr>') + check_and_clear(':call nvim_command("edit |\n') + + nvim_async('command', 'edit x') + check_and_clear(' |\n') + end) +end) diff --git a/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua b/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua index 577a26178a..3fcffd422f 100644 --- a/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua +++ b/test/functional/ex_cmds/swapfile_preserve_recover_spec.lua @@ -11,6 +11,7 @@ local ok = helpers.ok local rmdir = helpers.rmdir local set_session = helpers.set_session local spawn = helpers.spawn +local nvim_async = helpers.nvim_async describe(':recover', function() before_each(clear) @@ -150,5 +151,12 @@ describe('swapfile detection', function() feed('e') -- Chose "Edit" at the swap dialog. feed('<c-c>') screen2:expect(expected_no_dialog) + + -- With API call and shortmess+=F + nvim_async('command', 'edit %') + screen2:expect{any=[[Found a swap file by the name ".*]] + ..[[Xtest_swapdialog_dir[/\].*]]..testfile..[[%.swp"]]} + feed('e') -- Chose "Edit" at the swap dialog. + feed('<c-c>') end) end) |