From a35c54b2aefc5baa720d98a9ba8c613bc40f694a Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Sat, 28 Nov 2020 15:28:57 -0500 Subject: [PATCH] vim-patch:8.2.0095: cannot specify exit code for :cquit (#13407) Problem: Cannot specify exit code for :cquit. Solution: Add optional argument. (Thinca, Yegappan Lakshmanan, closes vim/vim#5442) https://github.com/vim/vim/commit/1860bde9d31bbb0ba857f6284f6332a7134030dd Co-authored-by: erw7 --- runtime/doc/quickfix.txt | 17 +++++++++++------ src/nvim/ex_docmd.c | 9 +++------ src/nvim/testdir/test_quickfix.vim | 27 +++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index 9da11a553d..d6ff3ea9ea 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -187,12 +187,17 @@ processing a quickfix or location list command, it will be aborted. current window is used instead of the quickfix list. *:cq* *:cquit* -:[count]cq[uit] Quit Nvim with an error code, or the code specified in - [count]. Useful when Nvim is called from another - program: e.g. `git commit` will abort the comitting - process, `fc` (built-in for shells like bash and zsh) - will not execute the command. - +:cq[uit][!] +:{N}cq[uit][!] +:cq[uit][!] {N} Quit Vim with error code {N}. {N} defaults to one. + Useful when Vim is called from another program: + e.g., a compiler will not compile the same file again, + `git commit` will abort the committing process, `fc` + (built-in for shells like bash and zsh) will not + execute the command, etc. will not compile the same + file again. + {N} can also be zero, in which case Vim exits + normally. WARNING: All changes in files are lost. It works like ":qall!" |:qall|, except that Nvim exits non-zero or [count]. diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index d65387f83b..0ffe67a4db 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6317,17 +6317,14 @@ static void ex_quit(exarg_T *eap) } } -/* - * ":cquit". - */ +/// ":cquit". static void ex_cquit(exarg_T *eap) { + // this does not always pass on the exit code to the Manx compiler. why? getout(eap->addr_count > 0 ? (int)eap->line2 : EXIT_FAILURE); } -/* - * ":qall": try to quit all windows - */ +/// ":qall": try to quit all windows static void ex_quit_all(exarg_T *eap) { if (cmdwin_type != 0) { diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index 9c5f0777c6..5c84e45a79 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -3,6 +3,8 @@ source check.vim CheckFeature quickfix +source screendump.vim + set encoding=utf-8 func s:setup_commands(cchar) @@ -4410,6 +4412,31 @@ func Test_search_in_dirstack() call delete('Xtestdir', 'rf') endfunc +" Test for :cquit +func Test_cquit() + " Exit Vim with a non-zero value + if RunVim([], ["cquit 7"], '') + call assert_equal(7, v:shell_error) + endif + + if RunVim([], ["50cquit"], '') + call assert_equal(50, v:shell_error) + endif + + " Exit Vim with default value + if RunVim([], ["cquit"], '') + call assert_equal(1, v:shell_error) + endif + + " Exit Vim with zero value + if RunVim([], ["cquit 0"], '') + call assert_equal(0, v:shell_error) + endif + + " Exit Vim with negative value + call assert_fails('-3cquit', 'E16:') +endfunc + " Test for adding an invalid entry with the quickfix window open and making " sure that the window contents are not changed func Test_add_invalid_entry_with_qf_window()