annotate src/quickfix.c @ 11757:74abb6c84984 v8.0.0761

patch 8.0.0761: options not set properly for a terminal buffer commit https://github.com/vim/vim/commit/1f2903c43109b16594d141a730659317b15f388d Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 23 19:51:01 2017 +0200 patch 8.0.0761: options not set properly for a terminal buffer Problem: Options of a buffer for a terminal window are not set properly. Solution: Add "terminal" value for 'buftype'. Make 'buftype' and 'bufhidden' not depend on the quickfix feature. Also set the buffer name and show "running" or "finished" in the window title.
author Christian Brabandt <cb@256bit.org>
date Sun, 23 Jul 2017 20:00:05 +0200
parents c43118ecb0a3
children 77bf0346687e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9982
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * quickfix.c: functions for quickfix mode, using a file with error messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 #if defined(FEAT_QUICKFIX) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 struct dir_stack_T
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 struct dir_stack_T *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 char_u *dirname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 /*
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
25 * For each error the next struct is allocated and linked in a list.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
27 typedef struct qfline_S qfline_T;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
28 struct qfline_S
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
30 qfline_T *qf_next; /* pointer to next error in the list */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
31 qfline_T *qf_prev; /* pointer to previous error in the list */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
32 linenr_T qf_lnum; /* line number where the error occurred */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
33 int qf_fnum; /* file number for the line */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
34 int qf_col; /* column where the error occurred */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
35 int qf_nr; /* error number */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
36 char_u *qf_pattern; /* search pattern for the error */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
37 char_u *qf_text; /* description of the error */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
38 char_u qf_viscol; /* set to TRUE if qf_col is screen column */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
39 char_u qf_cleared; /* set to TRUE if line has been deleted */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
40 char_u qf_type; /* type of the error (mostly 'E'); 1 for
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 :helpgrep */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
42 char_u qf_valid; /* valid error message detected */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 * There is a stack of error lists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 #define LISTCOUNT 10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
50 /*
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
51 * Quickfix/Location list definition
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
52 * Contains a list of entries (qfline_T). qf_start points to the first entry
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
53 * and qf_last points to the last entry. qf_count contains the list size.
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
54 *
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
55 * Usually the list contains one or more entries. But an empty list can be
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
56 * created using setqflist()/setloclist() with a title and/or user context
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
57 * information and entries can be added later using setqflist()/setloclist().
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
58 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
59 typedef struct qf_list_S
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
61 qfline_T *qf_start; /* pointer to the first error */
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
62 qfline_T *qf_last; /* pointer to the last error */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
63 qfline_T *qf_ptr; /* pointer to the current error */
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
64 int qf_count; /* number of errors (0 means empty list) */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
65 int qf_index; /* current index in the error list */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
66 int qf_nonevalid; /* TRUE if not a single valid entry found */
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
67 char_u *qf_title; /* title derived from the command that created
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
68 * the error list or set by setqflist */
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
69 typval_T *qf_ctx; /* context set by setqflist/setloclist */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
70
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
71 struct dir_stack_T *qf_dir_stack;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
72 char_u *qf_directory;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
73 struct dir_stack_T *qf_file_stack;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
74 char_u *qf_currfile;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
75 int qf_multiline;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
76 int qf_multiignore;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
77 int qf_multiscan;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
78 } qf_list_T;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
79
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
80 /*
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
81 * Quickfix/Location list stack definition
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
82 * Contains a list of quickfix/location lists (qf_list_T)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
83 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
84 struct qf_info_S
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
85 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
86 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
87 * Count of references to this list. Used only for location lists.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
88 * When a location list window reference this list, qf_refcount
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
89 * will be 2. Otherwise, qf_refcount will be 1. When qf_refcount
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
90 * reaches 0, the list is freed.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
91 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
92 int qf_refcount;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
93 int qf_listcount; /* current number of lists */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
94 int qf_curlist; /* current error list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
95 qf_list_T qf_lists[LISTCOUNT];
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
96 };
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
97
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
98 static qf_info_T ql_info; /* global quickfix list */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
100 #define FMT_PATTERNS 10 /* maximum number of % recognized */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 * Structure used to hold the info of one part of 'errorformat'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 */
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 729
diff changeset
105 typedef struct efm_S efm_T;
b29b006d52d2 updated for version 7.0230
vimboss
parents: 729
diff changeset
106 struct efm_S
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 regprog_T *prog; /* pre-formatted part of 'errorformat' */
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 729
diff changeset
109 efm_T *next; /* pointer to next (NULL if last) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 char_u addr[FMT_PATTERNS]; /* indices of used % patterns */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 char_u prefix; /* prefix of this format line: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 /* 'D' enter directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 /* 'X' leave directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 /* 'A' start of multi-line message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 /* 'E' error message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 /* 'W' warning message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 /* 'I' informational message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 /* 'C' continuation line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 /* 'Z' end of multi-line message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 /* 'G' general, unspecific message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 /* 'P' push file (partial) message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 /* 'Q' pop/quit file (partial) message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 /* 'O' overread (partial) message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 char_u flags; /* additional flags given in prefix */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 /* '-' do not include this line */
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
126 /* '+' include whole line in message */
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 729
diff changeset
127 int conthere; /* %> used */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129
10367
4e4e116e3689 commit https://github.com/vim/vim/commit/63bed3d319b5d90765dbdae93a3579b6322d79fb
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
130 static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */
4e4e116e3689 commit https://github.com/vim/vim/commit/63bed3d319b5d90765dbdae93a3579b6322d79fb
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
131
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
132 static int qf_init_ext(qf_info_T *qi, int qf_idx, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title, char_u *enc);
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
133 static void qf_store_title(qf_info_T *qi, int qf_idx, char_u *title);
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
134 static void qf_new_list(qf_info_T *qi, char_u *qf_title);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
135 static void ll_free_all(qf_info_T **pqi);
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
136 static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid);
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
137 static qf_info_T *ll_new_list(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
138 static void qf_free(qf_info_T *qi, int idx);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
139 static char_u *qf_types(int, int);
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
140 static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *);
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
141 static char_u *qf_push_dir(char_u *, struct dir_stack_T **, int is_file_stack);
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
142 static char_u *qf_pop_dir(struct dir_stack_T **);
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
143 static char_u *qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *);
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
144 static void qf_fmt_text(char_u *text, char_u *buf, int bufsize);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
145 static void qf_clean_dir_stack(struct dir_stack_T **);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 #ifdef FEAT_WINDOWS
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
147 static int qf_win_pos_update(qf_info_T *qi, int old_qf_index);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
148 static int is_qf_win(win_T *win, qf_info_T *qi);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
149 static win_T *qf_find_win(qf_info_T *qi);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
150 static buf_T *qf_find_buf(qf_info_T *qi);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
151 static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
152 static void qf_set_title_var(qf_info_T *qi);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
153 static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 #endif
7805
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
155 static char_u *get_mef_name(void);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
156 static void restore_start_dir(char_u *dirname_start);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
157 static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
158 static void wipe_dummy_buffer(buf_T *buf, char_u *dirname_start);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
159 static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
0b6c37dd858d commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents: 7710
diff changeset
160 static qf_info_T *ll_get_or_alloc_list(win_T *);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
162 /* Quickfix window check helper macro */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
163 #define IS_QF_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
164 /* Location list window check helper macro */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
165 #define IS_LL_WINDOW(wp) (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
166 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
167 * Return location list for window 'wp'
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
168 * For location list window, return the referenced location list
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
169 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
170 #define GET_LOC_LIST(wp) (IS_LL_WINDOW(wp) ? wp->w_llist_ref : wp->w_llist)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
171
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 /*
11443
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
173 * Looking up a buffer can be slow if there are many. Remember the last one
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
174 * to make this a lot faster if there are multiple matches in the same file.
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
175 */
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11445
diff changeset
176 static char_u *qf_last_bufname = NULL;
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11445
diff changeset
177 static bufref_T qf_last_bufref = {NULL, 0, 0};
11443
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
178
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
179 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
180 * Read the errorfile "efile" into memory, line by line, building the error
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
181 * list. Set the error list's title to qf_title.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 * Return -1 for error, number of errors for success.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
185 qf_init(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
186 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
187 char_u *efile,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
188 char_u *errorformat,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
189 int newlist, /* TRUE: start a new error list */
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
190 char_u *qf_title,
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
191 char_u *enc)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
193 qf_info_T *qi = &ql_info;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
194
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
195 if (wp != NULL)
665
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
196 {
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
197 qi = ll_get_or_alloc_list(wp);
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
198 if (qi == NULL)
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
199 return FAIL;
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
200 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
201
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
202 return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
203 newlist, (linenr_T)0, (linenr_T)0, qf_title, enc);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
204 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
205
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
206 /*
9033
0536d1469b67 commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents: 8932
diff changeset
207 * Maximum number of bytes allowed per line while reading a errorfile.
0536d1469b67 commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents: 8932
diff changeset
208 */
0536d1469b67 commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents: 8932
diff changeset
209 #define LINE_MAXLEN 4096
0536d1469b67 commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents: 8932
diff changeset
210
9365
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
211 static struct fmtpattern
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
212 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
213 char_u convchar;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
214 char *pattern;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
215 } fmt_pat[FMT_PATTERNS] =
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
216 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
217 {'f', ".\\+"}, /* only used when at end */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
218 {'n', "\\d\\+"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
219 {'l', "\\d\\+"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
220 {'c', "\\d\\+"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
221 {'t', "."},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
222 {'m', ".\\+"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
223 {'r', ".*"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
224 {'p', "[- .]*"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
225 {'v', "\\d\\+"},
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
226 {'s', ".\\+"}
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
227 };
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
228
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
229 /*
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
230 * Converts a 'errorformat' string to regular expression pattern
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
231 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
232 static int
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
233 efm_to_regpat(
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
234 char_u *efm,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
235 int len,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
236 efm_T *fmt_ptr,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
237 char_u *regpat,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
238 char_u *errmsg)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
239 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
240 char_u *ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
241 char_u *efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
242 char_u *srcptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
243 int round;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
244 int idx = 0;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
245
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
246 /*
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
247 * Build regexp pattern from current 'errorformat' option
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
248 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
249 ptr = regpat;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
250 *ptr++ = '^';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
251 round = 0;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
252 for (efmp = efm; efmp < efm + len; ++efmp)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
253 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
254 if (*efmp == '%')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
255 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
256 ++efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
257 for (idx = 0; idx < FMT_PATTERNS; ++idx)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
258 if (fmt_pat[idx].convchar == *efmp)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
259 break;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
260 if (idx < FMT_PATTERNS)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
261 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
262 if (fmt_ptr->addr[idx])
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
263 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
264 sprintf((char *)errmsg,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
265 _("E372: Too many %%%c in format string"), *efmp);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
266 EMSG(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
267 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
268 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
269 if ((idx
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
270 && idx < 6
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
271 && vim_strchr((char_u *)"DXOPQ",
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
272 fmt_ptr->prefix) != NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
273 || (idx == 6
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
274 && vim_strchr((char_u *)"OPQ",
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
275 fmt_ptr->prefix) == NULL))
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
276 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
277 sprintf((char *)errmsg,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
278 _("E373: Unexpected %%%c in format string"), *efmp);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
279 EMSG(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
280 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
281 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
282 fmt_ptr->addr[idx] = (char_u)++round;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
283 *ptr++ = '\\';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
284 *ptr++ = '(';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
285 #ifdef BACKSLASH_IN_FILENAME
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
286 if (*efmp == 'f')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
287 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
288 /* Also match "c:" in the file name, even when
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
289 * checking for a colon next: "%f:".
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
290 * "\%(\a:\)\=" */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
291 STRCPY(ptr, "\\%(\\a:\\)\\=");
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
292 ptr += 10;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
293 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
294 #endif
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
295 if (*efmp == 'f' && efmp[1] != NUL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
296 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
297 if (efmp[1] != '\\' && efmp[1] != '%')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
298 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
299 /* A file name may contain spaces, but this isn't
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
300 * in "\f". For "%f:%l:%m" there may be a ":" in
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
301 * the file name. Use ".\{-1,}x" instead (x is
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
302 * the next character), the requirement that :999:
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
303 * follows should work. */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
304 STRCPY(ptr, ".\\{-1,}");
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
305 ptr += 7;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
306 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
307 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
308 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
309 /* File name followed by '\\' or '%': include as
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
310 * many file name chars as possible. */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
311 STRCPY(ptr, "\\f\\+");
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
312 ptr += 4;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
313 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
314 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
315 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
316 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
317 srcptr = (char_u *)fmt_pat[idx].pattern;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
318 while ((*ptr = *srcptr++) != NUL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
319 ++ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
320 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
321 *ptr++ = '\\';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
322 *ptr++ = ')';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
323 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
324 else if (*efmp == '*')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
325 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
326 if (*++efmp == '[' || *efmp == '\\')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
327 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
328 if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
329 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
330 if (efmp[1] == '^')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
331 *ptr++ = *++efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
332 if (efmp < efm + len)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
333 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
334 *ptr++ = *++efmp; /* could be ']' */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
335 while (efmp < efm + len
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
336 && (*ptr++ = *++efmp) != ']')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
337 /* skip */;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
338 if (efmp == efm + len)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
339 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
340 EMSG(_("E374: Missing ] in format string"));
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
341 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
342 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
343 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
344 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
345 else if (efmp < efm + len) /* %*\D, %*\s etc. */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
346 *ptr++ = *++efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
347 *ptr++ = '\\';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
348 *ptr++ = '+';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
349 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
350 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
351 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
352 /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
353 sprintf((char *)errmsg,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
354 _("E375: Unsupported %%%c in format string"), *efmp);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
355 EMSG(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
356 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
357 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
358 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
359 else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
360 *ptr++ = *efmp; /* regexp magic characters */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
361 else if (*efmp == '#')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
362 *ptr++ = '*';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
363 else if (*efmp == '>')
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
364 fmt_ptr->conthere = TRUE;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
365 else if (efmp == efm + 1) /* analyse prefix */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
366 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
367 if (vim_strchr((char_u *)"+-", *efmp) != NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
368 fmt_ptr->flags = *efmp++;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
369 if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
370 fmt_ptr->prefix = *efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
371 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
372 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
373 sprintf((char *)errmsg,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
374 _("E376: Invalid %%%c in format string prefix"), *efmp);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
375 EMSG(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
376 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
377 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
378 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
379 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
380 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
381 sprintf((char *)errmsg,
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
382 _("E377: Invalid %%%c in format string"), *efmp);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
383 EMSG(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
384 return -1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
385 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
386 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
387 else /* copy normal character */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
388 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
389 if (*efmp == '\\' && efmp + 1 < efm + len)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
390 ++efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
391 else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
392 *ptr++ = '\\'; /* escape regexp atoms */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
393 if (*efmp)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
394 *ptr++ = *efmp;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
395 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
396 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
397 *ptr++ = '$';
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
398 *ptr = NUL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
399
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
400 return 0;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
401 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
402
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
403 static void
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
404 free_efm_list(efm_T **efm_first)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
405 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
406 efm_T *efm_ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
407
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
408 for (efm_ptr = *efm_first; efm_ptr != NULL; efm_ptr = *efm_first)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
409 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
410 *efm_first = efm_ptr->next;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
411 vim_regfree(efm_ptr->prog);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
412 vim_free(efm_ptr);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
413 }
10367
4e4e116e3689 commit https://github.com/vim/vim/commit/63bed3d319b5d90765dbdae93a3579b6322d79fb
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
414 fmt_start = NULL;
9365
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
415 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
416
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
417 /* Parse 'errorformat' option */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
418 static efm_T *
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
419 parse_efm_option(char_u *efm)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
420 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
421 char_u *errmsg = NULL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
422 int errmsglen;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
423 efm_T *fmt_ptr = NULL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
424 efm_T *fmt_first = NULL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
425 efm_T *fmt_last = NULL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
426 char_u *fmtstr = NULL;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
427 int len;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
428 int i;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
429 int round;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
430
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
431 errmsglen = CMDBUFFSIZE + 1;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
432 errmsg = alloc_id(errmsglen, aid_qf_errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
433 if (errmsg == NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
434 goto parse_efm_end;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
435
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
436 /*
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
437 * Each part of the format string is copied and modified from errorformat
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
438 * to regex prog. Only a few % characters are allowed.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
439 */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
440
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
441 /*
9365
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
442 * Get some space to modify the format string into.
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
443 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
444 i = (FMT_PATTERNS * 3) + ((int)STRLEN(efm) << 2);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
445 for (round = FMT_PATTERNS; round > 0; )
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
446 i += (int)STRLEN(fmt_pat[--round].pattern);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
447 #ifdef COLON_IN_FILENAME
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
448 i += 12; /* "%f" can become twelve chars longer */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
449 #else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
450 i += 2; /* "%f" can become two chars longer */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
451 #endif
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
452 if ((fmtstr = alloc(i)) == NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
453 goto parse_efm_error;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
454
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
455 while (efm[0] != NUL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
456 {
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
457 /*
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
458 * Allocate a new eformat structure and put it at the end of the list
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
459 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
460 fmt_ptr = (efm_T *)alloc_clear((unsigned)sizeof(efm_T));
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
461 if (fmt_ptr == NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
462 goto parse_efm_error;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
463 if (fmt_first == NULL) /* first one */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
464 fmt_first = fmt_ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
465 else
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
466 fmt_last->next = fmt_ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
467 fmt_last = fmt_ptr;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
468
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
469 /*
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
470 * Isolate one part in the 'errorformat' option
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
471 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
472 for (len = 0; efm[len] != NUL && efm[len] != ','; ++len)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
473 if (efm[len] == '\\' && efm[len + 1] != NUL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
474 ++len;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
475
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
476 if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == -1)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
477 goto parse_efm_error;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
478 if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
479 goto parse_efm_error;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
480 /*
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
481 * Advance to next part
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
482 */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
483 efm = skip_to_option_part(efm + len); /* skip comma and spaces */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
484 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
485
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
486 if (fmt_first == NULL) /* nothing found */
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
487 EMSG(_("E378: 'errorformat' contains no pattern"));
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
488
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
489 goto parse_efm_end;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
490
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
491 parse_efm_error:
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
492 free_efm_list(&fmt_first);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
493
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
494 parse_efm_end:
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
495 vim_free(fmtstr);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
496 vim_free(errmsg);
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
497
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
498 return fmt_first;
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
499 }
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
500
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
501 enum {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
502 QF_FAIL = 0,
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
503 QF_OK = 1,
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
504 QF_END_OF_INPUT = 2,
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
505 QF_NOMEM = 3,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
506 QF_IGNORE_LINE = 4
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
507 };
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
508
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
509 typedef struct {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
510 char_u *linebuf;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
511 int linelen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
512 char_u *growbuf;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
513 int growbufsiz;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
514 FILE *fd;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
515 typval_T *tv;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
516 char_u *p_str;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
517 listitem_T *p_li;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
518 buf_T *buf;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
519 linenr_T buflnum;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
520 linenr_T lnumlast;
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
521 vimconv_T vc;
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
522 } qfstate_T;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
523
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
524 static char_u *
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
525 qf_grow_linebuf(qfstate_T *state, int newsz)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
526 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
527 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
528 * If the line exceeds LINE_MAXLEN exclude the last
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
529 * byte since it's not a NL character.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
530 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
531 state->linelen = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
532 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
533 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
534 state->growbuf = alloc(state->linelen + 1);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
535 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
536 return NULL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
537 state->growbufsiz = state->linelen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
538 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
539 else if (state->linelen > state->growbufsiz)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
540 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
541 state->growbuf = vim_realloc(state->growbuf, state->linelen + 1);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
542 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
543 return NULL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
544 state->growbufsiz = state->linelen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
545 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
546 return state->growbuf;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
547 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
548
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
549 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
550 * Get the next string (separated by newline) from state->p_str.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
551 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
552 static int
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
553 qf_get_next_str_line(qfstate_T *state)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
554 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
555 /* Get the next line from the supplied string */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
556 char_u *p_str = state->p_str;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
557 char_u *p;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
558 int len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
559
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
560 if (*p_str == NUL) /* Reached the end of the string */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
561 return QF_END_OF_INPUT;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
562
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
563 p = vim_strchr(p_str, '\n');
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
564 if (p != NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
565 len = (int)(p - p_str) + 1;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
566 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
567 len = (int)STRLEN(p_str);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
568
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
569 if (len > IOSIZE - 2)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
570 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
571 state->linebuf = qf_grow_linebuf(state, len);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
572 if (state->linebuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
573 return QF_NOMEM;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
574 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
575 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
576 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
577 state->linebuf = IObuff;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
578 state->linelen = len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
579 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
580 vim_strncpy(state->linebuf, p_str, state->linelen);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
581
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
582 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
583 * Increment using len in order to discard the rest of the
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
584 * line if it exceeds LINE_MAXLEN.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
585 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
586 p_str += len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
587 state->p_str = p_str;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
588
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
589 return QF_OK;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
590 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
591
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
592 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
593 * Get the next string from state->p_Li.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
594 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
595 static int
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
596 qf_get_next_list_line(qfstate_T *state)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
597 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
598 listitem_T *p_li = state->p_li;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
599 int len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
600
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
601 while (p_li != NULL
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
602 && (p_li->li_tv.v_type != VAR_STRING
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
603 || p_li->li_tv.vval.v_string == NULL))
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
604 p_li = p_li->li_next; /* Skip non-string items */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
605
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
606 if (p_li == NULL) /* End of the list */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
607 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
608 state->p_li = NULL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
609 return QF_END_OF_INPUT;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
610 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
611
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
612 len = (int)STRLEN(p_li->li_tv.vval.v_string);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
613 if (len > IOSIZE - 2)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
614 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
615 state->linebuf = qf_grow_linebuf(state, len);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
616 if (state->linebuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
617 return QF_NOMEM;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
618 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
619 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
620 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
621 state->linebuf = IObuff;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
622 state->linelen = len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
623 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
624
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
625 vim_strncpy(state->linebuf, p_li->li_tv.vval.v_string, state->linelen);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
626
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
627 state->p_li = p_li->li_next; /* next item */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
628 return QF_OK;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
629 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
630
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
631 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
632 * Get the next string from state->buf.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
633 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
634 static int
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
635 qf_get_next_buf_line(qfstate_T *state)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
636 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
637 char_u *p_buf = NULL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
638 int len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
639
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
640 /* Get the next line from the supplied buffer */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
641 if (state->buflnum > state->lnumlast)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
642 return QF_END_OF_INPUT;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
643
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
644 p_buf = ml_get_buf(state->buf, state->buflnum, FALSE);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
645 state->buflnum += 1;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
646
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
647 len = (int)STRLEN(p_buf);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
648 if (len > IOSIZE - 2)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
649 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
650 state->linebuf = qf_grow_linebuf(state, len);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
651 if (state->linebuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
652 return QF_NOMEM;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
653 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
654 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
655 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
656 state->linebuf = IObuff;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
657 state->linelen = len;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
658 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
659 vim_strncpy(state->linebuf, p_buf, state->linelen);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
660
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
661 return QF_OK;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
662 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
663
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
664 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
665 * Get the next string from file state->fd.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
666 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
667 static int
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
668 qf_get_next_file_line(qfstate_T *state)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
669 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
670 int discard;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
671 int growbuflen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
672
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
673 if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
674 return QF_END_OF_INPUT;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
675
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
676 discard = FALSE;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
677 state->linelen = (int)STRLEN(IObuff);
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
678 if (state->linelen == IOSIZE - 1 && !(IObuff[state->linelen - 1] == '\n'))
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
679 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
680 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
681 * The current line exceeds IObuff, continue reading using
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
682 * growbuf until EOL or LINE_MAXLEN bytes is read.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
683 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
684 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
685 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
686 state->growbufsiz = 2 * (IOSIZE - 1);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
687 state->growbuf = alloc(state->growbufsiz);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
688 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
689 return QF_NOMEM;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
690 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
691
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
692 /* Copy the read part of the line, excluding null-terminator */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
693 memcpy(state->growbuf, IObuff, IOSIZE - 1);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
694 growbuflen = state->linelen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
695
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
696 for (;;)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
697 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
698 if (fgets((char *)state->growbuf + growbuflen,
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
699 state->growbufsiz - growbuflen, state->fd) == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
700 break;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
701 state->linelen = (int)STRLEN(state->growbuf + growbuflen);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
702 growbuflen += state->linelen;
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
703 if ((state->growbuf)[growbuflen - 1] == '\n')
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
704 break;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
705 if (state->growbufsiz == LINE_MAXLEN)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
706 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
707 discard = TRUE;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
708 break;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
709 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
710
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
711 state->growbufsiz = 2 * state->growbufsiz < LINE_MAXLEN
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
712 ? 2 * state->growbufsiz : LINE_MAXLEN;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
713 state->growbuf = vim_realloc(state->growbuf, state->growbufsiz);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
714 if (state->growbuf == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
715 return QF_NOMEM;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
716 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
717
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
718 while (discard)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
719 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
720 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
721 * The current line is longer than LINE_MAXLEN, continue
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
722 * reading but discard everything until EOL or EOF is
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
723 * reached.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
724 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
725 if (fgets((char *)IObuff, IOSIZE, state->fd) == NULL
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
726 || (int)STRLEN(IObuff) < IOSIZE - 1
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
727 || IObuff[IOSIZE - 1] == '\n')
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
728 break;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
729 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
730
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
731 state->linebuf = state->growbuf;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
732 state->linelen = growbuflen;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
733 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
734 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
735 state->linebuf = IObuff;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
736
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
737 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
738 /* Convert a line if it contains a non-ASCII character. */
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
739 if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf))
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
740 {
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
741 char_u *line;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
742
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
743 line = string_convert(&state->vc, state->linebuf, &state->linelen);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
744 if (line != NULL)
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
745 {
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
746 if (state->linelen < IOSIZE)
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
747 {
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
748 STRCPY(state->linebuf, line);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
749 vim_free(line);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
750 }
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
751 else
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
752 {
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
753 vim_free(state->growbuf);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
754 state->linebuf = state->growbuf = line;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
755 state->growbufsiz = state->linelen < LINE_MAXLEN
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
756 ? state->linelen : LINE_MAXLEN;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
757 }
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
758 }
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
759 }
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
760 #endif
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
761
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
762 return QF_OK;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
763 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
764
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
765 /*
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
766 * Get the next string from a file/buffer/list/string.
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
767 */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
768 static int
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
769 qf_get_nextline(qfstate_T *state)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
770 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
771 int status = QF_FAIL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
772
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
773 if (state->fd == NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
774 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
775 if (state->tv != NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
776 {
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
777 if (state->tv->v_type == VAR_STRING)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
778 /* Get the next line from the supplied string */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
779 status = qf_get_next_str_line(state);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
780 else if (state->tv->v_type == VAR_LIST)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
781 /* Get the next line from the supplied list */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
782 status = qf_get_next_list_line(state);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
783 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
784 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
785 /* Get the next line from the supplied buffer */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
786 status = qf_get_next_buf_line(state);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
787 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
788 else
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
789 /* Get the next line from the supplied file */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
790 status = qf_get_next_file_line(state);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
791
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
792 if (status != QF_OK)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
793 return status;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
794
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
795 /* remove newline/CR from the line */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
796 if (state->linelen > 0 && state->linebuf[state->linelen - 1] == '\n')
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
797 {
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
798 state->linebuf[state->linelen - 1] = NUL;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
799 #ifdef USE_CRNL
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
800 if (state->linelen > 1 && state->linebuf[state->linelen - 2] == '\r')
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
801 state->linebuf[state->linelen - 2] = NUL;
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
802 #endif
9738
6818e3c96473 commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
803 }
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
804
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
805 #ifdef FEAT_MBYTE
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
806 remove_bom(state->linebuf);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
807 #endif
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
808
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
809 return QF_OK;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
810 }
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
811
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
812 typedef struct {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
813 char_u *namebuf;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
814 char_u *errmsg;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
815 int errmsglen;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
816 long lnum;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
817 int col;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
818 char_u use_viscol;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
819 char_u *pattern;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
820 int enr;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
821 int type;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
822 int valid;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
823 } qffields_T;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
824
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
825 /*
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
826 * Parse a line and get the quickfix fields.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
827 * Return the QF_ status.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
828 */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
829 static int
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
830 qf_parse_line(
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
831 qf_info_T *qi,
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
832 int qf_idx,
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
833 char_u *linebuf,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
834 int linelen,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
835 efm_T *fmt_first,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
836 qffields_T *fields)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
837 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
838 efm_T *fmt_ptr;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
839 char_u *ptr;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
840 int len;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
841 int i;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
842 int idx = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
843 char_u *tail = NULL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
844 regmatch_T regmatch;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
845 qf_list_T *qfl = &qi->qf_lists[qf_idx];
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
846
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
847 /* Always ignore case when looking for a matching error. */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
848 regmatch.rm_ic = TRUE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
849
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
850 /* If there was no %> item start at the first pattern */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
851 if (fmt_start == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
852 fmt_ptr = fmt_first;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
853 else
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
854 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
855 fmt_ptr = fmt_start;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
856 fmt_start = NULL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
857 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
858
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
859 /*
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
860 * Try to match each part of 'errorformat' until we find a complete
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
861 * match or no match.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
862 */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
863 fields->valid = TRUE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
864 restofline:
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
865 for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
866 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
867 int r;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
868
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
869 idx = fmt_ptr->prefix;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
870 if (qfl->qf_multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
871 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
872 fields->namebuf[0] = NUL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
873 fields->pattern[0] = NUL;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
874 if (!qfl->qf_multiscan)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
875 fields->errmsg[0] = NUL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
876 fields->lnum = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
877 fields->col = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
878 fields->use_viscol = FALSE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
879 fields->enr = -1;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
880 fields->type = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
881 tail = NULL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
882
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
883 regmatch.regprog = fmt_ptr->prog;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
884 r = vim_regexec(&regmatch, linebuf, (colnr_T)0);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
885 fmt_ptr->prog = regmatch.regprog;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
886 if (r)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
887 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
888 if ((idx == 'C' || idx == 'Z') && !qfl->qf_multiline)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
889 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
890 if (vim_strchr((char_u *)"EWI", idx) != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
891 fields->type = idx;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
892 else
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
893 fields->type = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
894 /*
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
895 * Extract error message data from matched line.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
896 * We check for an actual submatch, because "\[" and "\]" in
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
897 * the 'errorformat' may cause the wrong submatch to be used.
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
898 */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
899 if ((i = (int)fmt_ptr->addr[0]) > 0) /* %f */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
900 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
901 int c;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
902
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
903 if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
904 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
905
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
906 /* Expand ~/file and $HOME/file to full path. */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
907 c = *regmatch.endp[i];
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
908 *regmatch.endp[i] = NUL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
909 expand_env(regmatch.startp[i], fields->namebuf, CMDBUFFSIZE);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
910 *regmatch.endp[i] = c;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
911
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
912 if (vim_strchr((char_u *)"OPQ", idx) != NULL
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
913 && mch_getperm(fields->namebuf) == -1)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
914 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
915 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
916 if ((i = (int)fmt_ptr->addr[1]) > 0) /* %n */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
917 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
918 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
919 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
920 fields->enr = (int)atol((char *)regmatch.startp[i]);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
921 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
922 if ((i = (int)fmt_ptr->addr[2]) > 0) /* %l */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
923 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
924 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
925 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
926 fields->lnum = atol((char *)regmatch.startp[i]);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
927 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
928 if ((i = (int)fmt_ptr->addr[3]) > 0) /* %c */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
929 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
930 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
931 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
932 fields->col = (int)atol((char *)regmatch.startp[i]);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
933 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
934 if ((i = (int)fmt_ptr->addr[4]) > 0) /* %t */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
935 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
936 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
937 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
938 fields->type = *regmatch.startp[i];
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
939 }
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
940 if (fmt_ptr->flags == '+' && !qfl->qf_multiscan) /* %+ */
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
941 {
11426
3270f080bf0a patch 8.0.0597: off-by-one error in size computation
Christian Brabandt <cb@256bit.org>
parents: 11422
diff changeset
942 if (linelen >= fields->errmsglen)
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
943 {
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
944 /* linelen + null terminator */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
945 if ((fields->errmsg = vim_realloc(fields->errmsg,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
946 linelen + 1)) == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
947 return QF_NOMEM;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
948 fields->errmsglen = linelen + 1;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
949 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
950 vim_strncpy(fields->errmsg, linebuf, linelen);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
951 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
952 else if ((i = (int)fmt_ptr->addr[5]) > 0) /* %m */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
953 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
954 if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
955 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
956 len = (int)(regmatch.endp[i] - regmatch.startp[i]);
11426
3270f080bf0a patch 8.0.0597: off-by-one error in size computation
Christian Brabandt <cb@256bit.org>
parents: 11422
diff changeset
957 if (len >= fields->errmsglen)
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
958 {
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
959 /* len + null terminator */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
960 if ((fields->errmsg = vim_realloc(fields->errmsg, len + 1))
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
961 == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
962 return QF_NOMEM;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
963 fields->errmsglen = len + 1;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
964 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
965 vim_strncpy(fields->errmsg, regmatch.startp[i], len);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
966 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
967 if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
968 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
969 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
970 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
971 tail = regmatch.startp[i];
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
972 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
973 if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
974 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
975 char_u *match_ptr;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
976
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
977 if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
978 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
979 fields->col = 0;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
980 for (match_ptr = regmatch.startp[i];
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
981 match_ptr != regmatch.endp[i]; ++match_ptr)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
982 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
983 ++fields->col;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
984 if (*match_ptr == TAB)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
985 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
986 fields->col += 7;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
987 fields->col -= fields->col % 8;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
988 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
989 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
990 ++fields->col;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
991 fields->use_viscol = TRUE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
992 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
993 if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
994 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
995 if (regmatch.startp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
996 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
997 fields->col = (int)atol((char *)regmatch.startp[i]);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
998 fields->use_viscol = TRUE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
999 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1000 if ((i = (int)fmt_ptr->addr[9]) > 0) /* %s */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1001 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1002 if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1003 continue;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1004 len = (int)(regmatch.endp[i] - regmatch.startp[i]);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1005 if (len > CMDBUFFSIZE - 5)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1006 len = CMDBUFFSIZE - 5;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1007 STRCPY(fields->pattern, "^\\V");
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1008 STRNCAT(fields->pattern, regmatch.startp[i], len);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1009 fields->pattern[len + 3] = '\\';
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1010 fields->pattern[len + 4] = '$';
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1011 fields->pattern[len + 5] = NUL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1012 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1013 break;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1014 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1015 }
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1016 qfl->qf_multiscan = FALSE;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1017
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1018 if (fmt_ptr == NULL || idx == 'D' || idx == 'X')
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1019 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1020 if (fmt_ptr != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1021 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1022 if (idx == 'D') /* enter directory */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1023 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1024 if (*fields->namebuf == NUL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1025 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1026 EMSG(_("E379: Missing or empty directory name"));
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1027 return QF_FAIL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1028 }
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1029 qfl->qf_directory =
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1030 qf_push_dir(fields->namebuf, &qfl->qf_dir_stack, FALSE);
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1031 if (qfl->qf_directory == NULL)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1032 return QF_FAIL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1033 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1034 else if (idx == 'X') /* leave directory */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1035 qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1036 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1037 fields->namebuf[0] = NUL; /* no match found, remove file name */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1038 fields->lnum = 0; /* don't jump to this line */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1039 fields->valid = FALSE;
11426
3270f080bf0a patch 8.0.0597: off-by-one error in size computation
Christian Brabandt <cb@256bit.org>
parents: 11422
diff changeset
1040 if (linelen >= fields->errmsglen)
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
1041 {
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1042 /* linelen + null terminator */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1043 if ((fields->errmsg = vim_realloc(fields->errmsg,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1044 linelen + 1)) == NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1045 return QF_NOMEM;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1046 fields->errmsglen = linelen + 1;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1047 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1048 /* copy whole line to error message */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1049 vim_strncpy(fields->errmsg, linebuf, linelen);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1050 if (fmt_ptr == NULL)
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1051 qfl->qf_multiline = qfl->qf_multiignore = FALSE;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1052 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1053 else if (fmt_ptr != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1054 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1055 /* honor %> item */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1056 if (fmt_ptr->conthere)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1057 fmt_start = fmt_ptr;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1058
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1059 if (vim_strchr((char_u *)"AEWI", idx) != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1060 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1061 qfl->qf_multiline = TRUE; /* start of a multi-line message */
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1062 qfl->qf_multiignore = FALSE;/* reset continuation */
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1063 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1064 else if (vim_strchr((char_u *)"CZ", idx) != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1065 { /* continuation of multi-line msg */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1066 if (!qfl->qf_multiignore)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1067 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1068 qfline_T *qfprev = qfl->qf_last;
10257
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1069
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1070 if (qfprev == NULL)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1071 return QF_FAIL;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1072 if (*fields->errmsg && !qfl->qf_multiignore)
10257
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1073 {
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1074 len = (int)STRLEN(qfprev->qf_text);
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1075 if ((ptr = alloc((unsigned)(len + STRLEN(fields->errmsg) + 2)))
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1076 == NULL)
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1077 return QF_FAIL;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1078 STRCPY(ptr, qfprev->qf_text);
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1079 vim_free(qfprev->qf_text);
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1080 qfprev->qf_text = ptr;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1081 *(ptr += len) = '\n';
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1082 STRCPY(++ptr, fields->errmsg);
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1083 }
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1084 if (qfprev->qf_nr == -1)
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1085 qfprev->qf_nr = fields->enr;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1086 if (vim_isprintc(fields->type) && !qfprev->qf_type)
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1087 /* only printable chars allowed */
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1088 qfprev->qf_type = fields->type;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1089
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1090 if (!qfprev->qf_lnum)
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1091 qfprev->qf_lnum = fields->lnum;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1092 if (!qfprev->qf_col)
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1093 qfprev->qf_col = fields->col;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1094 qfprev->qf_viscol = fields->use_viscol;
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1095 if (!qfprev->qf_fnum)
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1096 qfprev->qf_fnum = qf_get_fnum(qi, qf_idx,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1097 qfl->qf_directory,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1098 *fields->namebuf || qfl->qf_directory != NULL
10257
2d0e6034743a commit https://github.com/vim/vim/commit/9b4579481892a62e7e002498b9eddaaf75bbda49
Christian Brabandt <cb@256bit.org>
parents: 10237
diff changeset
1099 ? fields->namebuf
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1100 : qfl->qf_currfile != NULL && fields->valid
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1101 ? qfl->qf_currfile : 0);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1102 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1103 if (idx == 'Z')
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1104 qfl->qf_multiline = qfl->qf_multiignore = FALSE;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1105 line_breakcheck();
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1106 return QF_IGNORE_LINE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1107 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1108 else if (vim_strchr((char_u *)"OPQ", idx) != NULL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1109 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1110 /* global file names */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1111 fields->valid = FALSE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1112 if (*fields->namebuf == NUL || mch_getperm(fields->namebuf) >= 0)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1113 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1114 if (*fields->namebuf && idx == 'P')
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1115 qfl->qf_currfile =
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1116 qf_push_dir(fields->namebuf, &qfl->qf_file_stack, TRUE);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1117 else if (idx == 'Q')
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1118 qfl->qf_currfile = qf_pop_dir(&qfl->qf_file_stack);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1119 *fields->namebuf = NUL;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1120 if (tail && *tail)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1121 {
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1122 STRMOVE(IObuff, skipwhite(tail));
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1123 qfl->qf_multiscan = TRUE;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1124 goto restofline;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1125 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1126 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1127 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1128 if (fmt_ptr->flags == '-') /* generally exclude this line */
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1129 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1130 if (qfl->qf_multiline)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1131 /* also exclude continuation lines */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1132 qfl->qf_multiignore = TRUE;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1133 return QF_IGNORE_LINE;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1134 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1135 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1136
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1137 return QF_OK;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1138 }
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1139
9033
0536d1469b67 commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents: 8932
diff changeset
1140 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1141 * Read the errorfile "efile" into memory, line by line, building the error
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1142 * list.
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1143 * Alternative: when "efile" is NULL read errors from buffer "buf".
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1144 * Alternative: when "tv" is not NULL get errors from the string or list.
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1145 * Always use 'errorformat' from "buf" if there is a local value.
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1146 * Then "lnumfirst" and "lnumlast" specify the range of lines to use.
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1147 * Set the title of the list to "qf_title".
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1148 * Return -1 for error, number of errors for success.
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1149 */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1150 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1151 qf_init_ext(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1152 qf_info_T *qi,
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1153 int qf_idx,
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1154 char_u *efile,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1155 buf_T *buf,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1156 typval_T *tv,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1157 char_u *errorformat,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1158 int newlist, /* TRUE: start a new error list */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1159 linenr_T lnumfirst, /* first line number to use */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1160 linenr_T lnumlast, /* last line number to use */
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1161 char_u *qf_title,
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1162 char_u *enc)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1163 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1164 qf_list_T *qfl;
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1165 qfstate_T state;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1166 qffields_T fields;
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1167 #ifdef FEAT_WINDOWS
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1168 qfline_T *old_last = NULL;
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
1169 #endif
10369
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1170 int adding = FALSE;
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1171 static efm_T *fmt_first = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 char_u *efm;
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1173 static char_u *last_efm = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 int retval = -1; /* default: return error flag */
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1175 int status;
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1176
11443
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
1177 /* Do not used the cached buffer, it may have been wiped out. */
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
1178 vim_free(qf_last_bufname);
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
1179 qf_last_bufname = NULL;
30b3775addb2 patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents: 11426
diff changeset
1180
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1181 vim_memset(&state, 0, sizeof(state));
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1182 vim_memset(&fields, 0, sizeof(fields));
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1183 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1184 state.vc.vc_type = CONV_NONE;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1185 if (enc != NULL && *enc != NUL)
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1186 convert_setup(&state.vc, enc, p_enc);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1187 #endif
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1188 fields.namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1189 fields.errmsglen = CMDBUFFSIZE + 1;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1190 fields.errmsg = alloc_id(fields.errmsglen, aid_qf_errmsg);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1191 fields.pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1192 if (fields.namebuf == NULL || fields.errmsg == NULL ||
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1193 fields.pattern == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 goto qf_init_end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1196 if (efile != NULL && (state.fd = mch_fopen((char *)efile, "r")) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 EMSG2(_(e_openerrf), efile);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 goto qf_init_end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1202 if (newlist || qf_idx == qi->qf_listcount)
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1203 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 /* make place for a new list */
3965
eccae034465b updated for version 7.3.738
Bram Moolenaar <bram@vim.org>
parents: 3949
diff changeset
1205 qf_new_list(qi, qf_title);
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1206 qf_idx = qi->qf_curlist;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1207 }
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
1208 else
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1209 {
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1210 /* Adding to existing list, use last entry. */
10369
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1211 adding = TRUE;
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
1212 #ifdef FEAT_WINDOWS
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1213 if (qi->qf_lists[qf_idx].qf_count > 0)
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1214 old_last = qi->qf_lists[qf_idx].qf_last;
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
1215 #endif
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
1216 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1218 qfl = &qi->qf_lists[qf_idx];
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1219
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 /* Use the local value of 'errorformat' if it's set. */
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1221 if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1222 efm = buf->b_p_efm;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 efm = errorformat;
9365
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
1225
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1226 /*
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1227 * If the errorformat didn't change between calls, then reuse the
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1228 * previously parsed values.
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1229 */
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1230 if (last_efm == NULL || (STRCMP(last_efm, efm) != 0))
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1231 {
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1232 /* free the previously parsed data */
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1233 vim_free(last_efm);
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1234 last_efm = NULL;
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1235 free_efm_list(&fmt_first);
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1236
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1237 /* parse the current 'efm' */
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1238 fmt_first = parse_efm_option(efm);
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1239 if (fmt_first != NULL)
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1240 last_efm = vim_strsave(efm);
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1241 }
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1242
9365
3830a92c12bf commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents: 9334
diff changeset
1243 if (fmt_first == NULL) /* nothing found */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 goto error2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 * got_int is reset here, because it was probably set when killing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 * ":make" command, but we still want to read the errorfile then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1252 if (tv != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1253 {
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1254 if (tv->v_type == VAR_STRING)
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1255 state.p_str = tv->vval.v_string;
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1256 else if (tv->v_type == VAR_LIST)
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1257 state.p_li = tv->vval.v_list->lv_first;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1258 state.tv = tv;
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1259 }
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1260 state.buf = buf;
9534
340106787852 commit https://github.com/vim/vim/commit/bfafb4c4a01db3f8c508716daf689e0dfe92b649
Christian Brabandt <cb@256bit.org>
parents: 9531
diff changeset
1261 state.buflnum = lnumfirst;
340106787852 commit https://github.com/vim/vim/commit/bfafb4c4a01db3f8c508716daf689e0dfe92b649
Christian Brabandt <cb@256bit.org>
parents: 9531
diff changeset
1262 state.lnumlast = lnumlast;
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
1263
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 * Read the lines in the error file one by one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 * Try to recognize one of the error formats in each line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 */
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
1268 while (!got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 {
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1270 /* Get the next line from a file/buffer/list/string */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1271 status = qf_get_nextline(&state);
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1272 if (status == QF_NOMEM) /* memory alloc failure */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1273 goto qf_init_end;
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1274 if (status == QF_END_OF_INPUT) /* end of input */
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1275 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1277 status = qf_parse_line(qi, qf_idx, state.linebuf, state.linelen,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1278 fmt_first, &fields);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1279 if (status == QF_FAIL)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1280 goto error2;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1281 if (status == QF_NOMEM)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1282 goto qf_init_end;
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1283 if (status == QF_IGNORE_LINE)
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1284 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1286 if (qf_add_entry(qi,
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1287 qf_idx,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1288 qfl->qf_directory,
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1289 (*fields.namebuf || qfl->qf_directory != NULL)
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1290 ? fields.namebuf
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1291 : ((qfl->qf_currfile != NULL && fields.valid)
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1292 ? qfl->qf_currfile : (char_u *)NULL),
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
1293 0,
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1294 fields.errmsg,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1295 fields.lnum,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1296 fields.col,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1297 fields.use_viscol,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1298 fields.pattern,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1299 fields.enr,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1300 fields.type,
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1301 fields.valid) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 goto error2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 line_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 }
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1305 if (state.fd == NULL || !ferror(state.fd))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1307 if (qfl->qf_index == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1309 /* no valid entry found */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1310 qfl->qf_ptr = qfl->qf_start;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1311 qfl->qf_index = 1;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1312 qfl->qf_nonevalid = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1316 qfl->qf_nonevalid = FALSE;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1317 if (qfl->qf_ptr == NULL)
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1318 qfl->qf_ptr = qfl->qf_start;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1320 /* return number of matches */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1321 retval = qfl->qf_count;
9369
ce5b79b005ec commit https://github.com/vim/vim/commit/bcf7772a23624edc0942120e564f6b4ac95604ad
Christian Brabandt <cb@256bit.org>
parents: 9365
diff changeset
1322 goto qf_init_end;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 EMSG(_(e_readerrf));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 error2:
10369
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1326 if (!adding)
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1327 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1328 /* Error when creating a new list. Free the new list */
10369
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1329 qf_free(qi, qi->qf_curlist);
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1330 qi->qf_listcount--;
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1331 if (qi->qf_curlist > 0)
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1332 --qi->qf_curlist;
4e5b307638cb commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents: 10367
diff changeset
1333 }
9369
ce5b79b005ec commit https://github.com/vim/vim/commit/bcf7772a23624edc0942120e564f6b4ac95604ad
Christian Brabandt <cb@256bit.org>
parents: 9365
diff changeset
1334 qf_init_end:
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1335 if (state.fd != NULL)
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1336 fclose(state.fd);
9568
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1337 vim_free(fields.namebuf);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1338 vim_free(fields.errmsg);
ccbd2e604e59 commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents: 9540
diff changeset
1339 vim_free(fields.pattern);
9531
50697f3b49d6 commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1340 vim_free(state.growbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 #ifdef FEAT_WINDOWS
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1343 if (qf_idx == qi->qf_curlist)
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1344 qf_update_buffer(qi, old_last);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 #endif
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1346 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1347 if (state.vc.vc_type != CONV_NONE)
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1348 convert_setup(&state.vc, NULL, NULL);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
1349 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1354 static void
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1355 qf_store_title(qf_info_T *qi, int qf_idx, char_u *title)
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1356 {
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
1357 vim_free(qi->qf_lists[qf_idx].qf_title);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
1358 qi->qf_lists[qf_idx].qf_title = NULL;
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
1359
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1360 if (title != NULL)
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1361 {
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1362 char_u *p = alloc((int)STRLEN(title) + 2);
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1363
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1364 qi->qf_lists[qf_idx].qf_title = p;
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1365 if (p != NULL)
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1366 sprintf((char *)p, ":%s", (char *)title);
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1367 }
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1368 }
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1369
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 * Prepare for adding a new quickfix list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1374 qf_new_list(qf_info_T *qi, char_u *qf_title)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 /*
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
1379 * If the current entry is not the last entry, delete entries beyond
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 * the current entry. This makes it possible to browse in a tree-like
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 * way with ":grep'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1383 while (qi->qf_listcount > qi->qf_curlist + 1)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1384 qf_free(qi, --qi->qf_listcount);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 * When the stack is full, remove to oldest entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 * Otherwise, add a new entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1390 if (qi->qf_listcount == LISTCOUNT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1392 qf_free(qi, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 for (i = 1; i < LISTCOUNT; ++i)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1394 qi->qf_lists[i - 1] = qi->qf_lists[i];
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1395 qi->qf_curlist = LISTCOUNT - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 else
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1398 qi->qf_curlist = qi->qf_listcount++;
3259
9eb7fdfb5e63 updated for version 7.3.398
Bram Moolenaar <bram@vim.org>
parents: 3257
diff changeset
1399 vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1400 qf_store_title(qi, qi->qf_curlist, qf_title);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1403 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1404 * Free a location list
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1405 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1406 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1407 ll_free_all(qf_info_T **pqi)
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 297
diff changeset
1408 {
6c62b9b939bd updated for version 7.0093
vimboss
parents: 297
diff changeset
1409 int i;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1410 qf_info_T *qi;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1411
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1412 qi = *pqi;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1413 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1414 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1415 *pqi = NULL; /* Remove reference to this list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1416
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1417 qi->qf_refcount--;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1418 if (qi->qf_refcount < 1)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1419 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1420 /* No references to this location list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1421 for (i = 0; i < qi->qf_listcount; ++i)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1422 qf_free(qi, i);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1423 vim_free(qi);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1424 }
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 297
diff changeset
1425 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1426
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1427 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1428 qf_free_all(win_T *wp)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1429 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1430 int i;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1431 qf_info_T *qi = &ql_info;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1432
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1433 if (wp != NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1434 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1435 /* location list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1436 ll_free_all(&wp->w_llist);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1437 ll_free_all(&wp->w_llist_ref);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1438 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1439 else
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1440 /* quickfix list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1441 for (i = 0; i < qi->qf_listcount; ++i)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1442 qf_free(qi, i);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1443 }
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 297
diff changeset
1444
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 * Add an entry to the end of the list of errors.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 * Returns OK or FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1450 qf_add_entry(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1451 qf_info_T *qi, /* quickfix list */
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1452 int qf_idx, /* list index */
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1453 char_u *dir, /* optional directory name */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1454 char_u *fname, /* file name or NULL */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1455 int bufnum, /* buffer number or zero */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1456 char_u *mesg, /* message */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1457 long lnum, /* line number */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1458 int col, /* column */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1459 int vis_col, /* using visual column */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1460 char_u *pattern, /* search pattern */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1461 int nr, /* error number */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1462 int type, /* type character */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1463 int valid) /* valid entry */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1465 qfline_T *qfp;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1466 qfline_T **lastp; /* pointer to qf_last or NULL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1468 if ((qfp = (qfline_T *)alloc((unsigned)sizeof(qfline_T))) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 return FAIL;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
1470 if (bufnum != 0)
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1471 {
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1472 buf_T *buf = buflist_findnr(bufnum);
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1473
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
1474 qfp->qf_fnum = bufnum;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1475 if (buf != NULL)
9608
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
1476 buf->b_has_qf_entry |=
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
1477 (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1478 }
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
1479 else
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1480 qfp->qf_fnum = qf_get_fnum(qi, qf_idx, dir, fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 if ((qfp->qf_text = vim_strsave(mesg)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 vim_free(qfp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 qfp->qf_lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 qfp->qf_col = col;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
1488 qfp->qf_viscol = vis_col;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1489 if (pattern == NULL || *pattern == NUL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1490 qfp->qf_pattern = NULL;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1491 else if ((qfp->qf_pattern = vim_strsave(pattern)) == NULL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1492 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1493 vim_free(qfp->qf_text);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1494 vim_free(qfp);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1495 return FAIL;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1496 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 qfp->qf_nr = nr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 if (type != 1 && !vim_isprintc(type)) /* only printable chars allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 qfp->qf_type = type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 qfp->qf_valid = valid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1503 lastp = &qi->qf_lists[qf_idx].qf_last;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1504 if (qi->qf_lists[qf_idx].qf_count == 0)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1505 /* first element in the list */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 {
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1507 qi->qf_lists[qf_idx].qf_start = qfp;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1508 qi->qf_lists[qf_idx].qf_ptr = qfp;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1509 qi->qf_lists[qf_idx].qf_index = 0;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1510 qfp->qf_prev = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 {
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1514 qfp->qf_prev = *lastp;
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1515 (*lastp)->qf_next = qfp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 }
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1517 qfp->qf_next = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 qfp->qf_cleared = FALSE;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1519 *lastp = qfp;
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1520 ++qi->qf_lists[qf_idx].qf_count;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1521 if (qi->qf_lists[qf_idx].qf_index == 0 && qfp->qf_valid)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1522 /* first valid entry */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 {
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1524 qi->qf_lists[qf_idx].qf_index =
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1525 qi->qf_lists[qf_idx].qf_count;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1526 qi->qf_lists[qf_idx].qf_ptr = qfp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 /*
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1533 * Allocate a new location list
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1534 */
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1535 static qf_info_T *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1536 ll_new_list(void)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1537 {
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1538 qf_info_T *qi;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1539
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1540 qi = (qf_info_T *)alloc((unsigned)sizeof(qf_info_T));
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1541 if (qi != NULL)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1542 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1543 vim_memset(qi, 0, (size_t)(sizeof(qf_info_T)));
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1544 qi->qf_refcount++;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1545 }
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1546
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1547 return qi;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1548 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1549
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1550 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1551 * Return the location list for window 'wp'.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1552 * If not present, allocate a location list
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1553 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1554 static qf_info_T *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1555 ll_get_or_alloc_list(win_T *wp)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1556 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1557 if (IS_LL_WINDOW(wp))
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1558 /* For a location list window, use the referenced location list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1559 return wp->w_llist_ref;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1560
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1561 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1562 * For a non-location list window, w_llist_ref should not point to a
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1563 * location list.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1564 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1565 ll_free_all(&wp->w_llist_ref);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1566
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1567 if (wp->w_llist == NULL)
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1568 wp->w_llist = ll_new_list(); /* new location list */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1569 return wp->w_llist;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1570 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1571
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1572 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1573 * Copy the location list from window "from" to window "to".
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1574 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1575 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1576 copy_loclist(win_T *from, win_T *to)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1577 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1578 qf_info_T *qi;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1579 int idx;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1580 int i;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1581
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1582 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1583 * When copying from a location list window, copy the referenced
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1584 * location list. For other windows, copy the location list for
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1585 * that window.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1586 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1587 if (IS_LL_WINDOW(from))
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1588 qi = from->w_llist_ref;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1589 else
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1590 qi = from->w_llist;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1591
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1592 if (qi == NULL) /* no location list to copy */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1593 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1594
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1595 /* allocate a new location list */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
1596 if ((to->w_llist = ll_new_list()) == NULL)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1597 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1598
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1599 to->w_llist->qf_listcount = qi->qf_listcount;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1600
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1601 /* Copy the location lists one at a time */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1602 for (idx = 0; idx < qi->qf_listcount; idx++)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1603 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1604 qf_list_T *from_qfl;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1605 qf_list_T *to_qfl;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1606
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1607 to->w_llist->qf_curlist = idx;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1608
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1609 from_qfl = &qi->qf_lists[idx];
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1610 to_qfl = &to->w_llist->qf_lists[idx];
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1611
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1612 /* Some of the fields are populated by qf_add_entry() */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1613 to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1614 to_qfl->qf_count = 0;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1615 to_qfl->qf_index = 0;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1616 to_qfl->qf_start = NULL;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1617 to_qfl->qf_last = NULL;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1618 to_qfl->qf_ptr = NULL;
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1619 if (from_qfl->qf_title != NULL)
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1620 to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1621 else
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
1622 to_qfl->qf_title = NULL;
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1623 if (from_qfl->qf_ctx != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1624 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1625 to_qfl->qf_ctx = alloc_tv();
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1626 if (to_qfl->qf_ctx != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1627 copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx);
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1628 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1629 else
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
1630 to_qfl->qf_ctx = NULL;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1631
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1632 if (from_qfl->qf_count)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1633 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1634 qfline_T *from_qfp;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1635 qfline_T *prevp;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1636
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1637 /* copy all the location entries in this list */
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1638 for (i = 0, from_qfp = from_qfl->qf_start;
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1639 i < from_qfl->qf_count && from_qfp != NULL;
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1640 ++i, from_qfp = from_qfp->qf_next)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1641 {
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1642 if (qf_add_entry(to->w_llist,
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
1643 to->w_llist->qf_curlist,
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1644 NULL,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1645 NULL,
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
1646 0,
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1647 from_qfp->qf_text,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1648 from_qfp->qf_lnum,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1649 from_qfp->qf_col,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1650 from_qfp->qf_viscol,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1651 from_qfp->qf_pattern,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1652 from_qfp->qf_nr,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1653 0,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1654 from_qfp->qf_valid) == FAIL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1655 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1656 qf_free_all(to);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1657 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1658 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1659 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1660 * qf_add_entry() will not set the qf_num field, as the
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1661 * directory and file names are not supplied. So the qf_fnum
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1662 * field is copied here.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1663 */
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1664 prevp = to->w_llist->qf_lists[to->w_llist->qf_curlist].qf_last;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1665 prevp->qf_fnum = from_qfp->qf_fnum; /* file number */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1666 prevp->qf_type = from_qfp->qf_type; /* error type */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1667 if (from_qfl->qf_ptr == from_qfp)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1668 to_qfl->qf_ptr = prevp; /* current location */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1669 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1670 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1671
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1672 to_qfl->qf_index = from_qfl->qf_index; /* current index in the list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1673
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1674 /* When no valid entries are present in the list, qf_ptr points to
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1675 * the first item in the list */
2795
133d089f247e updated for version 7.3.173
Bram Moolenaar <bram@vim.org>
parents: 2782
diff changeset
1676 if (to_qfl->qf_nonevalid)
5060
30910831e5b0 updated for version 7.3.1273
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1677 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1678 to_qfl->qf_ptr = to_qfl->qf_start;
5060
30910831e5b0 updated for version 7.3.1273
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1679 to_qfl->qf_index = 1;
30910831e5b0 updated for version 7.3.1273
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1680 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1681 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1682
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1683 to->w_llist->qf_curlist = qi->qf_curlist; /* current list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1684 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1685
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1686 /*
10379
73e2a7abe2a3 commit https://github.com/vim/vim/commit/7618e00d3b8bfe064cfc524640d754607361f9df
Christian Brabandt <cb@256bit.org>
parents: 10369
diff changeset
1687 * Get buffer number for file "directory/fname".
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1688 * Also sets the b_has_qf_entry flag.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 static int
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1691 qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *directory, char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1693 char_u *ptr = NULL;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1694 buf_T *buf;
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1695 char_u *bufname;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1696
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 if (fname == NULL || *fname == NUL) /* no file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2795
diff changeset
1700 #ifdef VMS
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1701 vms_remove_version(fname);
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2795
diff changeset
1702 #endif
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2795
diff changeset
1703 #ifdef BACKSLASH_IN_FILENAME
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1704 if (directory != NULL)
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1705 slash_adjust(directory);
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1706 slash_adjust(fname);
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2795
diff changeset
1707 #endif
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1708 if (directory != NULL && !vim_isAbsName(fname)
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1709 && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1710 {
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1711 /*
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1712 * Here we check if the file really exists.
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1713 * This should normally be true, but if make works without
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1714 * "leaving directory"-messages we might have missed a
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1715 * directory change.
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1716 */
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1717 if (mch_getperm(ptr) < 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 vim_free(ptr);
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1720 directory = qf_guess_filepath(qi, qf_idx, fname);
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1721 if (directory)
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1722 ptr = concat_fnames(directory, fname, TRUE);
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1723 else
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1724 ptr = vim_strsave(fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 }
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1726 /* Use concatenated directory name and file name */
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1727 bufname = ptr;
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1728 }
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1729 else
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1730 bufname = fname;
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1731
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1732 if (qf_last_bufname != NULL && STRCMP(bufname, qf_last_bufname) == 0
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1733 && bufref_valid(&qf_last_bufref))
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1734 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1735 buf = qf_last_bufref.br_buf;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1736 vim_free(ptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 }
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1738 else
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1739 {
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1740 vim_free(qf_last_bufname);
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1741 buf = buflist_new(bufname, NULL, (linenr_T)0, BLN_NOOPT);
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1742 if (bufname == ptr)
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1743 qf_last_bufname = bufname;
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1744 else
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1745 qf_last_bufname = vim_strsave(bufname);
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1746 set_bufref(&qf_last_bufref, buf);
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1747 }
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1748 if (buf == NULL)
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1749 return 0;
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9458
diff changeset
1750
9608
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
1751 buf->b_has_qf_entry =
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
1752 (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
1753 return buf->b_fnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 /*
9334
674f9e3ccd1a commit https://github.com/vim/vim/commit/38df43bd13a2498cc96b3ddd9a20dd75126bd171
Christian Brabandt <cb@256bit.org>
parents: 9201
diff changeset
1757 * Push dirbuf onto the directory stack and return pointer to actual dir or
674f9e3ccd1a commit https://github.com/vim/vim/commit/38df43bd13a2498cc96b3ddd9a20dd75126bd171
Christian Brabandt <cb@256bit.org>
parents: 9201
diff changeset
1758 * NULL on error.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 static char_u *
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1761 qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr, int is_file_stack)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 struct dir_stack_T *ds_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 struct dir_stack_T *ds_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 /* allocate new stack element and hook it in */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 ds_new = (struct dir_stack_T *)alloc((unsigned)sizeof(struct dir_stack_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 if (ds_new == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 ds_new->next = *stackptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 *stackptr = ds_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 /* store directory on the stack */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 if (vim_isAbsName(dirbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 || (*stackptr)->next == NULL
9397
e08e8b00fe48 commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1777 || (*stackptr && is_file_stack))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 (*stackptr)->dirname = vim_strsave(dirbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 /* Okay we don't have an absolute path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 * dirbuf must be a subdir of one of the directories on the stack.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 * Let's search...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 ds_new = (*stackptr)->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 (*stackptr)->dirname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 while (ds_new)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 vim_free((*stackptr)->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 (*stackptr)->dirname = concat_fnames(ds_new->dirname, dirbuf,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 if (mch_isdir((*stackptr)->dirname) == TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 ds_new = ds_new->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 /* clean up all dirs we already left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 while ((*stackptr)->next != ds_new)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 ds_ptr = (*stackptr)->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 (*stackptr)->next = (*stackptr)->next->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 vim_free(ds_ptr->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 vim_free(ds_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 /* Nothing found -> it must be on top level */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 if (ds_new == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 vim_free((*stackptr)->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 (*stackptr)->dirname = vim_strsave(dirbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 if ((*stackptr)->dirname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 return (*stackptr)->dirname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 ds_ptr = *stackptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 *stackptr = (*stackptr)->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 vim_free(ds_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 * pop dirbuf from the directory stack and return previous directory or NULL if
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 * stack is empty
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 static char_u *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1832 qf_pop_dir(struct dir_stack_T **stackptr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 struct dir_stack_T *ds_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 /* TODO: Should we check if dirbuf is the directory on top of the stack?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 * What to do if it isn't? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 /* pop top element and free it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 if (*stackptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 ds_ptr = *stackptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 *stackptr = (*stackptr)->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 vim_free(ds_ptr->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 vim_free(ds_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 /* return NEW top element as current dir or NULL if stack is empty*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 return *stackptr ? (*stackptr)->dirname : NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 * clean up directory stack
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1856 qf_clean_dir_stack(struct dir_stack_T **stackptr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 struct dir_stack_T *ds_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 while ((ds_ptr = *stackptr) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 *stackptr = (*stackptr)->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 vim_free(ds_ptr->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 vim_free(ds_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 * Check in which directory of the directory stack the given file can be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 * found.
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
1871 * Returns a pointer to the directory name or NULL if not found.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 * Cleans up intermediate directory entries.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 * TODO: How to solve the following problem?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 * If we have the this directory tree:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 * ./
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 * ./aa
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 * ./aa/bb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 * ./bb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 * ./bb/x.c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 * and make says:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 * making all in aa
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 * making all in bb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 * x.c:9: Error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 * Then qf_push_dir thinks we are in ./aa/bb, but we are in ./bb.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 * qf_guess_filepath will return NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 static char_u *
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1889 qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *filename)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 struct dir_stack_T *ds_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 struct dir_stack_T *ds_tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 char_u *fullname;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1894 qf_list_T *qfl = &qi->qf_lists[qf_idx];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 /* no dirs on the stack - there's nothing we can do */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1897 if (qfl->qf_dir_stack == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1900 ds_ptr = qfl->qf_dir_stack->next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 fullname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 while (ds_ptr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 vim_free(fullname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 fullname = concat_fnames(ds_ptr->dirname, filename, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 /* If concat_fnames failed, just go on. The worst thing that can happen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 * is that we delete the entire stack.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 if ((fullname != NULL) && (mch_getperm(fullname) >= 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 ds_ptr = ds_ptr->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 vim_free(fullname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 /* clean up all dirs we already left */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1919 while (qfl->qf_dir_stack->next != ds_ptr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1921 ds_tmp = qfl->qf_dir_stack->next;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
1922 qfl->qf_dir_stack->next = qfl->qf_dir_stack->next->next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 vim_free(ds_tmp->dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 vim_free(ds_tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 return ds_ptr==NULL? NULL: ds_ptr->dirname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 /*
8702
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1931 * When loading a file from the quickfix, the auto commands may modify it.
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1932 * This may invalidate the current quickfix entry. This function checks
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1933 * whether a entry is still present in the quickfix.
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1934 * Similar to location list.
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1935 */
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1936 static int
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1937 is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr)
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1938 {
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1939 qf_list_T *qfl;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1940 qfline_T *qfp;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1941 int i;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1942
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1943 qfl = &qi->qf_lists[qi->qf_curlist];
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1944
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1945 /* Search for the entry in the current list */
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1946 for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1947 ++i, qfp = qfp->qf_next)
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
1948 if (qfp == NULL || qfp == qf_ptr)
8702
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1949 break;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1950
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1951 if (i == qfl->qf_count) /* Entry is not found */
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1952 return FALSE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1953
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1954 return TRUE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1955 }
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1956
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
1957 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 * jump to a quickfix line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 * if dir == FORWARD go "errornr" valid entries forward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 * if dir == BACKWARD go "errornr" valid entries backward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 * if dir == FORWARD_FILE go "errornr" valid entries files backward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 * if dir == BACKWARD_FILE go "errornr" valid entries files backward
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 * else if "errornr" is zero, redisplay the same line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 * else go to entry "errornr"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1967 qf_jump(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1968 qf_info_T *qi,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1969 int dir,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1970 int errornr,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
1971 int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
1973 qf_info_T *ll_ref;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1974 qfline_T *qf_ptr;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
1975 qfline_T *old_qf_ptr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 int qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 int old_qf_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 int old_qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1979 int prev_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 static char_u *e_no_more_items = (char_u *)N_("E553: No more items");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 char_u *err = e_no_more_items;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 linenr_T i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 buf_T *old_curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 linenr_T old_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985 colnr_T screen_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 colnr_T char_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 char_u *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 #ifdef FEAT_WINDOWS
639
c79d4df4686e updated for version 7.0185
vimboss
parents: 634
diff changeset
1989 char_u *old_swb = p_swb;
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
1990 unsigned old_swb_flags = swb_flags;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 int opened_window = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 win_T *win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 win_T *altwin;
1822
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
1994 int flags;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 #endif
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
1996 win_T *oldwin = curwin;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 int print_message = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 int old_KeyTyped = KeyTyped; /* getting file may reset it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 #endif
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2002 int ok = OK;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2003 int usable_win;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2004
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2005 if (qi == NULL)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2006 qi = &ql_info;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2007
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2008 if (qi->qf_curlist >= qi->qf_listcount
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2009 || qi->qf_lists[qi->qf_curlist].qf_count == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 EMSG(_(e_quickfix));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2015 qf_ptr = qi->qf_lists[qi->qf_curlist].qf_ptr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 old_qf_ptr = qf_ptr;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2017 qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 old_qf_index = qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 if (dir == FORWARD || dir == FORWARD_FILE) /* next valid entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 while (errornr--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 old_qf_ptr = qf_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 prev_index = qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 old_qf_fnum = qf_ptr->qf_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2028 if (qf_index == qi->qf_lists[qi->qf_curlist].qf_count
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 || qf_ptr->qf_next == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 qf_ptr = old_qf_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 qf_index = prev_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 if (err != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 EMSG(_(err));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 errornr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 ++qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 qf_ptr = qf_ptr->qf_next;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2043 } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2044 && !qf_ptr->qf_valid)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 || (dir == FORWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 err = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 else if (dir == BACKWARD || dir == BACKWARD_FILE) /* prev. valid entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 while (errornr--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 old_qf_ptr = qf_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 prev_index = qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 old_qf_fnum = qf_ptr->qf_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 if (qf_index == 1 || qf_ptr->qf_prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 qf_ptr = old_qf_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 qf_index = prev_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 if (err != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 EMSG(_(err));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 errornr = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 --qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 qf_ptr = qf_ptr->qf_prev;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2072 } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2073 && !qf_ptr->qf_valid)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 || (dir == BACKWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 err = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 else if (errornr != 0) /* go to specified number */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 while (errornr < qf_index && qf_index > 1 && qf_ptr->qf_prev != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 --qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 qf_ptr = qf_ptr->qf_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2085 while (errornr > qf_index && qf_index <
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2086 qi->qf_lists[qi->qf_curlist].qf_count
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 && qf_ptr->qf_next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 ++qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 qf_ptr = qf_ptr->qf_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 #ifdef FEAT_WINDOWS
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2095 qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2096 if (qf_win_pos_update(qi, old_qf_index))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 /* No need to print the error message if it's visible in the error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 * window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 print_message = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 /*
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2102 * For ":helpgrep" find a help window or open one.
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2103 */
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2104 if (qf_ptr->qf_type == 1 && (!curwin->w_buffer->b_help || cmdmod.tab != 0))
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2105 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2106 win_T *wp;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2107
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2108 if (cmdmod.tab != 0)
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2109 wp = NULL;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2110 else
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9608
diff changeset
2111 FOR_ALL_WINDOWS(wp)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2112 if (wp->w_buffer != NULL && wp->w_buffer->b_help)
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2113 break;
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2114 if (wp != NULL && wp->w_buffer->b_nwindows > 0)
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2115 win_enter(wp, TRUE);
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2116 else
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2117 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2118 /*
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2119 * Split off help window; put it at far top if no position
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2120 * specified, the current window is vertically split and narrow.
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2121 */
1822
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2122 flags = WSP_HELP;
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2123 if (cmdmod.split == 0 && curwin->w_width != Columns
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2124 && curwin->w_width < 80)
1822
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2125 flags |= WSP_TOP;
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2126 if (qi != &ql_info)
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2127 flags |= WSP_NEWLOC; /* don't copy the location list */
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2128
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2129 if (win_split(0, flags) == FAIL)
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2130 goto theend;
26
404aac550f35 updated for version 7.0017
vimboss
parents: 17
diff changeset
2131 opened_window = TRUE; /* close it when fail */
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2132
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2133 if (curwin->w_height < p_hh)
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2134 win_setheight((int)p_hh);
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2135
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2136 if (qi != &ql_info) /* not a quickfix list */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2137 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2138 /* The new window should use the supplied location list */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2139 curwin->w_llist = qi;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2140 qi->qf_refcount++;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
2141 }
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2142 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2143
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2144 if (!p_im)
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2145 restart_edit = 0; /* don't want insert mode in help file */
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2146 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2147
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2148 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 * If currently in the quickfix window, find another window to show the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 * file in.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 */
26
404aac550f35 updated for version 7.0017
vimboss
parents: 17
diff changeset
2152 if (bt_quickfix(curbuf) && !opened_window)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 {
5062
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2154 win_T *usable_win_ptr = NULL;
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2155
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 * If there is no file specified, we don't know where to go.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 * But do advance, otherwise ":cn" gets stuck.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 if (qf_ptr->qf_fnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2163 usable_win = 0;
5062
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2164
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2165 ll_ref = curwin->w_llist_ref;
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2166 if (ll_ref != NULL)
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2167 {
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2168 /* Find a window using the same location list that is not a
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2169 * quickfix window. */
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2170 FOR_ALL_WINDOWS(usable_win_ptr)
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2171 if (usable_win_ptr->w_llist == ll_ref
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
2172 && !bt_quickfix(usable_win_ptr->w_buffer))
5084
14e7a115d54d updated for version 7.3.1285
Bram Moolenaar <bram@vim.org>
parents: 5062
diff changeset
2173 {
14e7a115d54d updated for version 7.3.1285
Bram Moolenaar <bram@vim.org>
parents: 5062
diff changeset
2174 usable_win = 1;
5062
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2175 break;
5084
14e7a115d54d updated for version 7.3.1285
Bram Moolenaar <bram@vim.org>
parents: 5062
diff changeset
2176 }
5062
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2177 }
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2178
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2179 if (!usable_win)
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2180 {
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2181 /* Locate a window showing a normal buffer */
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2182 FOR_ALL_WINDOWS(win)
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2183 if (win->w_buffer->b_p_bt[0] == NUL)
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2184 {
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2185 usable_win = 1;
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2186 break;
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2187 }
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2188 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2189
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 /*
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2191 * If no usable window is found and 'switchbuf' contains "usetab"
1020
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2192 * then search in other tabs.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 */
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2194 if (!usable_win && (swb_flags & SWB_USETAB))
1020
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2195 {
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2196 tabpage_T *tp;
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2197 win_T *wp;
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2198
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2199 FOR_ALL_TAB_WINDOWS(tp, wp)
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2200 {
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2201 if (wp->w_buffer->b_fnum == qf_ptr->qf_fnum)
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2202 {
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2203 goto_tabpage_win(tp, wp);
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2204 usable_win = 1;
1819
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1743
diff changeset
2205 goto win_found;
1020
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2206 }
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2207 }
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2208 }
1819
15130d4dfea1 updated for version 7.2-117
vimboss
parents: 1743
diff changeset
2209 win_found:
1020
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2210
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2211 /*
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
2212 * If there is only one window and it is the quickfix window, create a
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
2213 * new one above the quickfix window.
1020
be9fbf8b0cdb updated for version 7.0-146
vimboss
parents: 960
diff changeset
2214 */
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10346
diff changeset
2215 if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 {
1822
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2217 flags = WSP_ABOVE;
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2218 if (ll_ref != NULL)
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2219 flags |= WSP_NEWLOC;
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
2220 if (win_split(0, flags) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 goto failed; /* not enough room for window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 opened_window = TRUE; /* close it when fail */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 p_swb = empty_option; /* don't split again */
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2224 swb_flags = 0;
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2576
diff changeset
2225 RESET_BINDING(curwin);
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2226 if (ll_ref != NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2227 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2228 /* The new window should use the location list from the
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2229 * location list window */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2230 curwin->w_llist = ll_ref;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2231 ll_ref->qf_refcount++;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2232 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2236 if (curwin->w_llist_ref != NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2237 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2238 /* In a location window */
5062
761cef8f5d1d updated for version 7.3.1274
Bram Moolenaar <bram@vim.org>
parents: 5060
diff changeset
2239 win = usable_win_ptr;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2240 if (win == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2241 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2242 /* Find the window showing the selected file */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2243 FOR_ALL_WINDOWS(win)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2244 if (win->w_buffer->b_fnum == qf_ptr->qf_fnum)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2245 break;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2246 if (win == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2247 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2248 /* Find a previous usable window */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2249 win = curwin;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2250 do
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2251 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2252 if (win->w_buffer->b_p_bt[0] == NUL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2253 break;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2254 if (win->w_prev == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2255 win = lastwin; /* wrap around the top */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2256 else
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2257 win = win->w_prev; /* go to previous window */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2258 } while (win != curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2259 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2260 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2261 win_goto(win);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2262
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2263 /* If the location list for the window is not set, then set it
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2264 * to the location list from the location window */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2265 if (win->w_llist == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2266 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2267 win->w_llist = ll_ref;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2268 ll_ref->qf_refcount++;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2269 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2270 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2271 else
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2272 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2273
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 * Try to find a window that shows the right buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 * Default to the window just above the quickfix buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 altwin = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 if (win->w_buffer->b_fnum == qf_ptr->qf_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 if (win->w_prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 win = lastwin; /* wrap around the top */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 win = win->w_prev; /* go to previous window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2289 if (IS_QF_WINDOW(win))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 /* Didn't find it, go to the window before the quickfix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 * window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 if (altwin != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 win = altwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 else if (curwin->w_prev != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 win = curwin->w_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 win = curwin->w_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 /* Remember a usable window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 if (altwin == NULL && !win->w_p_pvw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 && win->w_buffer->b_p_bt[0] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 altwin = win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 win_goto(win);
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2309 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 * If there is a file name,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 * read the wanted file if needed, and check autowrite etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 old_curbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 old_lnum = curwin->w_cursor.lnum;
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2320
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2321 if (qf_ptr->qf_fnum != 0)
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2322 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2323 if (qf_ptr->qf_type == 1)
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2324 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2325 /* Open help file (do_ecmd() will set b_help flag, readfile() will
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2326 * set b_p_ro flag). */
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2327 if (!can_abandon(curbuf, forceit))
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2328 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2329 EMSG(_(e_nowrtmsg));
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2330 ok = FALSE;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2331 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2332 else
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2333 ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
2334 ECMD_HIDE + ECMD_SET_HELP,
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
2335 oldwin == curwin ? curwin : NULL);
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2336 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2337 else
8605
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2338 {
8702
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2339 int old_qf_curlist = qi->qf_curlist;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2340 int is_abort = FALSE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2341
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2342 ok = buflist_getfile(qf_ptr->qf_fnum,
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2343 (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
10281
92fa8e5ef210 commit https://github.com/vim/vim/commit/0a9046fbcb33770517ab0220b8100c4494bddab2
Christian Brabandt <cb@256bit.org>
parents: 10257
diff changeset
2344 if (qi != &ql_info && !win_valid_any_tab(oldwin))
8605
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2345 {
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2346 EMSG(_("E924: Current window was closed"));
8702
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2347 is_abort = TRUE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2348 opened_window = FALSE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2349 }
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2350 else if (old_qf_curlist != qi->qf_curlist
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2351 || !is_qf_entry_present(qi, qf_ptr))
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2352 {
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2353 if (qi == &ql_info)
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2354 EMSG(_("E925: Current quickfix was changed"));
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2355 else
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2356 EMSG(_("E926: Current location list was changed"));
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2357 is_abort = TRUE;
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2358 }
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2359
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2360 if (is_abort)
39d6e4f2f748 commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
2361 {
8605
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2362 ok = FALSE;
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2363 qi = NULL;
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2364 qf_ptr = NULL;
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2365 }
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2366 }
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2367 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2368
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
2369 if (ok == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 /* When not switched to another buffer, still need to set pc mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 if (curbuf == old_curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2375 if (qf_ptr->qf_pattern == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2377 /*
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2378 * Go to line with error, unless qf_lnum is 0.
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2379 */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2380 i = qf_ptr->qf_lnum;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2381 if (i > 0)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2382 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2383 if (i > curbuf->b_ml.ml_line_count)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2384 i = curbuf->b_ml.ml_line_count;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2385 curwin->w_cursor.lnum = i;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2386 }
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2387 if (qf_ptr->qf_col > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2389 curwin->w_cursor.col = qf_ptr->qf_col - 1;
6853
d1a87b307a50 patch 7.4.747
Bram Moolenaar <bram@vim.org>
parents: 6793
diff changeset
2390 #ifdef FEAT_VIRTUALEDIT
d1a87b307a50 patch 7.4.747
Bram Moolenaar <bram@vim.org>
parents: 6793
diff changeset
2391 curwin->w_cursor.coladd = 0;
d1a87b307a50 patch 7.4.747
Bram Moolenaar <bram@vim.org>
parents: 6793
diff changeset
2392 #endif
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2393 if (qf_ptr->qf_viscol == TRUE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2395 /*
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2396 * Check each character from the beginning of the error
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2397 * line up to the error column. For each tab character
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2398 * found, reduce the error column value by the length of
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2399 * a tab character.
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2400 */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2401 line = ml_get_curline();
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2402 screen_col = 0;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2403 for (char_col = 0; char_col < curwin->w_cursor.col; ++char_col)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2405 if (*line == NUL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2406 break;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2407 if (*line++ == '\t')
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2408 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2409 curwin->w_cursor.col -= 7 - (screen_col % 8);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2410 screen_col += 8 - (screen_col % 8);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2411 }
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2412 else
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2413 ++screen_col;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2416 check_cursor();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2418 else
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2419 beginline(BL_WHITE | BL_FIX);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 else
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2422 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2423 pos_T save_cursor;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2424
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2425 /* Move the cursor to the first line in the buffer */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2426 save_cursor = curwin->w_cursor;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2427 curwin->w_cursor.lnum = 0;
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1411
diff changeset
2428 if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1,
11521
578df034735d patch 8.0.0643: when a pattern search is slow Vim becomes unusable
Christian Brabandt <cb@256bit.org>
parents: 11516
diff changeset
2429 SEARCH_KEEP, NULL, NULL))
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2430 curwin->w_cursor = save_cursor;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2431 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 foldOpenCursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 if (print_message)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 {
3267
4eda43e1fce0 updated for version 7.3.402
Bram Moolenaar <bram@vim.org>
parents: 3259
diff changeset
2439 /* Update the screen before showing the message, unless the screen
4eda43e1fce0 updated for version 7.3.402
Bram Moolenaar <bram@vim.org>
parents: 3259
diff changeset
2440 * scrolled up. */
4eda43e1fce0 updated for version 7.3.402
Bram Moolenaar <bram@vim.org>
parents: 3259
diff changeset
2441 if (!msg_scrolled)
4eda43e1fce0 updated for version 7.3.402
Bram Moolenaar <bram@vim.org>
parents: 3259
diff changeset
2442 update_topline_redraw();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2444 qi->qf_lists[qi->qf_curlist].qf_count,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 qf_ptr->qf_cleared ? _(" (line deleted)") : "",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 /* Add the message, skipping leading whitespace and newlines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 len = (int)STRLEN(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 /* Output the message. Overwrite to avoid scrolling when the 'O'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 * flag is present in 'shortmess'; But when not jumping, print the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 * whole message. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2454 i = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 msg_scroll = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 else if (!msg_scrolled && shortmess(SHM_OVERALL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 msg_attr_keep(IObuff, 0, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 msg_scroll = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 if (opened_window)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467 win_close(curwin, TRUE); /* Close opened window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 #endif
8605
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2469 if (qf_ptr != NULL && qf_ptr->qf_fnum != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 * Couldn't open file, so put index back where it was. This could
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 * happen if the file was readonly and we changed something.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 failed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 qf_ptr = old_qf_ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 qf_index = old_qf_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 theend:
8605
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2483 if (qi != NULL)
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2484 {
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2485 qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2486 qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
536b9b88d1ca commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents: 8603
diff changeset
2487 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 if (p_swb != old_swb && opened_window)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 /* Restore old 'switchbuf' value, but not when an autocommand or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 * modeline has changed the value. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 if (p_swb == empty_option)
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2494 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 p_swb = old_swb;
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2496 swb_flags = old_swb_flags;
82b5078be2dd updated for version 7.2a
vimboss
parents: 1571
diff changeset
2497 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 free_string_option(old_swb);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 * ":clist": list all errors
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2506 * ":llist": list all locations
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2509 qf_list(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2511 buf_T *buf;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2512 char_u *fname;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2513 qfline_T *qfp;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2514 int i;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2515 int idx1 = 1;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2516 int idx2 = -1;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2517 char_u *arg = eap->arg;
9379
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2518 int plus = FALSE;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2519 int all = eap->forceit; /* if not :cl!, only show
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 recognised errors */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2521 qf_info_T *qi = &ql_info;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2522
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2523 if (eap->cmdidx == CMD_llist)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2524 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2525 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2526 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2527 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2528 EMSG(_(e_loclist));
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2529 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2530 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2531 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2532
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2533 if (qi->qf_curlist >= qi->qf_listcount
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2534 || qi->qf_lists[qi->qf_curlist].qf_count == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 EMSG(_(e_quickfix));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 }
9379
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2539 if (*arg == '+')
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2540 {
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2541 ++arg;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2542 plus = TRUE;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2543 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 if (!get_list_range(&arg, &idx1, &idx2) || *arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 }
9379
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2549 if (plus)
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2550 {
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2551 i = qi->qf_lists[qi->qf_curlist].qf_index;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2552 idx2 = i + idx1;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2553 idx1 = i;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2554 }
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2555 else
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2556 {
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2557 i = qi->qf_lists[qi->qf_curlist].qf_count;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2558 if (idx1 < 0)
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2559 idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2560 if (idx2 < 0)
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2561 idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
b398e4e12751 commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents: 9369
diff changeset
2562 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2564 if (qi->qf_lists[qi->qf_curlist].qf_nonevalid)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 all = TRUE;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2566 qfp = qi->qf_lists[qi->qf_curlist].qf_start;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2567 for (i = 1; !got_int && i <= qi->qf_lists[qi->qf_curlist].qf_count; )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 {
2047
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 1918
diff changeset
2571 msg_putchar('\n');
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 1918
diff changeset
2572 if (got_int)
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 1918
diff changeset
2573 break;
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2574
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2575 fname = NULL;
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2576 if (qfp->qf_fnum != 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 && (buf = buflist_findnr(qfp->qf_fnum)) != NULL)
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2578 {
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2579 fname = buf->b_fname;
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2580 if (qfp->qf_type == 1) /* :helpgrep */
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2581 fname = gettail(fname);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2582 }
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2583 if (fname == NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2584 sprintf((char *)IObuff, "%2d", i);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2585 else
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2586 vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
273
2463194c8cdd updated for version 7.0073
vimboss
parents: 236
diff changeset
2587 i, (char *)fname);
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2588 msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index
11516
80491a71c716 patch 8.0.0641: cannot set a separate highlighting for the quickfix line
Christian Brabandt <cb@256bit.org>
parents: 11502
diff changeset
2589 ? HL_ATTR(HLF_QFL) : HL_ATTR(HLF_D));
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2590 if (qfp->qf_lnum == 0)
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2591 IObuff[0] = NUL;
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2592 else if (qfp->qf_col == 0)
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2593 sprintf((char *)IObuff, ":%ld", qfp->qf_lnum);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2594 else
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2595 sprintf((char *)IObuff, ":%ld col %d",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 qfp->qf_lnum, qfp->qf_col);
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2597 sprintf((char *)IObuff + STRLEN(IObuff), "%s:",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 (char *)qf_types(qfp->qf_type, qfp->qf_nr));
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
2599 msg_puts_attr(IObuff, HL_ATTR(HLF_N));
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2600 if (qfp->qf_pattern != NULL)
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2601 {
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2602 qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2603 STRCAT(IObuff, ":");
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2604 msg_puts(IObuff);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2605 }
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2606 msg_puts((char_u *)" ");
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2607
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2608 /* Remove newlines and leading whitespace from the text. For an
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2609 * unrecognized line keep the indent, the compiler may mark a word
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2610 * with ^^^^. */
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2611 qf_fmt_text((fname != NULL || qfp->qf_lnum != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 ? skipwhite(qfp->qf_text) : qfp->qf_text,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 IObuff, IOSIZE);
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2614 msg_prt_line(IObuff, FALSE);
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2615 out_flush(); /* show one line at a time */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2617
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2618 qfp = qfp->qf_next;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2619 if (qfp == NULL)
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2620 break;
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
2621 ++i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 * Remove newlines and leading whitespace from an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 * Put the result in "buf[bufsize]".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2631 qf_fmt_text(char_u *text, char_u *buf, int bufsize)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 char_u *p = text;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 for (i = 0; *p != NUL && i < bufsize - 1; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 if (*p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 buf[i] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 while (*++p != NUL)
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11063
diff changeset
2642 if (!VIM_ISWHITE(*p) && *p != '\n')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 buf[i] = *p++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 buf[i] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2651 static void
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2652 qf_msg(qf_info_T *qi, int which, char *lead)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2653 {
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2654 char *title = (char *)qi->qf_lists[which].qf_title;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2655 int count = qi->qf_lists[which].qf_count;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2656 char_u buf[IOSIZE];
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2657
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2658 vim_snprintf((char *)buf, IOSIZE, _("%serror list %d of %d; %d errors "),
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2659 lead,
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2660 which + 1,
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2661 qi->qf_listcount,
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2662 count);
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2663
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2664 if (title != NULL)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2665 {
9579
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2666 size_t len = STRLEN(buf);
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2667
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2668 if (len < 34)
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2669 {
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2670 vim_memset(buf + len, ' ', 34 - len);
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2671 buf[34] = NUL;
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2672 }
2fb7e008ac9b commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents: 9573
diff changeset
2673 vim_strcat(buf, (char_u *)title, IOSIZE);
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2674 }
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2675 trunc_string(buf, buf, Columns - 1, IOSIZE);
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2676 msg(buf);
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2677 }
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2678
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 * ":colder [count]": Up in the quickfix stack.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 * ":cnewer [count]": Down in the quickfix stack.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2682 * ":lolder [count]": Up in the location list stack.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2683 * ":lnewer [count]": Down in the location list stack.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2686 qf_age(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2688 qf_info_T *qi = &ql_info;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2691 if (eap->cmdidx == CMD_lolder || eap->cmdidx == CMD_lnewer)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2692 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2693 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2694 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2695 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2696 EMSG(_(e_loclist));
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2697 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2698 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2699 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2700
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 if (eap->addr_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 count = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705 while (count--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2707 if (eap->cmdidx == CMD_colder || eap->cmdidx == CMD_lolder)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2709 if (qi->qf_curlist == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 EMSG(_("E380: At bottom of quickfix stack"));
4371
000bb500208d updated for version 7.3.934
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2712 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2714 --qi->qf_curlist;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2718 if (qi->qf_curlist >= qi->qf_listcount - 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 EMSG(_("E381: At top of quickfix stack"));
4371
000bb500208d updated for version 7.3.934
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
2721 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2723 ++qi->qf_curlist;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 }
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2726 qf_msg(qi, qi->qf_curlist, "");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 #ifdef FEAT_WINDOWS
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
2728 qf_update_buffer(qi, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2732 void
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2733 qf_history(exarg_T *eap)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2734 {
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2735 qf_info_T *qi = &ql_info;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2736 int i;
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2737
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2738 if (eap->cmdidx == CMD_lhistory)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2739 qi = GET_LOC_LIST(curwin);
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2740 if (qi == NULL || (qi->qf_listcount == 0
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2741 && qi->qf_lists[qi->qf_curlist].qf_count == 0))
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2742 MSG(_("No entries"));
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2743 else
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2744 for (i = 0; i < qi->qf_listcount; ++i)
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2745 qf_msg(qi, i, i == qi->qf_curlist ? "> " : " ");
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2746 }
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9534
diff changeset
2747
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 /*
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2749 * Free all the entries in the error list "idx". Note that other information
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2750 * associated with the list like context and title are not freed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 static void
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2753 qf_free_items(qf_info_T *qi, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2755 qfline_T *qfp;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2756 qfline_T *qfpnext;
3982
4934eb2e22dc updated for version 7.3.746
Bram Moolenaar <bram@vim.org>
parents: 3974
diff changeset
2757 int stop = FALSE;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2758 qf_list_T *qfl = &qi->qf_lists[idx];
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2759
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2760 while (qfl->qf_count && qfl->qf_start != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2762 qfp = qfl->qf_start;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2763 qfpnext = qfp->qf_next;
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2764 if (qfl->qf_title != NULL && !stop)
3949
37a4cacd2051 updated for version 7.3.730
Bram Moolenaar <bram@vim.org>
parents: 3939
diff changeset
2765 {
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2766 vim_free(qfp->qf_text);
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2767 stop = (qfp == qfpnext);
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2768 vim_free(qfp->qf_pattern);
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2769 vim_free(qfp);
3982
4934eb2e22dc updated for version 7.3.746
Bram Moolenaar <bram@vim.org>
parents: 3974
diff changeset
2770 if (stop)
4934eb2e22dc updated for version 7.3.746
Bram Moolenaar <bram@vim.org>
parents: 3974
diff changeset
2771 /* Somehow qf_count may have an incorrect value, set it to 1
4934eb2e22dc updated for version 7.3.746
Bram Moolenaar <bram@vim.org>
parents: 3974
diff changeset
2772 * to avoid crashing when it's wrong.
4934eb2e22dc updated for version 7.3.746
Bram Moolenaar <bram@vim.org>
parents: 3974
diff changeset
2773 * TODO: Avoid qf_count being incorrect. */
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2774 qfl->qf_count = 1;
3949
37a4cacd2051 updated for version 7.3.730
Bram Moolenaar <bram@vim.org>
parents: 3939
diff changeset
2775 }
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2776 qfl->qf_start = qfpnext;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2777 --qfl->qf_count;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 }
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2779
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2780 qfl->qf_index = 0;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2781 qfl->qf_start = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2782 qfl->qf_last = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2783 qfl->qf_ptr = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2784 qfl->qf_nonevalid = TRUE;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2785
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2786 qf_clean_dir_stack(&qfl->qf_dir_stack);
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2787 qfl->qf_directory = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2788 qf_clean_dir_stack(&qfl->qf_file_stack);
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2789 qfl->qf_currfile = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2790 qfl->qf_multiline = FALSE;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2791 qfl->qf_multiignore = FALSE;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2792 qfl->qf_multiscan = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 /*
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2796 * Free error list "idx". Frees all the entries in the quickfix list,
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2797 * associated context information and the title.
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2798 */
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2799 static void
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2800 qf_free(qf_info_T *qi, int idx)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2801 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2802 qf_list_T *qfl = &qi->qf_lists[idx];
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2803
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2804 qf_free_items(qi, idx);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2805
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2806 vim_free(qfl->qf_title);
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2807 qfl->qf_title = NULL;
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2808 free_tv(qfl->qf_ctx);
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
2809 qfl->qf_ctx = NULL;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2810 }
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2811
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2812 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 * qf_mark_adjust: adjust marks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2816 qf_mark_adjust(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2817 win_T *wp,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2818 linenr_T line1,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2819 linenr_T line2,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2820 long amount,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2821 long amount_after)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2823 int i;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2824 qfline_T *qfp;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
2825 int idx;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2826 qf_info_T *qi = &ql_info;
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
2827 int found_one = FALSE;
9608
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
2828 int buf_has_flag = wp == NULL ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
2829
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
2830 if (!(curbuf->b_has_qf_entry & buf_has_flag))
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
2831 return;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2832 if (wp != NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2833 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2834 if (wp->w_llist == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2835 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2836 qi = wp->w_llist;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2837 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2838
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2839 for (idx = 0; idx < qi->qf_listcount; ++idx)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2840 if (qi->qf_lists[idx].qf_count)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2841 for (i = 0, qfp = qi->qf_lists[idx].qf_start;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2842 i < qi->qf_lists[idx].qf_count && qfp != NULL;
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
2843 ++i, qfp = qfp->qf_next)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 if (qfp->qf_fnum == curbuf->b_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 {
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
2846 found_one = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 if (qfp->qf_lnum >= line1 && qfp->qf_lnum <= line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 if (amount == MAXLNUM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 qfp->qf_cleared = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 qfp->qf_lnum += amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 else if (amount_after && qfp->qf_lnum > line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 qfp->qf_lnum += amount_after;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 }
9201
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
2857
692e156c7023 commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents: 9197
diff changeset
2858 if (!found_one)
9608
fa64afb99dda commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents: 9579
diff changeset
2859 curbuf->b_has_qf_entry &= ~buf_has_flag;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 * Make a nice message out of the error character and the error number:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 * char number message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 * e or E 0 " error"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 * w or W 0 " warning"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 * i or I 0 " info"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 * 0 0 ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 * other 0 " c"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 * e or E n " error n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 * w or W n " warning n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 * i or I n " info n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 * 0 n " error n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 * other n " c n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 * 1 x "" :helpgrep
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 static char_u *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2878 qf_types(int c, int nr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 static char_u buf[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 static char_u cc[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 if (c == 'W' || c == 'w')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 p = (char_u *)" warning";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 else if (c == 'I' || c == 'i')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 p = (char_u *)" info";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 else if (c == 'E' || c == 'e' || (c == 0 && nr > 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 p = (char_u *)" error";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 else if (c == 0 || c == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 p = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 cc[0] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 cc[1] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 cc[2] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 p = cc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 if (nr <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 sprintf((char *)buf, "%s %3d", (char *)p, nr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 #if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 * ":cwindow": open the quickfix window if we have errors to display,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 * close it if not.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2911 * ":lwindow": open the location list window if we have locations to display,
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2912 * close it if not.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2915 ex_cwindow(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2917 qf_info_T *qi = &ql_info;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 win_T *win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2920 if (eap->cmdidx == CMD_lwindow)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2921 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2922 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2923 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2924 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2925 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2926
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2927 /* Look for an existing quickfix window. */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2928 win = qf_find_win(qi);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 * If a quickfix window is open but we have no errors to display,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 * close the window. If a quickfix window is not open, then open
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 * it if we have errors; otherwise, leave it closed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2935 if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
2795
133d089f247e updated for version 7.3.173
Bram Moolenaar <bram@vim.org>
parents: 2782
diff changeset
2936 || qi->qf_lists[qi->qf_curlist].qf_count == 0
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
2937 || qi->qf_curlist >= qi->qf_listcount)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 if (win != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 ex_cclose(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 else if (win == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 ex_copen(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 * ":cclose": close the window showing the list of errors.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2948 * ":lclose": close the window showing the location list
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2951 ex_cclose(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2953 win_T *win = NULL;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2954 qf_info_T *qi = &ql_info;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2955
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2956 if (eap->cmdidx == CMD_lclose || eap->cmdidx == CMD_lwindow)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2957 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2958 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2959 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2960 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2961 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2962
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2963 /* Find existing quickfix window and close it. */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2964 win = qf_find_win(qi);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 if (win != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 win_close(win, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 * ":copen": open a window that shows the list of errors.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2971 * ":lopen": open a window that shows the location list.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
2974 ex_copen(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2976 qf_info_T *qi = &ql_info;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 int height;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 win_T *win;
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2979 tabpage_T *prevtab = curtab;
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
2980 buf_T *qf_buf;
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
2981 win_T *oldwin = curwin;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2983 if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2984 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2985 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2986 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2987 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2988 EMSG(_(e_loclist));
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2989 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2990 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2991 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
2992
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 if (eap->addr_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 height = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 height = QF_WINHEIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 reset_VIsual_and_resel(); /* stop Visual mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 * Find existing quickfix window, or open a new one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3006 win = qf_find_win(qi);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3007
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
3008 if (win != NULL && cmdmod.tab == 0)
5753
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3009 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 win_goto(win);
5753
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3011 if (eap->addr_count != 0)
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3012 {
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3013 if (cmdmod.split & WSP_VERT)
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3014 {
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3015 if (height != W_WIDTH(win))
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3016 win_setwidth(height);
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3017 }
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8605
diff changeset
3018 else if (height != win->w_height)
5753
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3019 win_setheight(height);
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3020 }
a548aae15b3a updated for version 7.4.221
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3021 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 {
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3024 qf_buf = qf_find_buf(qi);
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3025
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 /* The current window becomes the previous window afterwards. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028
3939
f4aa43d952f5 updated for version 7.3.725
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
3029 if ((eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
f4aa43d952f5 updated for version 7.3.725
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
3030 && cmdmod.split == 0)
f4aa43d952f5 updated for version 7.3.725
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
3031 /* Create the new window at the very bottom, except when
f4aa43d952f5 updated for version 7.3.725
Bram Moolenaar <bram@vim.org>
parents: 3918
diff changeset
3032 * :belowright or :aboveleft is used. */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3033 win_goto(lastwin);
1822
cda8f3aceb85 updated for version 7.2-120
vimboss
parents: 1819
diff changeset
3034 if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 return; /* not enough room for window */
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2576
diff changeset
3036 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3038 if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3040 /*
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3041 * For the location list window, create a reference to the
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3042 * location list from the window 'win'.
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3043 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3044 curwin->w_llist_ref = win->w_llist;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3045 win->w_llist->qf_refcount++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 }
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3047
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
3048 if (oldwin != curwin)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
3049 oldwin = NULL; /* don't store info when in another window */
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3050 if (qf_buf != NULL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3051 /* Use the existing quickfix buffer */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3052 (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
3053 ECMD_HIDE + ECMD_OLDBUF, oldwin);
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3054 else
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3055 {
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3056 /* Create a new quickfix buffer */
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1683
diff changeset
3057 (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3058 /* switch off 'swapfile' */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3059 set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3060 set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
729
3d0ca316efab updated for version 7.0221
vimboss
parents: 717
diff changeset
3061 OPT_LOCAL);
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3062 set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
2651
b254cfdd7405 updated for version 7.3.071
Bram Moolenaar <bram@vim.org>
parents: 2646
diff changeset
3063 RESET_BINDING(curwin);
1864
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3064 #ifdef FEAT_DIFF
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3065 curwin->w_p_diff = FALSE;
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3066 #endif
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3067 #ifdef FEAT_FOLDING
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3068 set_option_value((char_u *)"fdm", 0L, (char_u *)"manual",
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3069 OPT_LOCAL);
05c8ff7f1284 updated for version 7.2-162
vimboss
parents: 1822
diff changeset
3070 #endif
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3071 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
3073 /* Only set the height when still in the same tab page and there is no
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
3074 * window to the side. */
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8605
diff changeset
3075 if (curtab == prevtab && curwin->w_width == Columns)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 win_setheight(height);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 curwin->w_p_wfh = TRUE; /* set 'winfixheight' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 if (win_valid(win))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 prevwin = win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081
6793
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3082 qf_set_title_var(qi);
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3083
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 * Fill the buffer with the quickfix list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 */
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3087 qf_fill_buffer(qi, curbuf, NULL);
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3088
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3089 curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 curwin->w_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 check_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 update_topline(); /* scroll to show the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 /*
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3096 * Move the cursor in the quickfix window to "lnum".
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3097 */
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3098 static void
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3099 qf_win_goto(win_T *win, linenr_T lnum)
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3100 {
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3101 win_T *old_curwin = curwin;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3102
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3103 curwin = win;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3104 curbuf = win->w_buffer;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3105 curwin->w_cursor.lnum = lnum;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3106 curwin->w_cursor.col = 0;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3107 #ifdef FEAT_VIRTUALEDIT
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3108 curwin->w_cursor.coladd = 0;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3109 #endif
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3110 curwin->w_curswant = 0;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3111 update_topline(); /* scroll to show the line */
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3112 redraw_later(VALID);
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3113 curwin->w_redr_status = TRUE; /* update ruler */
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3114 curwin = old_curwin;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3115 curbuf = curwin->w_buffer;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3116 }
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3117
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3118 /*
9458
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3119 * :cbottom/:lbottom commands.
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3120 */
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3121 void
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3122 ex_cbottom(exarg_T *eap UNUSED)
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3123 {
9458
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3124 qf_info_T *qi = &ql_info;
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3125 win_T *win;
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3126
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3127 if (eap->cmdidx == CMD_lbottom)
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3128 {
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3129 qi = GET_LOC_LIST(curwin);
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3130 if (qi == NULL)
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3131 {
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3132 EMSG(_(e_loclist));
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3133 return;
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3134 }
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3135 }
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3136
374afcf9d11d commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
3137 win = qf_find_win(qi);
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3138 if (win != NULL && win->w_cursor.lnum != win->w_buffer->b_ml.ml_line_count)
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3139 qf_win_goto(win, win->w_buffer->b_ml.ml_line_count);
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3140 }
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3141
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3142 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 * Return the number of the current entry (line number in the quickfix
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 * window).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 linenr_T
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3147 qf_current_entry(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3149 qf_info_T *qi = &ql_info;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3150
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3151 if (IS_LL_WINDOW(wp))
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3152 /* In the location list window, use the referenced location list */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3153 qi = wp->w_llist_ref;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3154
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3155 return qi->qf_lists[qi->qf_curlist].qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159 * Update the cursor position in the quickfix window to the current error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 * Return TRUE if there is a quickfix window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3163 qf_win_pos_update(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3164 qf_info_T *qi,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3165 int old_qf_index) /* previous qf_index or zero */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 win_T *win;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3168 int qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 * Put the cursor on the current error in the quickfix window, so that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172 * it's viewable.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3174 win = qf_find_win(qi);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3175 if (win != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3176 && qf_index <= win->w_buffer->b_ml.ml_line_count
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 && old_qf_index != qf_index)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3179 if (qf_index > old_qf_index)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 {
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3181 win->w_redraw_top = old_qf_index;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3182 win->w_redraw_bot = qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3184 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3185 {
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3186 win->w_redraw_top = qf_index;
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3187 win->w_redraw_bot = old_qf_index;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 }
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9397
diff changeset
3189 qf_win_goto(win, qf_index);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 return win != NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3192 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3194 /*
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3195 * Check whether the given window is displaying the specified quickfix/location
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3196 * list buffer
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3197 */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3198 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3199 is_qf_win(win_T *win, qf_info_T *qi)
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3200 {
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3201 /*
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3202 * A window displaying the quickfix buffer will have the w_llist_ref field
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3203 * set to NULL.
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3204 * A window displaying a location list buffer will have the w_llist_ref
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3205 * pointing to the location list.
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3206 */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3207 if (bt_quickfix(win->w_buffer))
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3208 if ((qi == &ql_info && win->w_llist_ref == NULL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3209 || (qi != &ql_info && win->w_llist_ref == qi))
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3210 return TRUE;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3211
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3212 return FALSE;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3213 }
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3214
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3215 /*
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3216 * Find a window displaying the quickfix/location list 'qi'
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3217 * Searches in only the windows opened in the current tab.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3218 */
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3219 static win_T *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3220 qf_find_win(qf_info_T *qi)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3221 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3222 win_T *win;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3223
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3224 FOR_ALL_WINDOWS(win)
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3225 if (is_qf_win(win, qi))
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3226 break;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3227
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3228 return win;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3229 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3230
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3231 /*
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3232 * Find a quickfix buffer.
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3233 * Searches in windows opened in all the tabs.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 static buf_T *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3236 qf_find_buf(qf_info_T *qi)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 {
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3238 tabpage_T *tp;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3239 win_T *win;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3240
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3241 FOR_ALL_TAB_WINDOWS(tp, win)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3242 if (is_qf_win(win, qi))
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3243 return win->w_buffer;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3244
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
3245 return NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3248 /*
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3249 * Update the w:quickfix_title variable in the quickfix/location list window
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3250 */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3251 static void
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3252 qf_update_win_titlevar(qf_info_T *qi)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3253 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3254 win_T *win;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3255 win_T *curwin_save;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3256
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3257 if ((win = qf_find_win(qi)) != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3258 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3259 curwin_save = curwin;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3260 curwin = win;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3261 qf_set_title_var(qi);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3262 curwin = curwin_save;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3263 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3264 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3265
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3266 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267 * Find the quickfix buffer. If it exists, update the contents.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 static void
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3270 qf_update_buffer(qf_info_T *qi, qfline_T *old_last)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 buf_T *buf;
3016
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3273 win_T *win;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 aco_save_T aco;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 /* Check if a buffer for the quickfix list exists. Update it. */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3277 buf = qf_find_buf(qi);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279 {
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3280 linenr_T old_line_count = buf->b_ml.ml_line_count;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3281
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3282 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3283 /* set curwin/curbuf to buf and save a few things */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3284 aucmd_prepbuf(&aco, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
3286 qf_update_win_titlevar(qi);
3016
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3287
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3288 qf_fill_buffer(qi, buf, old_last);
11705
c43118ecb0a3 patch 8.0.0735: no indication that the quickfix window/buffer changed
Christian Brabandt <cb@256bit.org>
parents: 11700
diff changeset
3289 ++CHANGEDTICK(buf);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3290
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3291 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3292 {
8932
25c2031e9f9f commit https://github.com/vim/vim/commit/c1808d5822ed9534ef7f0fe509b15bee92a5cc28
Christian Brabandt <cb@256bit.org>
parents: 8751
diff changeset
3293 (void)qf_win_pos_update(qi, 0);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3294
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3295 /* restore curwin/curbuf and a few other things */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3296 aucmd_restbuf(&aco);
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3297 }
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3298
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3299 /* Only redraw when added lines are visible. This avoids flickering
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3300 * when the added lines are not visible. */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3301 if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3302 redraw_buf_later(buf, NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305
6793
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3306 /*
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3307 * Set "w:quickfix_title" if "qi" has a title.
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3308 */
3016
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3309 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3310 qf_set_title_var(qf_info_T *qi)
3016
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3311 {
6793
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3312 if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
e1d59836eecc patch 7.4.718
Bram Moolenaar <bram@vim.org>
parents: 6721
diff changeset
3313 set_internal_string_var((char_u *)"w:quickfix_title",
3016
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3314 qi->qf_lists[qi->qf_curlist].qf_title);
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3315 }
58bba69b3371 updated for version 7.3.280
Bram Moolenaar <bram@vim.org>
parents: 3002
diff changeset
3316
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 * Fill current buffer with quickfix errors, replacing any previous contents.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 * curbuf must be the quickfix buffer!
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3320 * If "old_last" is not NULL append the items after this one.
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3321 * When "old_last" is NULL then "buf" must equal "curbuf"! Because
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3322 * ml_delete() is used and autocommands will be triggered.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 static void
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3325 qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3327 linenr_T lnum;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3328 qfline_T *qfp;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3329 buf_T *errbuf;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3330 int len;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3331 int old_KeyTyped = KeyTyped;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3333 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3334 {
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3335 if (buf != curbuf)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3336 {
10359
66f1b5bf3fa6 commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
3337 internal_error("qf_fill_buffer()");
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3338 return;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3339 }
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3340
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3341 /* delete all existing lines */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3342 while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3343 (void)ml_delete((linenr_T)1, FALSE);
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3344 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 /* Check if there is anything to display */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3347 if (qi->qf_curlist < qi->qf_listcount)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 /* Add one line for each error */
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3350 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3351 {
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3352 qfp = qi->qf_lists[qi->qf_curlist].qf_start;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3353 lnum = 0;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3354 }
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3355 else
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3356 {
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3357 qfp = old_last->qf_next;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3358 lnum = buf->b_ml.ml_line_count;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3359 }
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3360 while (lnum < qi->qf_lists[qi->qf_curlist].qf_count)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 if (qfp->qf_fnum != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 && errbuf->b_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 if (qfp->qf_type == 1) /* :helpgrep */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 STRCPY(IObuff, gettail(errbuf->b_fname));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 STRCPY(IObuff, errbuf->b_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 len = (int)STRLEN(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 IObuff[len++] = '|';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 if (qfp->qf_lnum > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 if (qfp->qf_col > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 sprintf((char *)IObuff + len, " col %d", qfp->qf_col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387 sprintf((char *)IObuff + len, "%s",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388 (char *)qf_types(qfp->qf_type, qfp->qf_nr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3391 else if (qfp->qf_pattern != NULL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3392 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3393 qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3394 len += (int)STRLEN(IObuff + len);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
3395 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 IObuff[len++] = '|';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 IObuff[len++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 /* Remove newlines and leading whitespace from the text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 * For an unrecognized line keep the indent, the compiler may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 * mark a word with ^^^^. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402 qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 IObuff + len, IOSIZE - len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3405 if (ml_append_buf(buf, lnum, IObuff,
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3406 (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 break;
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3408 ++lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 qfp = qfp->qf_next;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
3410 if (qfp == NULL)
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
3411 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 }
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3413
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3414 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3415 /* Delete the empty line which is now at the end */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3416 (void)ml_delete(lnum + 1, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 /* correct cursor position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 check_lnums(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3422 if (old_last == NULL)
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3423 {
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3424 /* Set the 'filetype' to "qf" each time after filling the buffer.
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3425 * This resembles reading a file into a buffer, it's more logical when
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3426 * using autocommands. */
11589
39787def24bb patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents: 11549
diff changeset
3427 #ifdef FEAT_AUTOCMD
39787def24bb patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents: 11549
diff changeset
3428 ++curbuf_lock;
39787def24bb patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents: 11549
diff changeset
3429 #endif
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3430 set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3431 curbuf->b_p_ma = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 #ifdef FEAT_AUTOCMD
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3434 keep_filetype = TRUE; /* don't detect 'filetype' */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3435 apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 FALSE, curbuf);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3437 apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 FALSE, curbuf);
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3439 keep_filetype = FALSE;
11589
39787def24bb patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents: 11549
diff changeset
3440 --curbuf_lock;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 #endif
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3442 /* make sure it will be redrawn */
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3443 redraw_curbuf_later(NOT_VALID);
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
3444 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 /* Restore KeyTyped, setting 'filetype' may reset it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 KeyTyped = old_KeyTyped;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 #endif /* FEAT_WINDOWS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3453 * Return TRUE when using ":vimgrep" for ":grep".
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3454 */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3455 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3456 grep_internal(cmdidx_T cmdidx)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3457 {
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3458 return ((cmdidx == CMD_grep
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3459 || cmdidx == CMD_lgrep
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3460 || cmdidx == CMD_grepadd
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3461 || cmdidx == CMD_lgrepadd)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3462 && STRCMP("internal",
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3463 *curbuf->b_p_gp == NUL ? p_gp : curbuf->b_p_gp) == 0);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3464 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3465
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3466 /*
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3467 * Used for ":make", ":lmake", ":grep", ":lgrep", ":grepadd", and ":lgrepadd"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3470 ex_make(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 {
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3472 char_u *fname;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 char_u *cmd;
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3474 char_u *enc = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 unsigned len;
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3476 win_T *wp = NULL;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3477 qf_info_T *qi = &ql_info;
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3478 int res;
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3479 #ifdef FEAT_AUTOCMD
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3480 char_u *au_name = NULL;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3481
2782
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3482 /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3483 if (grep_internal(eap->cmdidx))
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3484 {
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3485 ex_vimgrep(eap);
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3486 return;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3487 }
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
3488
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3489 switch (eap->cmdidx)
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3490 {
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3491 case CMD_make: au_name = (char_u *)"make"; break;
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3492 case CMD_lmake: au_name = (char_u *)"lmake"; break;
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3493 case CMD_grep: au_name = (char_u *)"grep"; break;
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3494 case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3495 case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
3496 case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3497 default: break;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3498 }
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
3499 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
3500 curbuf->b_fname, TRUE, curbuf))
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3501 {
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
3502 # ifdef FEAT_EVAL
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
3503 if (aborting())
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3504 return;
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
3505 # endif
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3506 }
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3507 #endif
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3508 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3509 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3510 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3512 if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3513 || eap->cmdidx == CMD_lgrepadd)
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3514 wp = curwin;
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3515
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 autowrite_all();
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3517 fname = get_mef_name();
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3518 if (fname == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 return;
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3520 mch_remove(fname); /* in case it's not unique */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 * If 'shellpipe' empty: don't redirect to 'errorfile'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(eap->arg) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 if (*p_sp != NUL)
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3527 len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 cmd = alloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 if (cmd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 (char *)p_shq);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 if (*p_sp != NUL)
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1864
diff changeset
3534 append_redir(cmd, len, p_sp, fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 * Output a newline if there's something else than the :make command that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 * was typed (in which case the cursor is in column 0).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539 if (msg_col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3542 MSG_PUTS(":!");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 msg_outtrans(cmd); /* show what we are doing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 /* let the shell know if we are redirecting output or not */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 #ifdef AMIGA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 /* read window status report and redraw before message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 (void)char_avail();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3554 res = qf_init(wp, fname, (eap->cmdidx != CMD_make
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3555 && eap->cmdidx != CMD_lmake) ? p_gefm : p_efm,
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3556 (eap->cmdidx != CMD_grepadd
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
3557 && eap->cmdidx != CMD_lgrepadd),
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3558 *eap->cmdlinep, enc);
2847
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3559 if (wp != NULL)
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3560 qi = GET_LOC_LIST(wp);
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3561 #ifdef FEAT_AUTOCMD
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3562 if (au_name != NULL)
2847
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3563 {
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3564 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3565 curbuf->b_fname, TRUE, curbuf);
2847
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3566 if (qi->qf_curlist < qi->qf_listcount)
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3567 res = qi->qf_lists[qi->qf_curlist].qf_count;
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3568 else
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3569 res = 0;
45c536fe48db updated for version 7.3.197
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3570 }
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3571 #endif
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
3572 if (res > 0 && !eap->forceit)
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3573 qf_jump(qi, 0, 0, FALSE); /* display first error */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3575 mch_remove(fname);
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
3576 vim_free(fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 vim_free(cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 * Return the name for the errorfile, in allocated memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 * Find a new unique name when 'makeef' contains "##".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 * Returns NULL for error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 static char_u *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3586 get_mef_name(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 static int start = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 static int off = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 #ifdef HAVE_LSTAT
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9379
diff changeset
3593 stat_T sb;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 if (*p_mef == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 {
6721
7347229a646a updated for version 7.4.684
Bram Moolenaar <bram@vim.org>
parents: 6450
diff changeset
3598 name = vim_tempname('e', FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 if (name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 EMSG(_(e_notmp));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 return name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 for (p = p_mef; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 if (p[0] == '#' && p[1] == '#')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 return vim_strsave(p_mef);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 /* Keep trying until the name doesn't exist yet. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3613 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614 if (start == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615 start = mch_get_pid();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 off += 19;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 name = alloc((unsigned)STRLEN(p_mef) + 30);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 if (name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 STRCPY(name, p_mef);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 sprintf((char *)name + (p - p_mef), "%d%d", start, off);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 STRCAT(name, p + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 if (mch_getperm(name) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 #ifdef HAVE_LSTAT
10226
7a4fb555c83a commit https://github.com/vim/vim/commit/9af418427652562384744648d7d173a4bfebba95
Christian Brabandt <cb@256bit.org>
parents: 10056
diff changeset
3627 /* Don't accept a symbolic link, it's a security risk. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3628 && mch_lstat((char *)name, &sb) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 return name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 /*
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3638 * Returns the number of valid entries in the current quickfix/location list.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3639 */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3640 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3641 qf_get_size(exarg_T *eap)
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3642 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3643 qf_info_T *qi = &ql_info;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3644 qfline_T *qfp;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3645 int i, sz = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3646 int prev_fnum = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3647
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3648 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3649 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3650 /* Location list */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3651 qi = GET_LOC_LIST(curwin);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3652 if (qi == NULL)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3653 return 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3654 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3655
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3656 for (i = 0, qfp = qi->qf_lists[qi->qf_curlist].qf_start;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
3657 i < qi->qf_lists[qi->qf_curlist].qf_count && qfp != NULL;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3658 ++i, qfp = qfp->qf_next)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3659 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3660 if (qfp->qf_valid)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3661 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3662 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3663 sz++; /* Count all valid entries */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3664 else if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3665 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3666 /* Count the number of files */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3667 sz++;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3668 prev_fnum = qfp->qf_fnum;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3669 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3670 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3671 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3672
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3673 return sz;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3674 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3675
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3676 /*
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3677 * Returns the current index of the quickfix/location list.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3678 * Returns 0 if there is an error.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3679 */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3680 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3681 qf_get_cur_idx(exarg_T *eap)
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3682 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3683 qf_info_T *qi = &ql_info;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3684
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3685 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3686 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3687 /* Location list */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3688 qi = GET_LOC_LIST(curwin);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3689 if (qi == NULL)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3690 return 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3691 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3692
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3693 return qi->qf_lists[qi->qf_curlist].qf_index;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3694 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3695
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3696 /*
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3697 * Returns the current index in the quickfix/location list (counting only valid
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3698 * entries). If no valid entries are in the list, then returns 1.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3699 */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3700 int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3701 qf_get_cur_valid_idx(exarg_T *eap)
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3702 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3703 qf_info_T *qi = &ql_info;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3704 qf_list_T *qfl;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3705 qfline_T *qfp;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3706 int i, eidx = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3707 int prev_fnum = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3708
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3709 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3710 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3711 /* Location list */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3712 qi = GET_LOC_LIST(curwin);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3713 if (qi == NULL)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3714 return 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3715 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3716
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3717 qfl = &qi->qf_lists[qi->qf_curlist];
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3718 qfp = qfl->qf_start;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3719
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3720 /* check if the list has valid errors */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3721 if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3722 return 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3723
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3724 for (i = 1; i <= qfl->qf_index && qfp!= NULL; i++, qfp = qfp->qf_next)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3725 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3726 if (qfp->qf_valid)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3727 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3728 if (eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3729 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3730 if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3731 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3732 /* Count the number of files */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3733 eidx++;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3734 prev_fnum = qfp->qf_fnum;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3735 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3736 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3737 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3738 eidx++;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3739 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3740 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3741
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3742 return eidx ? eidx : 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3743 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3744
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3745 /*
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3746 * Get the 'n'th valid error entry in the quickfix or location list.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3747 * Used by :cdo, :ldo, :cfdo and :lfdo commands.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3748 * For :cdo and :ldo returns the 'n'th valid error entry.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3749 * For :cfdo and :lfdo returns the 'n'th valid file entry.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3750 */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3751 static int
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3752 qf_get_nth_valid_entry(qf_info_T *qi, int n, int fdo)
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3753 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3754 qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3755 qfline_T *qfp = qfl->qf_start;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3756 int i, eidx;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3757 int prev_fnum = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3758
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3759 /* check if the list has valid errors */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3760 if (qfl->qf_count <= 0 || qfl->qf_nonevalid)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3761 return 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3762
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
3763 for (i = 1, eidx = 0; i <= qfl->qf_count && qfp != NULL;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3764 i++, qfp = qfp->qf_next)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3765 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3766 if (qfp->qf_valid)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3767 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3768 if (fdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3769 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3770 if (qfp->qf_fnum > 0 && qfp->qf_fnum != prev_fnum)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3771 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3772 /* Count the number of files */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3773 eidx++;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3774 prev_fnum = qfp->qf_fnum;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3775 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3776 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3777 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3778 eidx++;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3779 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3780
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3781 if (eidx == n)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3782 break;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3783 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3784
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3785 if (i <= qfl->qf_count)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3786 return i;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3787 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3788 return 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3789 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3790
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3791 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 * ":cc", ":crewind", ":cfirst" and ":clast".
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3793 * ":ll", ":lrewind", ":lfirst" and ":llast".
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3794 * ":cdo", ":ldo", ":cfdo" and ":lfdo"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3797 ex_cc(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 {
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3799 qf_info_T *qi = &ql_info;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3800 int errornr;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3801
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3802 if (eap->cmdidx == CMD_ll
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3803 || eap->cmdidx == CMD_lrewind
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3804 || eap->cmdidx == CMD_lfirst
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3805 || eap->cmdidx == CMD_llast
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3806 || eap->cmdidx == CMD_ldo
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3807 || eap->cmdidx == CMD_lfdo)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3808 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3809 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3810 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3811 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3812 EMSG(_(e_loclist));
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3813 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3814 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3815 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3816
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3817 if (eap->addr_count > 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3818 errornr = (int)eap->line2;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3819 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3820 {
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3821 if (eap->cmdidx == CMD_cc || eap->cmdidx == CMD_ll)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3822 errornr = 0;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3823 else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3824 || eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3825 errornr = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3826 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3827 errornr = 32767;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3828 }
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3829
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3830 /* For cdo and ldo commands, jump to the nth valid error.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3831 * For cfdo and lfdo commands, jump to the nth valid file entry.
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3832 */
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3833 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo ||
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3834 eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3835 errornr = qf_get_nth_valid_entry(qi,
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3836 eap->addr_count > 0 ? (int)eap->line1 : 1,
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3837 eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3838
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3839 qf_jump(qi, 0, errornr, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 * ":cnext", ":cnfile", ":cNext" and ":cprevious".
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3844 * ":lnext", ":lNext", ":lprevious", ":lnfile", ":lNfile" and ":lpfile".
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3845 * Also, used by ":cdo", ":ldo", ":cfdo" and ":lfdo" commands.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3848 ex_cnext(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 {
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3850 qf_info_T *qi = &ql_info;
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3851 int errornr;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3852
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3853 if (eap->cmdidx == CMD_lnext
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3854 || eap->cmdidx == CMD_lNext
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3855 || eap->cmdidx == CMD_lprevious
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3856 || eap->cmdidx == CMD_lnfile
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3857 || eap->cmdidx == CMD_lNfile
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3858 || eap->cmdidx == CMD_lpfile
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3859 || eap->cmdidx == CMD_ldo
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3860 || eap->cmdidx == CMD_lfdo)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3861 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3862 qi = GET_LOC_LIST(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3863 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3864 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3865 EMSG(_(e_loclist));
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3866 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3867 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3868 }
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3869
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3870 if (eap->addr_count > 0 &&
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3871 (eap->cmdidx != CMD_cdo && eap->cmdidx != CMD_ldo &&
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3872 eap->cmdidx != CMD_cfdo && eap->cmdidx != CMD_lfdo))
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3873 errornr = (int)eap->line2;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3874 else
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3875 errornr = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3876
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3877 qf_jump(qi, (eap->cmdidx == CMD_cnext || eap->cmdidx == CMD_lnext
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3878 || eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 ? FORWARD
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3880 : (eap->cmdidx == CMD_cnfile || eap->cmdidx == CMD_lnfile
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3881 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 ? FORWARD_FILE
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3883 : (eap->cmdidx == CMD_cpfile || eap->cmdidx == CMD_lpfile
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3884 || eap->cmdidx == CMD_cNfile || eap->cmdidx == CMD_lNfile)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 ? BACKWARD_FILE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 : BACKWARD,
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 6853
diff changeset
3887 errornr, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 /*
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3891 * ":cfile"/":cgetfile"/":caddfile" commands.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3892 * ":lfile"/":lgetfile"/":laddfile" commands.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3895 ex_cfile(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 {
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3897 char_u *enc = NULL;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3898 win_T *wp = NULL;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3899 qf_info_T *qi = &ql_info;
3404
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3900 #ifdef FEAT_AUTOCMD
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3901 char_u *au_name = NULL;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3902 #endif
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3903
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3904 if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
3404
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3905 || eap->cmdidx == CMD_laddfile)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3906 wp = curwin;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3907
3404
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3908 #ifdef FEAT_AUTOCMD
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3909 switch (eap->cmdidx)
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3910 {
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3911 case CMD_cfile: au_name = (char_u *)"cfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3912 case CMD_cgetfile: au_name = (char_u *)"cgetfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3913 case CMD_caddfile: au_name = (char_u *)"caddfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3914 case CMD_lfile: au_name = (char_u *)"lfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3915 case CMD_lgetfile: au_name = (char_u *)"lgetfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3916 case CMD_laddfile: au_name = (char_u *)"laddfile"; break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3917 default: break;
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3918 }
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3919 if (au_name != NULL)
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3920 apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3921 #endif
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3922 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3923 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3924 #endif
2296
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3925 #ifdef FEAT_BROWSE
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3926 if (cmdmod.browse)
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3927 {
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3928 char_u *browse_file = do_browse(0, (char_u *)_("Error file"), eap->arg,
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3929 NULL, NULL, BROWSE_FILTER_ALL_FILES, NULL);
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3930 if (browse_file == NULL)
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3931 return;
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3932 set_string_option_direct((char_u *)"ef", -1, browse_file, OPT_FREE, 0);
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3933 vim_free(browse_file);
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3934 }
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3935 else
eb7be7b075a6 Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2146
diff changeset
3936 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 if (*eap->arg != NUL)
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 682
diff changeset
3938 set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0);
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3939
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3940 /*
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3941 * This function is used by the :cfile, :cgetfile and :caddfile
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3942 * commands.
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3943 * :cfile always creates a new quickfix list and jumps to the
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3944 * first error.
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3945 * :cgetfile creates a new quickfix list but doesn't jump to the
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3946 * first error.
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3947 * :caddfile adds to an existing quickfix list. If there is no
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3948 * quickfix list then a new list is created.
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
3949 */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3950 if (qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
3951 && eap->cmdidx != CMD_laddfile),
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
3952 *eap->cmdlinep, enc) > 0
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3953 && (eap->cmdidx == CMD_cfile
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
3954 || eap->cmdidx == CMD_lfile))
665
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
3955 {
3404
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3956 #ifdef FEAT_AUTOCMD
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3957 if (au_name != NULL)
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3958 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3959 #endif
665
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
3960 if (wp != NULL)
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
3961 qi = GET_LOC_LIST(wp);
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
3962 qf_jump(qi, 0, 0, eap->forceit); /* display first error */
665
21ab9abf0f08 updated for version 7.0196
vimboss
parents: 661
diff changeset
3963 }
3404
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3964
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3965 else
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3966 {
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3967 #ifdef FEAT_AUTOCMD
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3968 if (au_name != NULL)
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3969 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3970 #endif
38a135730423 updated for version 7.3.468
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
3971 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3975 * ":vimgrep {pattern} file(s)"
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3976 * ":vimgrepadd {pattern} file(s)"
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3977 * ":lvimgrep {pattern} file(s)"
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3978 * ":lvimgrepadd {pattern} file(s)"
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3979 */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3980 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
3981 ex_vimgrep(exarg_T *eap)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3982 {
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3983 regmmatch_T regmatch;
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
3984 int fcount;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3985 char_u **fnames;
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
3986 char_u *fname;
8603
bfa74b84c41c commit https://github.com/vim/vim/commit/5584df65a0ca2315d1eebc13c54a448bee4d0758
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
3987 char_u *title;
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
3988 char_u *s;
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
3989 char_u *p;
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
3990 int fi;
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
3991 qf_info_T *qi = &ql_info;
4003
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
3992 #ifdef FEAT_AUTOCMD
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
3993 qfline_T *cur_qf_start;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
3994 #endif
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
3995 long lnum;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3996 buf_T *buf;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3997 int duplicate_name = FALSE;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3998 int using_dummy;
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
3999 int redraw_for_dummy = FALSE;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4000 int found_match;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4001 buf_T *first_match_buf = NULL;
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4002 time_t seconds = 0;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4003 int save_mls;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4004 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4005 char_u *save_ei = NULL;
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4006 #endif
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4007 aco_save_T aco;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4008 int flags = 0;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4009 colnr_T col;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4010 long tomatch;
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4011 char_u *dirname_start = NULL;
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4012 char_u *dirname_now = NULL;
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4013 char_u *target_dir = NULL;
1683
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1672
diff changeset
4014 #ifdef FEAT_AUTOCMD
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1672
diff changeset
4015 char_u *au_name = NULL;
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4016
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4017 switch (eap->cmdidx)
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4018 {
2782
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4019 case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4020 case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4021 case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4022 case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
2782
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4023 case CMD_grep: au_name = (char_u *)"grep"; break;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4024 case CMD_lgrep: au_name = (char_u *)"lgrep"; break;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4025 case CMD_grepadd: au_name = (char_u *)"grepadd"; break;
0a0d7961b4fe updated for version 7.3.167
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
4026 case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4027 default: break;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4028 }
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
4029 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
4030 curbuf->b_fname, TRUE, curbuf))
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4031 {
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
4032 # ifdef FEAT_EVAL
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
4033 if (aborting())
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4034 return;
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
4035 # endif
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4036 }
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
4037 #endif
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4038
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
4039 if (eap->cmdidx == CMD_lgrep
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4040 || eap->cmdidx == CMD_lvimgrep
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4041 || eap->cmdidx == CMD_lgrepadd
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4042 || eap->cmdidx == CMD_lvimgrepadd)
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4043 {
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4044 qi = ll_get_or_alloc_list(curwin);
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4045 if (qi == NULL)
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4046 return;
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4047 }
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4048
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4049 if (eap->addr_count > 0)
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4050 tomatch = eap->line2;
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4051 else
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4052 tomatch = MAXLNUM;
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4053
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4054 /* Get the search pattern: either white-separated or enclosed in // */
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4055 regmatch.regprog = NULL;
8603
bfa74b84c41c commit https://github.com/vim/vim/commit/5584df65a0ca2315d1eebc13c54a448bee4d0758
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
4056 title = vim_strsave(*eap->cmdlinep);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4057 p = skip_vimgrep_pat(eap->arg, &s, &flags);
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
4058 if (p == NULL)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4059 {
282
33d9c918b8ab updated for version 7.0075
vimboss
parents: 277
diff changeset
4060 EMSG(_(e_invalpat));
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 129
diff changeset
4061 goto theend;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4062 }
4197
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4063
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4064 if (s != NULL && *s == NUL)
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4065 {
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4066 /* Pattern is empty, use last search pattern. */
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4067 if (last_search_pat() == NULL)
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4068 {
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4069 EMSG(_(e_noprevre));
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4070 goto theend;
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4071 }
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4072 regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4073 }
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4074 else
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4075 regmatch.regprog = vim_regcomp(s, RE_MAGIC);
07fef68eb018 updated for version 7.3.850
Bram Moolenaar <bram@vim.org>
parents: 4003
diff changeset
4076
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4077 if (regmatch.regprog == NULL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4078 goto theend;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 42
diff changeset
4079 regmatch.rmm_ic = p_ic;
410
c60ba877860b updated for version 7.0107
vimboss
parents: 359
diff changeset
4080 regmatch.rmm_maxcol = 0;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4081
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4082 p = skipwhite(p);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4083 if (*p == NUL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4084 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4085 EMSG(_("E683: File name missing or invalid pattern"));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4086 goto theend;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4087 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4088
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
4089 if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd &&
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
4090 eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4091 || qi->qf_curlist == qi->qf_listcount)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4092 /* make place for a new list */
8603
bfa74b84c41c commit https://github.com/vim/vim/commit/5584df65a0ca2315d1eebc13c54a448bee4d0758
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
4093 qf_new_list(qi, title != NULL ? title : *eap->cmdlinep);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4094
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4095 /* parse the list of arguments */
3620
4f1c511e71f8 updated for version 7.3.570
Bram Moolenaar <bram@vim.org>
parents: 3555
diff changeset
4096 if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4097 goto theend;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4098 if (fcount == 0)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4099 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4100 EMSG(_(e_nomatch));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4101 goto theend;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4102 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4103
7558
9a4c9dccd603 commit https://github.com/vim/vim/commit/b86a343280b08d6701da68ee0651e960a0a7a61c
Christian Brabandt <cb@256bit.org>
parents: 7515
diff changeset
4104 dirname_start = alloc_id(MAXPATHL, aid_qf_dirname_start);
9a4c9dccd603 commit https://github.com/vim/vim/commit/b86a343280b08d6701da68ee0651e960a0a7a61c
Christian Brabandt <cb@256bit.org>
parents: 7515
diff changeset
4105 dirname_now = alloc_id(MAXPATHL, aid_qf_dirname_now);
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4106 if (dirname_start == NULL || dirname_now == NULL)
7662
4d34891e98f4 commit https://github.com/vim/vim/commit/61ff4dd6a4d47bd32383fe28087be2b37dec53f4
Christian Brabandt <cb@256bit.org>
parents: 7558
diff changeset
4107 {
4d34891e98f4 commit https://github.com/vim/vim/commit/61ff4dd6a4d47bd32383fe28087be2b37dec53f4
Christian Brabandt <cb@256bit.org>
parents: 7558
diff changeset
4108 FreeWild(fcount, fnames);
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4109 goto theend;
7662
4d34891e98f4 commit https://github.com/vim/vim/commit/61ff4dd6a4d47bd32383fe28087be2b37dec53f4
Christian Brabandt <cb@256bit.org>
parents: 7558
diff changeset
4110 }
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4111
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4112 /* Remember the current directory, because a BufRead autocommand that does
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4113 * ":lcd %:p:h" changes the meaning of short path names. */
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4114 mch_dirname(dirname_start, MAXPATHL);
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4115
4003
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4116 #ifdef FEAT_AUTOCMD
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4197
diff changeset
4117 /* Remember the value of qf_start, so that we can check for autocommands
4003
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4118 * changing the current quickfix list. */
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4119 cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4120 #endif
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4121
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4122 seconds = (time_t)0;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4123 for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4124 {
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4125 fname = shorten_fname1(fnames[fi]);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4126 if (time(NULL) > seconds)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4127 {
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4128 /* Display the file name every second or so, show the user we are
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4129 * working on it. */
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4130 seconds = time(NULL);
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4131 msg_start();
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4132 p = msg_strtrunc(fname, TRUE);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4133 if (p == NULL)
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4134 msg_outtrans(fname);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4135 else
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4136 {
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4137 msg_outtrans(p);
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4138 vim_free(p);
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4139 }
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4140 msg_clr_eos();
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4141 msg_didout = FALSE; /* overwrite this message */
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4142 msg_nowait = TRUE; /* don't wait for this message */
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4143 msg_col = 0;
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4144 out_flush();
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4145 }
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4146
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4147 buf = buflist_findname_exp(fnames[fi]);
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4148 if (buf == NULL || buf->b_ml.ml_mfp == NULL)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4149 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4150 /* Remember that a buffer with this name already exists. */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4151 duplicate_name = (buf != NULL);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4152 using_dummy = TRUE;
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4153 redraw_for_dummy = TRUE;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4154
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4155 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4156 /* Don't do Filetype autocommands to avoid loading syntax and
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4157 * indent scripts, a great speed improvement. */
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4158 save_ei = au_event_disable(",Filetype");
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4159 #endif
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4160 /* Don't use modelines here, it's useless. */
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4161 save_mls = p_mls;
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4162 p_mls = 0;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4163
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4164 /* Load file into a buffer, so that 'fileencoding' is detected,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4165 * autocommands applied, etc. */
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4166 buf = load_dummy_buffer(fname, dirname_start, dirname_now);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4167
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4168 p_mls = save_mls;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4169 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4170 au_event_restore(save_ei);
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4171 #endif
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4172 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4173 else
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4174 /* Use existing, loaded buffer. */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4175 using_dummy = FALSE;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4176
4003
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4177 #ifdef FEAT_AUTOCMD
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4178 if (cur_qf_start != qi->qf_lists[qi->qf_curlist].qf_start)
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4179 {
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4180 int idx;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4181
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4182 /* Autocommands changed the quickfix list. Find the one we were
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4183 * using and restore it. */
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4184 for (idx = 0; idx < LISTCOUNT; ++idx)
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4185 if (cur_qf_start == qi->qf_lists[idx].qf_start)
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4186 {
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4187 qi->qf_curlist = idx;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4188 break;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4189 }
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4190 if (idx == LISTCOUNT)
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4191 {
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4192 /* List cannot be found, create a new one. */
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4193 qf_new_list(qi, *eap->cmdlinep);
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4194 cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4195 }
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4196 }
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4197 #endif
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4198
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4199 if (buf == NULL)
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4200 {
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4201 if (!got_int)
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4202 smsg((char_u *)_("Cannot open file \"%s\""), fname);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4203 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4204 else
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4205 {
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4206 /* Try for a match in all lines of the buffer.
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4207 * For ":1vimgrep" look for first match only. */
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4208 found_match = FALSE;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4209 for (lnum = 1; lnum <= buf->b_ml.ml_line_count && tomatch > 0;
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4210 ++lnum)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4211 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4212 col = 0;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4213 while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
11521
578df034735d patch 8.0.0643: when a pattern search is slow Vim becomes unusable
Christian Brabandt <cb@256bit.org>
parents: 11516
diff changeset
4214 col, NULL, NULL) > 0)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4215 {
9540
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4216 /* Pass the buffer number so that it gets used even for a
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4217 * dummy buffer, unless duplicate_name is set, then the
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4218 * buffer will be wiped out below. */
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4219 if (qf_add_entry(qi,
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4220 qi->qf_curlist,
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4221 NULL, /* dir */
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4222 fname,
9540
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4223 duplicate_name ? 0 : buf->b_fnum,
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4224 ml_get_buf(buf,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4225 regmatch.startpos[0].lnum + lnum, FALSE),
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4226 regmatch.startpos[0].lnum + lnum,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4227 regmatch.startpos[0].col + 1,
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4228 FALSE, /* vis_col */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4229 NULL, /* search pattern */
856
8cd729851562 updated for version 7.0g
vimboss
parents: 842
diff changeset
4230 0, /* nr */
8cd729851562 updated for version 7.0g
vimboss
parents: 842
diff changeset
4231 0, /* type */
8cd729851562 updated for version 7.0g
vimboss
parents: 842
diff changeset
4232 TRUE /* valid */
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4233 ) == FAIL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4234 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4235 got_int = TRUE;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4236 break;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4237 }
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4238 found_match = TRUE;
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4239 if (--tomatch == 0)
8ae24f338cab updated for version 7.0217
vimboss
parents: 712
diff changeset
4240 break;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4241 if ((flags & VGR_GLOBAL) == 0
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4242 || regmatch.endpos[0].lnum > 0)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4243 break;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4244 col = regmatch.endpos[0].col
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4245 + (col == regmatch.endpos[0].col);
1883
c8f343a465a2 updated for version 7.2-180
vimboss
parents: 1872
diff changeset
4246 if (col > (colnr_T)STRLEN(ml_get_buf(buf, lnum, FALSE)))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4247 break;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4248 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4249 line_breakcheck();
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4250 if (got_int)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4251 break;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4252 }
4003
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4253 #ifdef FEAT_AUTOCMD
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4254 cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
706c87d16d40 updated for version 7.3.756
Bram Moolenaar <bram@vim.org>
parents: 3982
diff changeset
4255 #endif
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4256
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4257 if (using_dummy)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4258 {
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4259 if (found_match && first_match_buf == NULL)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4260 first_match_buf = buf;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4261 if (duplicate_name)
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4262 {
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4263 /* Never keep a dummy buffer if there is another buffer
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4264 * with the same name. */
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4265 wipe_dummy_buffer(buf, dirname_start);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4266 buf = NULL;
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4267 }
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4268 else if (!cmdmod.hide
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4269 || buf->b_p_bh[0] == 'u' /* "unload" */
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4270 || buf->b_p_bh[0] == 'w' /* "wipe" */
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4271 || buf->b_p_bh[0] == 'd') /* "delete" */
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4272 {
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4273 /* When no match was found we don't need to remember the
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4274 * buffer, wipe it out. If there was a match and it
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4275 * wasn't the first one or we won't jump there: only
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4276 * unload the buffer.
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4277 * Ignore 'hidden' here, because it may lead to having too
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4278 * many swap files. */
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4279 if (!found_match)
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4280 {
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4281 wipe_dummy_buffer(buf, dirname_start);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4282 buf = NULL;
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4283 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4284 else if (buf != first_match_buf || (flags & VGR_NOJUMP))
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4285 {
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4286 unload_dummy_buffer(buf, dirname_start);
9540
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4287 /* Keeping the buffer, remove the dummy flag. */
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4288 buf->b_flags &= ~BF_DUMMY;
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4289 buf = NULL;
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4290 }
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4291 }
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4292
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4293 if (buf != NULL)
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4294 {
9540
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4295 /* Keeping the buffer, remove the dummy flag. */
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4296 buf->b_flags &= ~BF_DUMMY;
64a791c53418 commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
4297
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4298 /* If the buffer is still loaded we need to use the
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4299 * directory we jumped to below. */
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4300 if (buf == first_match_buf
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4301 && target_dir == NULL
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4302 && STRCMP(dirname_start, dirname_now) != 0)
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4303 target_dir = vim_strsave(dirname_now);
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4304
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4305 /* The buffer is still loaded, the Filetype autocommands
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4306 * need to be done now, in that buffer. And the modelines
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4307 * need to be done (again). But not the window-local
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4308 * options! */
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4309 aucmd_prepbuf(&aco, buf);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4310 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4311 apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4312 buf->b_fname, TRUE, buf);
677
e649c78407e6 updated for version 7.0202
vimboss
parents: 665
diff changeset
4313 #endif
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 716
diff changeset
4314 do_modelines(OPT_NOWIN);
123
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4315 aucmd_restbuf(&aco);
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 119
diff changeset
4316 }
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4317 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4318 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4319 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4320
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4321 FreeWild(fcount, fnames);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4322
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4323 qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4324 qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4325 qi->qf_lists[qi->qf_curlist].qf_index = 1;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4326
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4327 #ifdef FEAT_WINDOWS
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4328 qf_update_buffer(qi, NULL);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4329 #endif
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4330
842
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4331 #ifdef FEAT_AUTOCMD
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4332 if (au_name != NULL)
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4333 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4334 curbuf->b_fname, TRUE, curbuf);
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4335 #endif
a209672376fd updated for version 7.0f
vimboss
parents: 835
diff changeset
4336
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4337 /* Jump to first match. */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4338 if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4339 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4340 if ((flags & VGR_NOJUMP) == 0)
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4341 {
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4342 buf = curbuf;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4343 qf_jump(qi, 0, 0, eap->forceit);
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4344 if (buf != curbuf)
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4345 /* If we jumped to another buffer redrawing will already be
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4346 * taken care of. */
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4347 redraw_for_dummy = FALSE;
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4348
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4349 /* Jump to the directory used after loading the buffer. */
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4350 if (curbuf == first_match_buf && target_dir != NULL)
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4351 {
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4352 exarg_T ea;
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4353
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4354 ea.arg = target_dir;
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4355 ea.cmdidx = CMD_lcd;
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4356 ex_cd(&ea);
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4357 }
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4358 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4359 }
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4360 else
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4361 EMSG2(_(e_nomatch2), s);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4362
1396
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4363 /* If we loaded a dummy buffer into the current window, the autocommands
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4364 * may have messed up things, need to redraw and recompute folds. */
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4365 if (redraw_for_dummy)
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4366 {
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4367 #ifdef FEAT_FOLDING
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4368 foldUpdateAll(curwin);
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4369 #else
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4370 redraw_later(NOT_VALID);
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4371 #endif
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4372 }
3e0f9984e98e updated for version 7.1-111
vimboss
parents: 1302
diff changeset
4373
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4374 theend:
8603
bfa74b84c41c commit https://github.com/vim/vim/commit/5584df65a0ca2315d1eebc13c54a448bee4d0758
Christian Brabandt <cb@256bit.org>
parents: 7833
diff changeset
4375 vim_free(title);
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4376 vim_free(dirname_now);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2651
diff changeset
4377 vim_free(dirname_start);
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1396
diff changeset
4378 vim_free(target_dir);
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4371
diff changeset
4379 vim_regfree(regmatch.regprog);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4380 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4381
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
4382 /*
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4383 * Restore current working directory to "dirname_start" if they differ, taking
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4384 * into account whether it is set locally or globally.
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4385 */
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4386 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4387 restore_start_dir(char_u *dirname_start)
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4388 {
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4389 char_u *dirname_now = alloc(MAXPATHL);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4390
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4391 if (NULL != dirname_now)
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4392 {
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4393 mch_dirname(dirname_now, MAXPATHL);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4394 if (STRCMP(dirname_start, dirname_now) != 0)
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4395 {
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4396 /* If the directory has changed, change it back by building up an
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4397 * appropriate ex command and executing it. */
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4398 exarg_T ea;
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4399
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4400 ea.arg = dirname_start;
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4401 ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4402 ex_cd(&ea);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4403 }
3974
4d1753f3e85c updated for version 7.3.742
Bram Moolenaar <bram@vim.org>
parents: 3965
diff changeset
4404 vim_free(dirname_now);
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4405 }
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4406 }
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4407
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4408 /*
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4409 * Load file "fname" into a dummy buffer and return the buffer pointer,
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4410 * placing the directory resulting from the buffer load into the
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4411 * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4412 * prior to calling this function. Restores directory to "dirname_start" prior
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4413 * to returning, if autocmds or the 'autochdir' option have changed it.
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4414 *
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4415 * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4416 * or wipe_dummy_buffer() later!
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4417 *
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4418 * Returns NULL if it fails.
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4419 */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4420 static buf_T *
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4421 load_dummy_buffer(
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4422 char_u *fname,
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4423 char_u *dirname_start, /* in: old directory */
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4424 char_u *resulting_dir) /* out: new directory */
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4425 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4426 buf_T *newbuf;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4427 bufref_T newbufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4428 bufref_T newbuf_to_wipe;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4429 int failed = TRUE;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4430 aco_save_T aco;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4431
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4432 /* Allocate a buffer without putting it in the buffer list. */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4433 newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4434 if (newbuf == NULL)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4435 return NULL;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4436 set_bufref(&newbufref, newbuf);
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4437
177
84c21eb4fc40 updated for version 7.0054
vimboss
parents: 170
diff changeset
4438 /* Init the options. */
84c21eb4fc40 updated for version 7.0054
vimboss
parents: 170
diff changeset
4439 buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
84c21eb4fc40 updated for version 7.0054
vimboss
parents: 170
diff changeset
4440
1918
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4441 /* need to open the memfile before putting the buffer in a window */
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4442 if (ml_open(newbuf) == OK)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4443 {
1918
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4444 /* set curwin/curbuf to buf and save a few things */
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4445 aucmd_prepbuf(&aco, newbuf);
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4446
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4447 /* Need to set the filename for autocommands. */
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4448 (void)setfname(curbuf, fname, NULL, FALSE);
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4449
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4450 /* Create swap file now to avoid the ATTENTION message. */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4451 check_need_swap(TRUE);
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4452
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4453 /* Remove the "dummy" flag, otherwise autocommands may not
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4454 * work. */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4455 curbuf->b_flags &= ~BF_DUMMY;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4456
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4457 newbuf_to_wipe.br_buf = NULL;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4458 if (readfile(fname, NULL,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4459 (linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4460 NULL, READ_NEW | READ_DUMMY) == OK
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4461 && !got_int
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4462 && !(curbuf->b_flags & BF_NEW))
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4463 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4464 failed = FALSE;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4465 if (curbuf != newbuf)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4466 {
2646
ff3a304b4ac2 updated for version 7.3.066
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
4467 /* Bloody autocommands changed the buffer! Can happen when
ff3a304b4ac2 updated for version 7.3.066
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
4468 * using netrw and editing a remote file. Use the current
ff3a304b4ac2 updated for version 7.3.066
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
4469 * buffer instead, delete the dummy one after restoring the
ff3a304b4ac2 updated for version 7.3.066
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
4470 * window stuff. */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4471 set_bufref(&newbuf_to_wipe, newbuf);
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4472 newbuf = curbuf;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4473 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4474 }
1918
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4475
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4476 /* restore curwin/curbuf and a few other things */
eac2556d4620 updated for version 7.2-215
vimboss
parents: 1883
diff changeset
4477 aucmd_restbuf(&aco);
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4478 if (newbuf_to_wipe.br_buf != NULL && bufref_valid(&newbuf_to_wipe))
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4479 wipe_buffer(newbuf_to_wipe.br_buf, FALSE);
9485
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9475
diff changeset
4480
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9475
diff changeset
4481 /* Add back the "dummy" flag, otherwise buflist_findname_stat() won't
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9475
diff changeset
4482 * skip it. */
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9475
diff changeset
4483 newbuf->b_flags |= BF_DUMMY;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4484 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4485
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4486 /*
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4487 * When autocommands/'autochdir' option changed directory: go back.
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4488 * Let the caller know what the resulting dir was first, in case it is
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4489 * important.
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4490 */
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4491 mch_dirname(resulting_dir, MAXPATHL);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4492 restore_start_dir(dirname_start);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4493
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
4494 if (!bufref_valid(&newbufref))
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4495 return NULL;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4496 if (failed)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4497 {
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4498 wipe_dummy_buffer(newbuf, dirname_start);
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4499 return NULL;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4500 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4501 return newbuf;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4502 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4503
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4504 /*
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4505 * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4506 * directory to "dirname_start" prior to returning, if autocmds or the
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4507 * 'autochdir' option have changed it.
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4508 */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4509 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4510 wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4511 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4512 if (curbuf != buf) /* safety check */
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4513 {
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4514 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4515 cleanup_T cs;
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4516
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4517 /* Reset the error/interrupt/exception state here so that aborting()
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4518 * returns FALSE when wiping out the buffer. Otherwise it doesn't
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4519 * work when got_int is set. */
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4520 enter_cleanup(&cs);
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4521 #endif
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4522
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4523 wipe_buffer(buf, FALSE);
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4524
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4525 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4526 /* Restore the error/interrupt/exception state if not discarded by a
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4527 * new aborting error, interrupt, or uncaught exception. */
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4528 leave_cleanup(&cs);
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4529 #endif
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4530 /* When autocommands/'autochdir' option changed directory: go back. */
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4531 restore_start_dir(dirname_start);
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
4532 }
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4533 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4534
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4535 /*
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4536 * Unload the dummy buffer that load_dummy_buffer() created. Restores
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4537 * directory to "dirname_start" prior to returning, if autocmds or the
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4538 * 'autochdir' option have changed it.
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4539 */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4540 static void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
4541 unload_dummy_buffer(buf_T *buf, char_u *dirname_start)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4542 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4543 if (curbuf != buf) /* safety check */
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4544 {
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3269
diff changeset
4545 close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
3490
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4546
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4547 /* When autocommands/'autochdir' option changed directory: go back. */
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4548 restore_start_dir(dirname_start);
8101253704f6 updated for version 7.3.509
Bram Moolenaar <bram@vim.org>
parents: 3404
diff changeset
4549 }
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4550 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
4551
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4552 #if defined(FEAT_EVAL) || defined(PROTO)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4553 /*
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4554 * Add each quickfix error to list "list" as a dictionary.
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4555 * If qf_idx is -1, use the current list. Otherwise, use the specified list.
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4556 */
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4557 int
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4558 get_errorlist(win_T *wp, int qf_idx, list_T *list)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4559 {
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4560 qf_info_T *qi = &ql_info;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4561 dict_T *dict;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4562 char_u buf[2];
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4563 qfline_T *qfp;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4564 int i;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4565 int bufnum;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4566
647
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4567 if (wp != NULL)
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4568 {
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4569 qi = GET_LOC_LIST(wp);
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4570 if (qi == NULL)
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4571 return FAIL;
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4572 }
19106f131c87 updated for version 7.0188
vimboss
parents: 644
diff changeset
4573
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4574 if (qf_idx == -1)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4575 qf_idx = qi->qf_curlist;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4576
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4577 if (qf_idx >= qi->qf_listcount
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4578 || qi->qf_lists[qf_idx].qf_count == 0)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4579 return FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4580
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4581 qfp = qi->qf_lists[qf_idx].qf_start;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4582 for (i = 1; !got_int && i <= qi->qf_lists[qf_idx].qf_count; ++i)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4583 {
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4584 /* Handle entries with a non-existing buffer number. */
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4585 bufnum = qfp->qf_fnum;
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4586 if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4587 bufnum = 0;
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4588
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4589 if ((dict = dict_alloc()) == NULL)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4590 return FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4591 if (list_append_dict(list, dict) == FAIL)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4592 return FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4593
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4594 buf[0] = qfp->qf_type;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4595 buf[1] = NUL;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4596 if ( dict_add_nr_str(dict, "bufnr", (long)bufnum, NULL) == FAIL
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4597 || dict_add_nr_str(dict, "lnum", (long)qfp->qf_lnum, NULL) == FAIL
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4598 || dict_add_nr_str(dict, "col", (long)qfp->qf_col, NULL) == FAIL
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4599 || dict_add_nr_str(dict, "vcol", (long)qfp->qf_viscol, NULL) == FAIL
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4600 || dict_add_nr_str(dict, "nr", (long)qfp->qf_nr, NULL) == FAIL
960
8c8d07318d8d updated for version 7.0-086
vimboss
parents: 944
diff changeset
4601 || dict_add_nr_str(dict, "pattern", 0L,
8c8d07318d8d updated for version 7.0-086
vimboss
parents: 944
diff changeset
4602 qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
8c8d07318d8d updated for version 7.0-086
vimboss
parents: 944
diff changeset
4603 || dict_add_nr_str(dict, "text", 0L,
8c8d07318d8d updated for version 7.0-086
vimboss
parents: 944
diff changeset
4604 qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4605 || dict_add_nr_str(dict, "type", 0L, buf) == FAIL
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4606 || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4607 return FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4608
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4609 qfp = qfp->qf_next;
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4610 if (qfp == NULL)
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4611 break;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4612 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4613 return OK;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4614 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4615
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4616 /*
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4617 * Flags used by getqflist()/getloclist() to determine which fields to return.
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4618 */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4619 enum {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4620 QF_GETLIST_NONE = 0x0,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4621 QF_GETLIST_TITLE = 0x1,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4622 QF_GETLIST_ITEMS = 0x2,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4623 QF_GETLIST_NR = 0x4,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4624 QF_GETLIST_WINID = 0x8,
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4625 QF_GETLIST_CONTEXT = 0x10,
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4626 QF_GETLIST_ALL = 0xFF
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4627 };
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4628
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4629 /*
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4630 * Return quickfix/location list details (title) as a
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4631 * dictionary. 'what' contains the details to return. If 'list_idx' is -1,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4632 * then current list is used. Otherwise the specified list is used.
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4633 */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4634 int
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4635 get_errorlist_properties(win_T *wp, dict_T *what, dict_T *retdict)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4636 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4637 qf_info_T *qi = &ql_info;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4638 int status = OK;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4639 int qf_idx;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4640 dictitem_T *di;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4641 int flags = QF_GETLIST_NONE;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4642
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4643 if (wp != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4644 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4645 qi = GET_LOC_LIST(wp);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4646 if (qi == NULL)
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4647 {
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4648 /* If querying for the size of the location list, return 0 */
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4649 if (((di = dict_find(what, (char_u *)"nr", -1)) != NULL) &&
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4650 (di->di_tv.v_type == VAR_STRING) &&
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4651 (STRCMP(di->di_tv.vval.v_string, "$") == 0))
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4652 return dict_add_nr_str(retdict, "nr", 0, NULL);
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4653 return FAIL;
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4654 }
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4655 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4656
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4657 qf_idx = qi->qf_curlist; /* default is the current list */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4658 if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4659 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4660 /* Use the specified quickfix/location list */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4661 if (di->di_tv.v_type == VAR_NUMBER)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4662 {
10237
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4663 /* for zero use the current list */
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4664 if (di->di_tv.vval.v_number != 0)
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4665 {
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4666 qf_idx = di->di_tv.vval.v_number - 1;
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4667 if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
197795e3530d commit https://github.com/vim/vim/commit/890680ca6364386fabb271c85e0755bcaa6a33c1
Christian Brabandt <cb@256bit.org>
parents: 10226
diff changeset
4668 return FAIL;
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4669 } else if (qi->qf_listcount == 0) /* stack is empty */
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4670 return FAIL;
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4671 flags |= QF_GETLIST_NR;
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4672 } else if ((di->di_tv.v_type == VAR_STRING) &&
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4673 (STRCMP(di->di_tv.vval.v_string, "$") == 0))
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4674 {
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4675 /* Get the last quickfix list number */
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4676 if (qi->qf_listcount > 0)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4677 qf_idx = qi->qf_listcount - 1;
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4678 else
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4679 qf_idx = -1; /* Quickfix stack is empty */
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4680 flags |= QF_GETLIST_NR;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4681 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4682 else
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4683 return FAIL;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4684 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4685
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4686 if (qf_idx != -1)
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4687 {
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4688 if (dict_find(what, (char_u *)"all", -1) != NULL)
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4689 flags |= QF_GETLIST_ALL;
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4690
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4691 if (dict_find(what, (char_u *)"title", -1) != NULL)
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4692 flags |= QF_GETLIST_TITLE;
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4693
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4694 if (dict_find(what, (char_u *)"winid", -1) != NULL)
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4695 flags |= QF_GETLIST_WINID;
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4696
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4697 if (dict_find(what, (char_u *)"context", -1) != NULL)
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4698 flags |= QF_GETLIST_CONTEXT;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4699
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4700 if (dict_find(what, (char_u *)"items", -1) != NULL)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4701 flags |= QF_GETLIST_ITEMS;
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4702 }
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4703
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4704 if (flags & QF_GETLIST_TITLE)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4705 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4706 char_u *t;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4707 t = qi->qf_lists[qf_idx].qf_title;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4708 if (t == NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4709 t = (char_u *)"";
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4710 status = dict_add_nr_str(retdict, "title", 0L, t);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4711 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4712 if ((status == OK) && (flags & QF_GETLIST_NR))
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4713 status = dict_add_nr_str(retdict, "nr", qf_idx + 1, NULL);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4714 if ((status == OK) && (flags & QF_GETLIST_WINID))
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4715 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4716 win_T *win;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4717 win = qf_find_win(qi);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4718 if (win != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4719 status = dict_add_nr_str(retdict, "winid", win->w_id, NULL);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4720 }
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4721 if ((status == OK) && (flags & QF_GETLIST_ITEMS))
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4722 {
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4723 list_T *l = list_alloc();
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4724 if (l != NULL)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4725 {
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4726 (void)get_errorlist(wp, qf_idx, l);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4727 dict_add_list(retdict, "items", l);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4728 }
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4729 else
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4730 status = FAIL;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4731 }
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4732
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4733 if ((status == OK) && (flags & QF_GETLIST_CONTEXT))
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4734 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4735 if (qi->qf_lists[qf_idx].qf_ctx != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4736 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4737 di = dictitem_alloc((char_u *)"context");
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4738 if (di != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4739 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4740 copy_tv(qi->qf_lists[qf_idx].qf_ctx, &di->di_tv);
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4741 status = dict_add(retdict, di);
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4742 if (status == FAIL)
11422
ad4b56939140 patch 8.0.0595: Coverity warning for not checking return value
Christian Brabandt <cb@256bit.org>
parents: 11412
diff changeset
4743 dictitem_free(di);
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4744 }
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4745 else
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4746 status = FAIL;
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4747 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4748 else
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4749 status = dict_add_nr_str(retdict, "context", 0L, (char_u *)"");
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4750 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4751
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4752 return status;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4753 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4754
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4755 /*
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4756 * Add list of entries to quickfix/location list. Each list entry is
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4757 * a dictionary with item information.
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4758 */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4759 static int
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4760 qf_add_entries(
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4761 qf_info_T *qi,
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4762 int qf_idx,
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4763 list_T *list,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4764 char_u *title,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4765 int action)
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4766 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4767 listitem_T *li;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4768 dict_T *d;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4769 char_u *filename, *pattern, *text, *type;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4770 int bufnum;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4771 long lnum;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4772 int col, nr;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4773 int vcol;
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4774 #ifdef FEAT_WINDOWS
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4775 qfline_T *old_last = NULL;
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4776 #endif
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4777 int valid, status;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4778 int retval = OK;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4779 int did_bufnr_emsg = FALSE;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
4780
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4781 if (action == ' ' || qf_idx == qi->qf_listcount)
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4782 {
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 273
diff changeset
4783 /* make place for a new list */
3965
eccae034465b updated for version 7.3.738
Bram Moolenaar <bram@vim.org>
parents: 3949
diff changeset
4784 qf_new_list(qi, title);
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4785 qf_idx = qi->qf_curlist;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4786 }
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4787 #ifdef FEAT_WINDOWS
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4788 else if (action == 'a' && qi->qf_lists[qf_idx].qf_count > 0)
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4789 /* Adding to existing list, use last entry. */
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4790 old_last = qi->qf_lists[qf_idx].qf_last;
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4791 #endif
277
fe16c18c24a7 updated for version 7.0074
vimboss
parents: 273
diff changeset
4792 else if (action == 'r')
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
4793 {
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4794 qf_free_items(qi, qf_idx);
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4795 qf_store_title(qi, qf_idx, title);
6079
75ae211df37d updated for version 7.4.378
Bram Moolenaar <bram@vim.org>
parents: 5753
diff changeset
4796 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4797
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4798 for (li = list->lv_first; li != NULL; li = li->li_next)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4799 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4800 if (li->li_tv.v_type != VAR_DICT)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4801 continue; /* Skip non-dict items */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4802
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4803 d = li->li_tv.vval.v_dict;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4804 if (d == NULL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4805 continue;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4806
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4807 filename = get_dict_string(d, (char_u *)"filename", TRUE);
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
4808 bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
4809 lnum = (int)get_dict_number(d, (char_u *)"lnum");
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
4810 col = (int)get_dict_number(d, (char_u *)"col");
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
4811 vcol = (int)get_dict_number(d, (char_u *)"vcol");
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
4812 nr = (int)get_dict_number(d, (char_u *)"nr");
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4813 type = get_dict_string(d, (char_u *)"type", TRUE);
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4814 pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
4815 text = get_dict_string(d, (char_u *)"text", TRUE);
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4816 if (text == NULL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4817 text = vim_strsave((char_u *)"");
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4818
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4819 valid = TRUE;
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4820 if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4821 valid = FALSE;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4822
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4823 /* Mark entries with non-existing buffer number as not valid. Give the
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4824 * error message only once. */
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4825 if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4826 {
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4827 if (!did_bufnr_emsg)
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4828 {
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4829 did_bufnr_emsg = TRUE;
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4830 EMSGN(_("E92: Buffer %ld not found"), bufnum);
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4831 }
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4832 valid = FALSE;
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4833 bufnum = 0;
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4834 }
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4835
11390
73cfcf11d983 patch 8.0.0580: cannot set the valid flag with setqflist()
Christian Brabandt <cb@256bit.org>
parents: 11378
diff changeset
4836 /* If the 'valid' field is present it overrules the detected value. */
73cfcf11d983 patch 8.0.0580: cannot set the valid flag with setqflist()
Christian Brabandt <cb@256bit.org>
parents: 11378
diff changeset
4837 if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
73cfcf11d983 patch 8.0.0580: cannot set the valid flag with setqflist()
Christian Brabandt <cb@256bit.org>
parents: 11378
diff changeset
4838 valid = (int)get_dict_number(d, (char_u *)"valid");
73cfcf11d983 patch 8.0.0580: cannot set the valid flag with setqflist()
Christian Brabandt <cb@256bit.org>
parents: 11378
diff changeset
4839
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
4840 status = qf_add_entry(qi,
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4841 qf_idx,
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4842 NULL, /* dir */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4843 filename,
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
4844 bufnum,
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4845 text,
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4846 lnum,
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4847 col,
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4848 vcol, /* vis_col */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4849 pattern, /* search pattern */
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4850 nr,
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4851 type == NULL ? NUL : *type,
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4852 valid);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4853
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4854 vim_free(filename);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4855 vim_free(pattern);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4856 vim_free(text);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4857 vim_free(type);
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4858
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4859 if (status == FAIL)
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4860 {
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4861 retval = FAIL;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4862 break;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4863 }
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4864 }
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4865
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4866 if (qi->qf_lists[qf_idx].qf_index == 0)
2795
133d089f247e updated for version 7.3.173
Bram Moolenaar <bram@vim.org>
parents: 2782
diff changeset
4867 /* no valid entry */
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4868 qi->qf_lists[qf_idx].qf_nonevalid = TRUE;
2146
c17a42da3920 updated for version 7.2.428
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
4869 else
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4870 qi->qf_lists[qf_idx].qf_nonevalid = FALSE;
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
4871 if (action != 'a')
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
4872 {
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4873 qi->qf_lists[qf_idx].qf_ptr =
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4874 qi->qf_lists[qf_idx].qf_start;
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4875 if (qi->qf_lists[qf_idx].qf_count > 0)
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
4876 qi->qf_lists[qf_idx].qf_index = 1;
8932
25c2031e9f9f commit https://github.com/vim/vim/commit/c1808d5822ed9534ef7f0fe509b15bee92a5cc28
Christian Brabandt <cb@256bit.org>
parents: 8751
diff changeset
4877 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4878
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4879 #ifdef FEAT_WINDOWS
8932
25c2031e9f9f commit https://github.com/vim/vim/commit/c1808d5822ed9534ef7f0fe509b15bee92a5cc28
Christian Brabandt <cb@256bit.org>
parents: 8751
diff changeset
4880 /* Don't update the cursor in quickfix window when appending entries */
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
4881 qf_update_buffer(qi, old_last);
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4882 #endif
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4883
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4884 return retval;
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
4885 }
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4886
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4887 static int
9982
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4888 qf_set_properties(qf_info_T *qi, dict_T *what, int action)
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4889 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4890 dictitem_T *di;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4891 int retval = FAIL;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4892 int qf_idx;
9982
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4893 int newlist = FALSE;
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4894
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4895 if (action == ' ' || qi->qf_curlist == qi->qf_listcount)
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4896 newlist = TRUE;
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4897
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4898 qf_idx = qi->qf_curlist; /* default is the current list */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4899 if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4900 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4901 /* Use the specified quickfix/location list */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4902 if (di->di_tv.v_type == VAR_NUMBER)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4903 {
11445
461ac47c3793 patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11443
diff changeset
4904 /* for zero use the current list */
461ac47c3793 patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11443
diff changeset
4905 if (di->di_tv.vval.v_number != 0)
461ac47c3793 patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11443
diff changeset
4906 qf_idx = di->di_tv.vval.v_number - 1;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4907
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4908 if ((action == ' ' || action == 'a') &&
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4909 qf_idx == qi->qf_listcount)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4910 /*
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4911 * When creating a new list, accept qf_idx pointing to the next
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4912 * non-available list
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4913 */
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4914 newlist = TRUE;
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4915 else if (qf_idx < 0 || qf_idx >= qi->qf_listcount)
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4916 return FAIL;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4917 else
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4918 newlist = FALSE; /* use the specified list */
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4919 } else if (di->di_tv.v_type == VAR_STRING &&
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4920 STRCMP(di->di_tv.vval.v_string, "$") == 0 &&
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4921 qi->qf_listcount > 0)
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4922 {
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4923 qf_idx = qi->qf_listcount - 1;
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4924 newlist = FALSE;
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4925 }
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4926 else
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4927 return FAIL;
9982
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4928 }
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4929
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4930 if (newlist)
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4931 {
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4932 qf_new_list(qi, NULL);
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
4933 qf_idx = qi->qf_curlist;
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4934 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4935
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4936 if ((di = dict_find(what, (char_u *)"title", -1)) != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4937 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4938 if (di->di_tv.v_type == VAR_STRING)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4939 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4940 vim_free(qi->qf_lists[qf_idx].qf_title);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4941 qi->qf_lists[qf_idx].qf_title =
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4942 get_dict_string(what, (char_u *)"title", TRUE);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4943 if (qf_idx == qi->qf_curlist)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4944 qf_update_win_titlevar(qi);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4945 retval = OK;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4946 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4947 }
11549
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4948 if ((di = dict_find(what, (char_u *)"items", -1)) != NULL)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4949 {
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4950 if (di->di_tv.v_type == VAR_LIST)
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4951 {
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4952 char_u *title_save = vim_strsave(qi->qf_lists[qf_idx].qf_title);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4953
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4954 retval = qf_add_entries(qi, qf_idx, di->di_tv.vval.v_list,
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4955 title_save, action == ' ' ? 'a' : action);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4956 vim_free(title_save);
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4957 }
f5add45f9848 patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
4958 }
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4959
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4960 if ((di = dict_find(what, (char_u *)"context", -1)) != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4961 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4962 typval_T *ctx;
11502
46bbef0ee9a6 patch 8.0.0634: cannot easily get to the last quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11449
diff changeset
4963
11445
461ac47c3793 patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11443
diff changeset
4964 free_tv(qi->qf_lists[qf_idx].qf_ctx);
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4965 ctx = alloc_tv();
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4966 if (ctx != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4967 copy_tv(&di->di_tv, ctx);
11445
461ac47c3793 patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11443
diff changeset
4968 qi->qf_lists[qf_idx].qf_ctx = ctx;
11609
6f11697fb92c patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents: 11589
diff changeset
4969 retval = OK;
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4970 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
4971
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4972 return retval;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4973 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
4974
11301
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4975 /*
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4976 * Find the non-location list window with the specified location list.
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4977 */
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4978 static win_T *
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4979 find_win_with_ll(qf_info_T *qi)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4980 {
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4981 win_T *wp = NULL;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4982
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4983 FOR_ALL_WINDOWS(wp)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4984 if ((wp->w_llist == qi) && !bt_quickfix(wp->w_buffer))
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4985 return wp;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4986
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4987 return NULL;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4988 }
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4989
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4990 /*
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4991 * Free the entire quickfix/location list stack.
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4992 * If the quickfix/location list window is open, then clear it.
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4993 */
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
4994 static void
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
4995 qf_free_stack(win_T *wp, qf_info_T *qi)
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
4996 {
11301
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4997 win_T *qfwin = qf_find_win(qi);
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4998 win_T *llwin = NULL;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
4999 win_T *orig_wp = wp;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5000
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5001 if (qfwin != NULL)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5002 {
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5003 /* If the quickfix/location list window is open, then clear it */
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5004 if (qi->qf_curlist < qi->qf_listcount)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5005 qf_free(qi, qi->qf_curlist);
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5006 qf_update_buffer(qi, NULL);
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5007 }
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5008
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5009 if (wp != NULL && IS_LL_WINDOW(wp))
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5010 {
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5011 /* If in the location list window, then use the non-location list
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5012 * window with this location list (if present)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5013 */
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5014 llwin = find_win_with_ll(qi);
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5015 if (llwin != NULL)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5016 wp = llwin;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5017 }
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5018
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5019 qf_free_all(wp);
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5020 if (wp == NULL)
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5021 {
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5022 /* quickfix list */
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5023 qi->qf_curlist = 0;
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5024 qi->qf_listcount = 0;
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5025 }
11301
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5026 else if (IS_LL_WINDOW(orig_wp))
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5027 {
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5028 /* If the location list window is open, then create a new empty
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5029 * location list */
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5030 qf_info_T *new_ll = ll_new_list();
11378
2ed7a34ecc54 patch 8.0.0574: get only one quickfix list after :caddbuf
Christian Brabandt <cb@256bit.org>
parents: 11360
diff changeset
5031
11398
30af33f4d353 patch 8.0.0584: memory leak when executing quickfix tests
Christian Brabandt <cb@256bit.org>
parents: 11390
diff changeset
5032 /* first free the list reference in the location list window */
30af33f4d353 patch 8.0.0584: memory leak when executing quickfix tests
Christian Brabandt <cb@256bit.org>
parents: 11390
diff changeset
5033 ll_free_all(&orig_wp->w_llist_ref);
30af33f4d353 patch 8.0.0584: memory leak when executing quickfix tests
Christian Brabandt <cb@256bit.org>
parents: 11390
diff changeset
5034
11301
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5035 orig_wp->w_llist_ref = new_ll;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5036 if (llwin != NULL)
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5037 {
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5038 llwin->w_llist = new_ll;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5039 new_ll->qf_refcount++;
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5040 }
cc8ece2aa389 patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11263
diff changeset
5041 }
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5042 }
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5043
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5044 /*
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5045 * Populate the quickfix list with the items supplied in the list
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5046 * of dictionaries. "title" will be copied to w:quickfix_title.
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5047 * "action" is 'a' for add, 'r' for replace. Otherwise create a new list.
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5048 */
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5049 int
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5050 set_errorlist(
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5051 win_T *wp,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5052 list_T *list,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5053 int action,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5054 char_u *title,
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5055 dict_T *what)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5056 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5057 qf_info_T *qi = &ql_info;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5058 int retval = OK;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5059
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5060 if (wp != NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5061 {
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5062 qi = ll_get_or_alloc_list(wp);
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5063 if (qi == NULL)
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5064 return FAIL;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5065 }
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5066
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5067 if (action == 'f')
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5068 {
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5069 /* Free the entire quickfix or location list stack */
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5070 qf_free_stack(wp, qi);
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5071 }
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5072 else if (what != NULL)
9982
e24aa20d815c commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents: 9931
diff changeset
5073 retval = qf_set_properties(qi, what, action);
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5074 else
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
5075 retval = qf_add_entries(qi, qi->qf_curlist, list, title, action);
9850
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5076
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5077 return retval;
67781bb0a61a commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents: 9738
diff changeset
5078 }
11412
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5079
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5080 static int
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5081 mark_quickfix_ctx(qf_info_T *qi, int copyID)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5082 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5083 int i;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5084 int abort = FALSE;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5085 typval_T *ctx;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5086
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5087 for (i = 0; i < LISTCOUNT && !abort; ++i)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5088 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5089 ctx = qi->qf_lists[i].qf_ctx;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5090 if (ctx != NULL && ctx->v_type != VAR_NUMBER &&
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5091 ctx->v_type != VAR_STRING && ctx->v_type != VAR_FLOAT)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5092 abort = set_ref_in_item(ctx, copyID, NULL, NULL);
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5093 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5094
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5095 return abort;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5096 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5097
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5098 /*
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5099 * Mark the context of the quickfix list and the location lists (if present) as
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5100 * "in use". So that garabage collection doesn't free the context.
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5101 */
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5102 int
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5103 set_ref_in_quickfix(int copyID)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5104 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5105 int abort = FALSE;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5106 tabpage_T *tp;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5107 win_T *win;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5108
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5109 abort = mark_quickfix_ctx(&ql_info, copyID);
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5110 if (abort)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5111 return abort;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5112
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5113 FOR_ALL_TAB_WINDOWS(tp, win)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5114 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5115 if (win->w_llist != NULL)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5116 {
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5117 abort = mark_quickfix_ctx(win->w_llist, copyID);
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5118 if (abort)
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5119 return abort;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5120 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5121 }
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5122
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5123 return abort;
84baca75b7f2 patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents: 11398
diff changeset
5124 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
5125 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
5126
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
5127 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5128 * ":[range]cbuffer [bufnr]" command.
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
5129 * ":[range]caddbuffer [bufnr]" command.
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5130 * ":[range]cgetbuffer [bufnr]" command.
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5131 * ":[range]lbuffer [bufnr]" command.
657
b112ec5c73f0 updated for version 7.0193
vimboss
parents: 648
diff changeset
5132 * ":[range]laddbuffer [bufnr]" command.
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5133 * ":[range]lgetbuffer [bufnr]" command.
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5134 */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5135 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5136 ex_cbuffer(exarg_T *eap)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5137 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5138 buf_T *buf = NULL;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5139 qf_info_T *qi = &ql_info;
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5140 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5141 char_u *au_name = NULL;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5142 #endif
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5143
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5144 if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5145 || eap->cmdidx == CMD_laddbuffer)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5146 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5147 qi = ll_get_or_alloc_list(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5148 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5149 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5150 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5151
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5152 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5153 switch (eap->cmdidx)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5154 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5155 case CMD_cbuffer: au_name = (char_u *)"cbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5156 case CMD_cgetbuffer: au_name = (char_u *)"cgetbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5157 case CMD_caddbuffer: au_name = (char_u *)"caddbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5158 case CMD_lbuffer: au_name = (char_u *)"lbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5159 case CMD_lgetbuffer: au_name = (char_u *)"lgetbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5160 case CMD_laddbuffer: au_name = (char_u *)"laddbuffer"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5161 default: break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5162 }
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5163 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5164 curbuf->b_fname, TRUE, curbuf))
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5165 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5166 # ifdef FEAT_EVAL
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5167 if (aborting())
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5168 return;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5169 # endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5170 }
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5171 #endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5172
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5173 if (*eap->arg == NUL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5174 buf = curbuf;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5175 else if (*skipwhite(skipdigits(eap->arg)) == NUL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5176 buf = buflist_findnr(atoi((char *)eap->arg));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5177 if (buf == NULL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5178 EMSG(_(e_invarg));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5179 else if (buf->b_ml.ml_mfp == NULL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5180 EMSG(_("E681: Buffer is not loaded"));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5181 else
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5182 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5183 if (eap->addr_count == 0)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5184 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5185 eap->line1 = 1;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5186 eap->line2 = buf->b_ml.ml_line_count;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5187 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5188 if (eap->line1 < 1 || eap->line1 > buf->b_ml.ml_line_count
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5189 || eap->line2 < 1 || eap->line2 > buf->b_ml.ml_line_count)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5190 EMSG(_(e_invrange));
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5191 else
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
5192 {
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5193 char_u *qf_title = *eap->cmdlinep;
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5194
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5195 if (buf->b_sfname)
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5196 {
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5197 vim_snprintf((char *)IObuff, IOSIZE, "%s (%s)",
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5198 (char *)qf_title, (char *)buf->b_sfname);
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5199 qf_title = IObuff;
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5200 }
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5201
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
5202 if (qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5203 (eap->cmdidx != CMD_caddbuffer
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5204 && eap->cmdidx != CMD_laddbuffer),
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2296
diff changeset
5205 eap->line1, eap->line2,
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
5206 qf_title, NULL) > 0)
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5207 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5208 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5209 if (au_name != NULL)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5210 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5211 curbuf->b_fname, TRUE, curbuf);
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5212 #endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5213 if (eap->cmdidx == CMD_cbuffer || eap->cmdidx == CMD_lbuffer)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5214 qf_jump(qi, 0, 0, eap->forceit); /* display first error */
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5215 }
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
5216 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5217 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5218 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5219
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
5220 #if defined(FEAT_EVAL) || defined(PROTO)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 26
diff changeset
5221 /*
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5222 * ":cexpr {expr}", ":cgetexpr {expr}", ":caddexpr {expr}" command.
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5223 * ":lexpr {expr}", ":lgetexpr {expr}", ":laddexpr {expr}" command.
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5224 */
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5225 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5226 ex_cexpr(exarg_T *eap)
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5227 {
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5228 typval_T *tv;
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5229 qf_info_T *qi = &ql_info;
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5230 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5231 char_u *au_name = NULL;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5232 #endif
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5233
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5234 if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5235 || eap->cmdidx == CMD_laddexpr)
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5236 {
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5237 qi = ll_get_or_alloc_list(curwin);
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5238 if (qi == NULL)
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5239 return;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5240 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5241
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5242 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5243 switch (eap->cmdidx)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5244 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5245 case CMD_cexpr: au_name = (char_u *)"cexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5246 case CMD_cgetexpr: au_name = (char_u *)"cgetexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5247 case CMD_caddexpr: au_name = (char_u *)"caddexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5248 case CMD_lexpr: au_name = (char_u *)"lexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5249 case CMD_lgetexpr: au_name = (char_u *)"lgetexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5250 case CMD_laddexpr: au_name = (char_u *)"laddexpr"; break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5251 default: break;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5252 }
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5253 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5254 curbuf->b_fname, TRUE, curbuf))
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5255 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5256 # ifdef FEAT_EVAL
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5257 if (aborting())
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5258 return;
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5259 # endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5260 }
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5261 #endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5262
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5263 /* Evaluate the expression. When the result is a string or a list we can
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5264 * use it to fill the errorlist. */
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5265 tv = eval_expr(eap->arg, NULL);
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5266 if (tv != NULL)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5267 {
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5268 if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5269 || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5270 {
11700
dd821396754e patch 8.0.0733: can only add entries to one list in the quickfix stack
Christian Brabandt <cb@256bit.org>
parents: 11609
diff changeset
5271 if (qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5272 (eap->cmdidx != CMD_caddexpr
95dac6af3b3a updated for version 7.0232
vimboss
parents: 789
diff changeset
5273 && eap->cmdidx != CMD_laddexpr),
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
5274 (linenr_T)0, (linenr_T)0, *eap->cmdlinep,
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10379
diff changeset
5275 NULL) > 0)
10056
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5276 {
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5277 #ifdef FEAT_AUTOCMD
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5278 if (au_name != NULL)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5279 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5280 curbuf->b_fname, TRUE, curbuf);
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5281 #endif
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5282 if (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr)
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5283 qf_jump(qi, 0, 0, eap->forceit); /* display first error */
21f685af3fc1 commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
5284 }
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5285 }
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5286 else
626
732c7ae5743e updated for version 7.0180
vimboss
parents: 625
diff changeset
5287 EMSG(_("E777: String or List expected"));
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5288 free_tv(tv);
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 581
diff changeset
5289 }
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5290 }
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
5291 #endif
446
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5292
7472c565592a updated for version 7.0117
vimboss
parents: 418
diff changeset
5293 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5294 * ":helpgrep {pattern}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 void
7833
c079097365f3 commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents: 7805
diff changeset
5297 ex_helpgrep(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5299 regmatch_T regmatch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5300 char_u *save_cpo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5302 int fcount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5303 char_u **fnames;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5304 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5305 int fi;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5306 long lnum;
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5307 #ifdef FEAT_MULTI_LANG
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5308 char_u *lang;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5309 #endif
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5310 qf_info_T *qi = &ql_info;
11195
13c660bd07b2 patch 8.0.0484: :lhelpgrep does not fail after a successful one
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
5311 qf_info_T *save_qi;
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5312 int new_qi = FALSE;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5313 win_T *wp;
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5314 #ifdef FEAT_AUTOCMD
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5315 char_u *au_name = NULL;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5316 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5317
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5318 #ifdef FEAT_MULTI_LANG
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5319 /* Check for a specified language */
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5320 lang = check_help_lang(eap->arg);
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5321 #endif
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5322
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5323 #ifdef FEAT_AUTOCMD
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5324 switch (eap->cmdidx)
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5325 {
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5326 case CMD_helpgrep: au_name = (char_u *)"helpgrep"; break;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5327 case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5328 default: break;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5329 }
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5330 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5331 curbuf->b_fname, TRUE, curbuf))
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5332 {
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5333 # ifdef FEAT_EVAL
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5334 if (aborting())
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5335 return;
10346
d52d97bf675e commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents: 10281
diff changeset
5336 # endif
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5337 }
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5338 #endif
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5339
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5340 /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5341 save_cpo = p_cpo;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5342 p_cpo = empty_option;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5343
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5344 if (eap->cmdidx == CMD_lhelpgrep)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5345 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5346 /* Find an existing help window */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5347 FOR_ALL_WINDOWS(wp)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5348 if (wp->w_buffer != NULL && wp->w_buffer->b_help)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5349 break;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5350
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5351 if (wp == NULL) /* Help window not found */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5352 qi = NULL;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5353 else
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5354 qi = wp->w_llist;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5355
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5356 if (qi == NULL)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5357 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5358 /* Allocate a new location list for help text matches */
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5359 if ((qi = ll_new_list()) == NULL)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5360 return;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5361 new_qi = TRUE;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5362 }
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5363 }
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5364
11195
13c660bd07b2 patch 8.0.0484: :lhelpgrep does not fail after a successful one
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
5365 /* Autocommands may change the list. Save it for later comparison */
13c660bd07b2 patch 8.0.0484: :lhelpgrep does not fail after a successful one
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
5366 save_qi = qi;
13c660bd07b2 patch 8.0.0484: :lhelpgrep does not fail after a successful one
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
5367
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5368 regmatch.regprog = vim_regcomp(eap->arg, RE_MAGIC + RE_STRING);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 regmatch.rm_ic = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370 if (regmatch.regprog != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371 {
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5372 #ifdef FEAT_MBYTE
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5373 vimconv_T vc;
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5374
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5375 /* Help files are in utf-8 or latin1, convert lines when 'encoding'
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5376 * differs. */
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5377 vc.vc_type = CONV_NONE;
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5378 if (!enc_utf8)
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5379 convert_setup(&vc, (char_u *)"utf-8", p_enc);
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5380 #endif
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5381
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5382 /* create a new quickfix list */
3965
eccae034465b updated for version 7.3.738
Bram Moolenaar <bram@vim.org>
parents: 3949
diff changeset
5383 qf_new_list(qi, *eap->cmdlinep);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5385 /* Go through all directories in 'runtimepath' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5386 p = p_rtp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5387 while (*p != NUL && !got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5389 copy_option_part(&p, NameBuff, MAXPATHL, ",");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5391 /* Find all "*.txt" and "*.??x" files in the "doc" directory. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5392 add_pathsep(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5393 STRCAT(NameBuff, "doc/*.\\(txt\\|??x\\)");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5394 if (gen_expand_wildcards(1, &NameBuff, &fcount,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5395 &fnames, EW_FILE|EW_SILENT) == OK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396 && fcount > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5397 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5398 for (fi = 0; fi < fcount && !got_int; ++fi)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 {
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5400 #ifdef FEAT_MULTI_LANG
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5401 /* Skip files for a different language. */
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5402 if (lang != NULL
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5403 && STRNICMP(lang, fnames[fi]
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5404 + STRLEN(fnames[fi]) - 3, 2) != 0
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5405 && !(STRNICMP(lang, "en", 2) == 0
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5406 && STRNICMP("txt", fnames[fi]
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5407 + STRLEN(fnames[fi]) - 3, 3) == 0))
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5408 continue;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5409 #endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 514
diff changeset
5410 fd = mch_fopen((char *)fnames[fi], "r");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 if (fd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5412 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5413 lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5414 while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 {
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5416 char_u *line = IObuff;
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5417 #ifdef FEAT_MBYTE
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5418 /* Convert a line if 'encoding' is not utf-8 and
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5419 * the line contains a non-ASCII character. */
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5420 if (vc.vc_type != CONV_NONE
11263
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5421 && has_non_ascii(IObuff))
ae5f9f26f81c patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents: 11195
diff changeset
5422 {
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5423 line = string_convert(&vc, IObuff, NULL);
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5424 if (line == NULL)
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5425 line = IObuff;
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5426 }
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5427 #endif
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5428
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5429 if (vim_regexec(&regmatch, line, (colnr_T)0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5430 {
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5431 int l = (int)STRLEN(line);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433 /* remove trailing CR, LF, spaces, etc. */
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5434 while (l > 0 && line[l - 1] <= ' ')
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5435 line[--l] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436
9195
543f068f3706 commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents: 9175
diff changeset
5437 if (qf_add_entry(qi,
11449
d2f00eb352b9 patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
5438 qi->qf_curlist,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 NULL, /* dir */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 fnames[fi],
1065
caa550fe4457 updated for version 7.0-191
vimboss
parents: 1020
diff changeset
5441 0,
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5442 line,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 lnum,
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5444 (int)(regmatch.startp[0] - line)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
5445 + 1, /* col */
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
5446 FALSE, /* vis_col */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 189
diff changeset
5447 NULL, /* search pattern */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5448 0, /* nr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449 1, /* type */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5450 TRUE /* valid */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451 ) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 got_int = TRUE;
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5454 #ifdef FEAT_MBYTE
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5455 if (line != IObuff)
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5456 vim_free(line);
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5457 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 }
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5461 #ifdef FEAT_MBYTE
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5462 if (line != IObuff)
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5463 vim_free(line);
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5464 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5465 ++lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5466 line_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5467 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468 fclose(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5469 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5470 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 FreeWild(fcount, fnames);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5472 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5473 }
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5474
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4371
diff changeset
5475 vim_regfree(regmatch.regprog);
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5476 #ifdef FEAT_MBYTE
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5477 if (vc.vc_type != CONV_NONE)
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5478 convert_setup(&vc, NULL, NULL);
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3242
diff changeset
5479 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5481 qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5482 qi->qf_lists[qi->qf_curlist].qf_ptr =
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5483 qi->qf_lists[qi->qf_curlist].qf_start;
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5484 qi->qf_lists[qi->qf_curlist].qf_index = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486
1672
fddea6c03dee updated for version 7.2b-004
vimboss
parents: 1668
diff changeset
5487 if (p_cpo == empty_option)
fddea6c03dee updated for version 7.2b-004
vimboss
parents: 1668
diff changeset
5488 p_cpo = save_cpo;
fddea6c03dee updated for version 7.2b-004
vimboss
parents: 1668
diff changeset
5489 else
fddea6c03dee updated for version 7.2b-004
vimboss
parents: 1668
diff changeset
5490 /* Darn, some plugin changed the value. */
fddea6c03dee updated for version 7.2b-004
vimboss
parents: 1668
diff changeset
5491 free_string_option(save_cpo);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493 #ifdef FEAT_WINDOWS
9175
d415c079f84e commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents: 9114
diff changeset
5494 qf_update_buffer(qi, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5495 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5496
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5497 #ifdef FEAT_AUTOCMD
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5498 if (au_name != NULL)
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5499 {
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5500 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5501 curbuf->b_fname, TRUE, curbuf);
11195
13c660bd07b2 patch 8.0.0484: :lhelpgrep does not fail after a successful one
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
5502 if (!new_qi && qi != save_qi && qf_find_buf(qi) == NULL)
3269
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5503 /* autocommands made "qi" invalid */
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5504 return;
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5505 }
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5506 #endif
5850b5827691 updated for version 7.3.403
Bram Moolenaar <bram@vim.org>
parents: 3267
diff changeset
5507
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508 /* Jump to first match. */
644
e4fa26ce8769 updated for version 7.0187
vimboss
parents: 639
diff changeset
5509 if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5510 qf_jump(qi, 0, 0, FALSE);
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5511 else
4102fb4ea781 updated for version 7.0002
vimboss
parents: 7
diff changeset
5512 EMSG2(_(e_nomatch2), eap->arg);
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5513
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5514 if (eap->cmdidx == CMD_lhelpgrep)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5515 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5516 /* If the help window is not opened or if it already points to the
661
e93a99ef31d0 updated for version 7.0195
vimboss
parents: 659
diff changeset
5517 * correct location list, then free the new location list. */
659
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5518 if (!curwin->w_buffer->b_help || curwin->w_llist == qi)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5519 {
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5520 if (new_qi)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5521 ll_free_all(&qi);
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5522 }
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5523 else if (curwin->w_llist == NULL)
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5524 curwin->w_llist = qi;
d6a69271cb9a updated for version 7.0194
vimboss
parents: 657
diff changeset
5525 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 #endif /* FEAT_QUICKFIX */
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5529
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5530 /*
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5531 * Return TRUE if "buf" is the quickfix buffer.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5532 */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5533 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5534 bt_quickfix(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5535 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5536 return buf != NULL && buf->b_p_bt[0] == 'q';
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5537 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5538
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5539 /*
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5540 * Return TRUE if "buf" is a terminal buffer.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5541 */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5542 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5543 bt_terminal(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5544 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5545 return buf != NULL && buf->b_p_bt[0] == 't';
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5546 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5547
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5548 /*
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5549 * Return TRUE if "buf" is a "nofile", "acwrite" or "terminal" buffer.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5550 * This means the buffer name is not a file name.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5551 */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5552 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5553 bt_nofile(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5554 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5555 return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5556 || buf->b_p_bt[0] == 'a'
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5557 || buf->b_p_bt[0] == 't');
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5558 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5559
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5560 /*
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5561 * Return TRUE if "buf" is a "nowrite", "nofile" or "terminal" buffer.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5562 */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5563 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5564 bt_dontwrite(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5565 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5566 return buf != NULL && (buf->b_p_bt[0] == 'n' || buf->b_p_bt[0] == 't');
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5567 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5568
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5569 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5570 bt_dontwrite_msg(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5571 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5572 if (bt_dontwrite(buf))
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5573 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5574 EMSG(_("E382: Cannot write, 'buftype' option is set"));
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5575 return TRUE;
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5576 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5577 return FALSE;
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5578 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5579
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5580 /*
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5581 * Return TRUE if the buffer should be hidden, according to 'hidden', ":hide"
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5582 * and 'bufhidden'.
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5583 */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5584 int
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5585 buf_hide(buf_T *buf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5586 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5587 /* 'bufhidden' overrules 'hidden' and ":hide", check it first */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5588 switch (buf->b_p_bh[0])
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5589 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5590 case 'u': /* "unload" */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5591 case 'w': /* "wipe" */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5592 case 'd': return FALSE; /* "delete" */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5593 case 'h': return TRUE; /* "hide" */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5594 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5595 return (p_hid || cmdmod.hide);
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5596 }
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11705
diff changeset
5597