aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/quickfix.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/quickfix.c')
-rw-r--r--src/nvim/quickfix.c57
1 files changed, 35 insertions, 22 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 151b9d3790..dfd795b0ba 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -571,8 +571,9 @@ restofline:
*regmatch.endp[i] = c;
if (vim_strchr((char_u *)"OPQ", idx) != NULL
- && !os_file_exists(namebuf))
+ && !os_path_exists(namebuf)) {
continue;
+ }
}
if ((i = (int)fmt_ptr->addr[1]) > 0) { /* %n */
if (regmatch.startp[i] == NULL)
@@ -706,11 +707,12 @@ restofline:
} else if (vim_strchr((char_u *)"OPQ", idx) != NULL) {
// global file names
valid = false;
- if (*namebuf == NUL || os_file_exists(namebuf)) {
- if (*namebuf && idx == 'P')
+ if (*namebuf == NUL || os_path_exists(namebuf)) {
+ if (*namebuf && idx == 'P') {
currfile = qf_push_dir(namebuf, &file_stack);
- else if (idx == 'Q')
+ } else if (idx == 'Q') {
currfile = qf_pop_dir(&file_stack);
+ }
*namebuf = NUL;
if (tail && *tail) {
STRMOVE(IObuff, skipwhite(tail));
@@ -1080,7 +1082,7 @@ static int qf_get_fnum(char_u *directory, char_u *fname)
* "leaving directory"-messages we might have missed a
* directory change.
*/
- if (!os_file_exists(ptr)) {
+ if (!os_path_exists(ptr)) {
xfree(ptr);
directory = qf_guess_filepath(fname);
if (directory)
@@ -1232,8 +1234,9 @@ static char_u *qf_guess_filepath(char_u *filename)
xfree(fullname);
fullname = (char_u *)concat_fnames((char *)ds_ptr->dirname, (char *)filename, TRUE);
- if (os_file_exists(fullname))
+ if (os_path_exists(fullname)) {
break;
+ }
ds_ptr = ds_ptr->next;
}
@@ -1576,14 +1579,23 @@ win_found:
* set b_p_ro flag). */
if (!can_abandon(curbuf, forceit)) {
EMSG(_(e_nowrtmsg));
- ok = FALSE;
- } else
+ ok = false;
+ } else {
ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
- ECMD_HIDE + ECMD_SET_HELP,
- oldwin == curwin ? curwin : NULL);
- } else
- ok = buflist_getfile(qf_ptr->qf_fnum,
- (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+ ECMD_HIDE + ECMD_SET_HELP,
+ oldwin == curwin ? curwin : NULL);
+ }
+ } else {
+ ok = buflist_getfile(qf_ptr->qf_fnum, (linenr_T)1,
+ GETF_SETMARK | GETF_SWITCH, forceit);
+ if (qi != &ql_info && !win_valid(oldwin)) {
+ EMSG(_("E924: Current window was closed"));
+ ok = false;
+ qi = NULL;
+ qf_ptr = NULL;
+ opened_window = false;
+ }
+ }
}
if (ok == OK) {
@@ -1663,21 +1675,22 @@ win_found:
msg_scroll = (int)i;
}
} else {
- if (opened_window)
- win_close(curwin, TRUE); /* Close opened window */
- if (qf_ptr->qf_fnum != 0) {
- /*
- * Couldn't open file, so put index back where it was. This could
- * happen if the file was readonly and we changed something.
- */
+ if (opened_window) {
+ win_close(curwin, true); // Close opened window
+ }
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0) {
+ // Couldn't open file, so put index back where it was. This could
+ // happen if the file was readonly and we changed something.
failed:
qf_ptr = old_qf_ptr;
qf_index = old_qf_index;
}
}
theend:
- qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
- qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ if (qi != NULL) {
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
+ qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ }
if (p_swb != old_swb && opened_window) {
/* Restore old 'switchbuf' value, but not when an autocommand or
* modeline has changed the value. */