summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-06 21:47:21 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-06 21:47:21 +0100
commit1860bde9d31bbb0ba857f6284f6332a7134030dd (patch)
treee1b03b951134208584dac0c507a53fee06e42b7d
parente73b38f8e10c220a382270f69e24cad08d3bf792 (diff)
downloadvim-git-1860bde9d31bbb0ba857f6284f6332a7134030dd.tar.gz
patch 8.2.0095: cannot specify exit code for :cquitv8.2.0095
Problem: Cannot specify exit code for :cquit. Solution: Add optional argument. (Thinca, Yegappan Lakshmanan, closes #5442)
-rw-r--r--runtime/doc/quickfix.txt13
-rw-r--r--src/ex_cmds.h2
-rw-r--r--src/ex_docmd.c4
-rw-r--r--src/testdir/test_quickfix.vim25
-rw-r--r--src/version.c2
5 files changed, 41 insertions, 5 deletions
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index 5879727d2..ae4581915 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -229,8 +229,17 @@ processing a quickfix or location list command, it will be aborted.
current window is used instead of the quickfix list.
*:cq* *:cquit*
-:cq[uit][!] Quit Vim with an error code, so that the compiler
- will not compile the same file again.
+: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! Also when the
[!] is not used. It works like ":qall!" |:qall|,
except that Vim returns a non-zero exit code.
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 14b43bda4..928b1100d 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -407,7 +407,7 @@ EXCMD(CMD_cpfile, "cpfile", ex_cnext,
EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
ADDR_OTHER),
EXCMD(CMD_cquit, "cquit", ex_cquit,
- EX_TRLBAR|EX_BANG,
+ EX_RANGE|EX_COUNT|EX_ZEROR|EX_TRLBAR|EX_BANG,
ADDR_NONE),
EXCMD(CMD_crewind, "crewind", ex_cc,
EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a3442edbe..de8fb4961 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -4920,8 +4920,8 @@ ex_quit(exarg_T *eap)
static void
ex_cquit(exarg_T *eap UNUSED)
{
- getout(1); // this does not always pass on the exit code to the Manx
- // compiler. why?
+ // this does not always pass on the exit code to the Manx compiler. why?
+ getout(eap->addr_count > 0 ? (int)eap->line2 : EXIT_FAILURE);
}
/*
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index f7c73f4c3..b7b428196 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -4674,4 +4674,29 @@ 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
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 41a6d3701..d007585ea 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 95,
+/**/
94,
/**/
93,