aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c9
-rw-r--r--src/nvim/option.c8
-rw-r--r--src/nvim/screen.c4
-rw-r--r--src/nvim/testdir/test_quickfix.vim27
4 files changed, 40 insertions, 8 deletions
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/option.c b/src/nvim/option.c
index 77a13b16b1..0034117ddc 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -342,6 +342,10 @@ static char_u SHM_ALL[] = {
///
/// Called only once from main(), just after creating the first buffer.
/// If "clean_arg" is true, Nvim was started with --clean.
+///
+/// NOTE: ELOG() etc calls are not allowed here, as log location depends on
+/// env var expansion which depends on expression evaluation and other
+/// editor state initialized here. Do logging in set_init_2 or later.
void set_init_1(bool clean_arg)
{
int opt_idx;
@@ -494,7 +498,6 @@ void set_init_1(bool clean_arg)
// this function.
char *rtp = runtimepath_default(clean_arg);
if (rtp) {
- ILOG("startup runtimepart/packpath value: %s", rtp);
set_string_default("runtimepath", rtp, true);
// Make a copy of 'rtp' for 'packpath'
set_string_default("packpath", rtp, false);
@@ -751,6 +754,9 @@ void free_all_options(void)
/// Initialize the options, part two: After getting Rows and Columns.
void set_init_2(bool headless)
{
+ // set in set_init_1 but logging is not allowed there
+ ILOG("startup runtimepath/packpath value: %s", p_rtp);
+
int idx;
// 'scroll' defaults to half the window height. The stored default is zero,
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 4373d6d5a8..2eeeebb88d 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -2550,7 +2550,9 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow,
*/
cur = wp->w_match_head;
shl_flag = false;
- while ((cur != NULL || !shl_flag) && !number_only) {
+ while ((cur != NULL || !shl_flag) && !number_only
+ && foldinfo.fi_lines == 0
+ ) {
if (!shl_flag) {
shl = &search_hl;
shl_flag = true;
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()