Mercurial > vim
annotate src/quickfix.c @ 30061:f4a7831fa352 v9.0.0368
patch 9.0.0368: old Coverity warning for using NULL pointer
Commit: https://github.com/vim/vim/commit/89083466fa565bea22832687ec5fe89a70a3b8f7
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Sep 3 12:59:19 2022 +0100
patch 9.0.0368: old Coverity warning for using NULL pointer
Problem: Old Coverity warning for using NULL pointer.
Solution: Bail out if dictionary allocation fails.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 03 Sep 2022 14:00:04 +0200 |
parents | b01273bbc75e |
children | bba8d0f45cb8 |
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 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 * See README.txt for an overview of the Vim source code. | |
8 */ | |
9 | |
10 /* | |
11 * quickfix.c: functions for quickfix mode, using a file with error messages | |
12 */ | |
13 | |
14 #include "vim.h" | |
15 | |
16 #if defined(FEAT_QUICKFIX) || defined(PROTO) | |
17 | |
18 struct dir_stack_T | |
19 { | |
20 struct dir_stack_T *next; | |
21 char_u *dirname; | |
22 }; | |
23 | |
24 /* | |
230 | 25 * For each error the next struct is allocated and linked in a list. |
7 | 26 */ |
230 | 27 typedef struct qfline_S qfline_T; |
28 struct qfline_S | |
7 | 29 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
30 qfline_T *qf_next; // pointer to next error in the list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
31 qfline_T *qf_prev; // pointer to previous error in the list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
32 linenr_T qf_lnum; // line number where the error occurred |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
33 linenr_T qf_end_lnum; // line number when the error has range or zero |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
34 int qf_fnum; // file number for the line |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
35 int qf_col; // column where the error occurred |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
36 int qf_end_col; // column when the error has range or zero |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
37 int qf_nr; // error number |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
38 char_u *qf_module; // module name for this error |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
39 char_u *qf_pattern; // search pattern for the error |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
40 char_u *qf_text; // description of the error |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
41 char_u qf_viscol; // set to TRUE if qf_col and qf_end_col is |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
42 // screen column |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
43 char_u qf_cleared; // set to TRUE if line has been deleted |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
44 char_u qf_type; // type of the error (mostly 'E'); 1 for |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
45 // :helpgrep |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
46 char_u qf_valid; // valid error message detected |
7 | 47 }; |
48 | |
49 /* | |
50 * There is a stack of error lists. | |
51 */ | |
52 #define LISTCOUNT 10 | |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
53 #define INVALID_QFIDX (-1) |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
54 #define INVALID_QFBUFNR (0) |
7 | 55 |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
56 /* |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
57 * Quickfix list type. |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
58 */ |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
59 typedef enum |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
60 { |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
61 QFLT_QUICKFIX, // Quickfix list - global list |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
62 QFLT_LOCATION, // Location list - per window list |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
63 QFLT_INTERNAL // Internal - Temporary list used by getqflist()/getloclist() |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
64 } qfltype_T; |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
65 |
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
66 /* |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
67 * 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
|
68 * 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
|
69 * 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
|
70 * |
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
71 * 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
|
72 * 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
|
73 * 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
|
74 */ |
644 | 75 typedef struct qf_list_S |
7 | 76 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
77 int_u qf_id; // Unique identifier for this list |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
78 qfltype_T qfl_type; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
79 qfline_T *qf_start; // pointer to the first error |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
80 qfline_T *qf_last; // pointer to the last error |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
81 qfline_T *qf_ptr; // pointer to the current error |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
82 int qf_count; // number of errors (0 means empty list) |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
83 int qf_index; // current index in the error list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
84 int qf_nonevalid; // TRUE if not a single valid entry found |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
85 char_u *qf_title; // title derived from the command that created |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
86 // the error list or set by setqflist |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
87 typval_T *qf_ctx; // context set by setqflist/setloclist |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
88 callback_T qf_qftf_cb; // 'quickfixtextfunc' callback function |
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
|
89 |
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
|
90 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 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
|
96 int qf_multiscan; |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
97 long qf_changedtick; |
644 | 98 } qf_list_T; |
99 | |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
100 /* |
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
101 * 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
|
102 * 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
|
103 */ |
644 | 104 struct qf_info_S |
105 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
106 // Count of references to this list. Used only for location lists. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
107 // When a location list window reference this list, qf_refcount |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
108 // will be 2. Otherwise, qf_refcount will be 1. When qf_refcount |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
109 // reaches 0, the list is freed. |
644 | 110 int qf_refcount; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
111 int qf_listcount; // current number of lists |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
112 int qf_curlist; // current error list |
644 | 113 qf_list_T qf_lists[LISTCOUNT]; |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
114 qfltype_T qfl_type; // type of list |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
115 int qf_bufnr; // quickfix window buffer number |
644 | 116 }; |
117 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
118 static qf_info_T ql_info; // global quickfix list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
119 static int_u last_qf_id = 0; // Last used quickfix list id |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
120 |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
121 #define FMT_PATTERNS 13 // maximum number of % recognized |
7 | 122 |
123 /* | |
124 * Structure used to hold the info of one part of 'errorformat' | |
125 */ | |
789 | 126 typedef struct efm_S efm_T; |
127 struct efm_S | |
7 | 128 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
129 regprog_T *prog; // pre-formatted part of 'errorformat' |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
130 efm_T *next; // pointer to next (NULL if last) |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
131 char_u addr[FMT_PATTERNS]; // indices of used % patterns |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
132 char_u prefix; // prefix of this format line: |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
133 // 'D' enter directory |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
134 // 'X' leave directory |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
135 // 'A' start of multi-line message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
136 // 'E' error message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
137 // 'W' warning message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
138 // 'I' informational message |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
139 // 'N' note message |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
140 // 'C' continuation line |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
141 // 'Z' end of multi-line message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
142 // 'G' general, unspecific message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
143 // 'P' push file (partial) message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
144 // 'Q' pop/quit file (partial) message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
145 // 'O' overread (partial) message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
146 char_u flags; // additional flags given in prefix |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
147 // '-' do not include this line |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
148 // '+' include whole line in message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
149 int conthere; // %> used |
7 | 150 }; |
151 | |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
152 // List of location lists to be deleted. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
153 // Used to delay the deletion of locations lists by autocmds. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
154 typedef struct qf_delq_S |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
155 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
156 struct qf_delq_S *next; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
157 qf_info_T *qi; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
158 } qf_delq_T; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
159 static qf_delq_T *qf_delq_head = NULL; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
160 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
161 // Counter to prevent autocmds from freeing up location lists when they are |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
162 // still being used. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
163 static int quickfix_busy = 0; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
164 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
165 static efm_T *fmt_start = NULL; // cached across qf_parse_line() calls |
10367
4e4e116e3689
commit https://github.com/vim/vim/commit/63bed3d319b5d90765dbdae93a3579b6322d79fb
Christian Brabandt <cb@256bit.org>
parents:
10359
diff
changeset
|
166 |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
167 // callback function for 'quickfixtextfunc' |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
168 static callback_T qftf_cb; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
169 |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7710
diff
changeset
|
170 static void qf_new_list(qf_info_T *qi, char_u *qf_title); |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
171 static int qf_add_entry(qf_list_T *qfl, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, long end_lnum, int col, int end_col, int vis_col, char_u *pattern, int nr, int type, int valid); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
172 static void qf_free(qf_list_T *qfl); |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7710
diff
changeset
|
173 static char_u *qf_types(int, int); |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
174 static int qf_get_fnum(qf_list_T *qfl, char_u *, char_u *); |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
175 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
|
176 static char_u *qf_pop_dir(struct dir_stack_T **); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
177 static char_u *qf_guess_filepath(qf_list_T *qfl, char_u *); |
17789
0f7ae8010787
patch 8.1.1891: functions used in one file are global
Bram Moolenaar <Bram@vim.org>
parents:
17099
diff
changeset
|
178 static void qf_jump_newwin(qf_info_T *qi, int dir, int errornr, int forceit, int newwin); |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7710
diff
changeset
|
179 static void qf_fmt_text(char_u *text, char_u *buf, int bufsize); |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
180 static void qf_range_text(qfline_T *qfp, char_u *buf, int bufsize); |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7710
diff
changeset
|
181 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
|
182 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
|
183 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
|
184 static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last); |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
185 static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last, int qf_winid); |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7710
diff
changeset
|
186 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
|
187 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
|
188 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
|
189 static qf_info_T *ll_get_or_alloc_list(win_T *); |
7 | 190 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
191 // Quickfix window check helper macro |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
192 #define IS_QF_WINDOW(wp) (bt_quickfix((wp)->w_buffer) && (wp)->w_llist_ref == NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
193 // Location list window check helper macro |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
194 #define IS_LL_WINDOW(wp) (bt_quickfix((wp)->w_buffer) && (wp)->w_llist_ref != NULL) |
14560
8413e66d00a1
patch 8.1.0293: checks for type of stack is cryptic
Christian Brabandt <cb@256bit.org>
parents:
14552
diff
changeset
|
195 |
8413e66d00a1
patch 8.1.0293: checks for type of stack is cryptic
Christian Brabandt <cb@256bit.org>
parents:
14552
diff
changeset
|
196 // Quickfix and location list stack check helper macros |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
197 #define IS_QF_STACK(qi) ((qi)->qfl_type == QFLT_QUICKFIX) |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
198 #define IS_LL_STACK(qi) ((qi)->qfl_type == QFLT_LOCATION) |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
199 #define IS_QF_LIST(qfl) ((qfl)->qfl_type == QFLT_QUICKFIX) |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
200 #define IS_LL_LIST(qfl) ((qfl)->qfl_type == QFLT_LOCATION) |
14560
8413e66d00a1
patch 8.1.0293: checks for type of stack is cryptic
Christian Brabandt <cb@256bit.org>
parents:
14552
diff
changeset
|
201 |
644 | 202 /* |
203 * Return location list for window 'wp' | |
204 * For location list window, return the referenced location list | |
205 */ | |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
206 #define GET_LOC_LIST(wp) (IS_LL_WINDOW(wp) ? (wp)->w_llist_ref : (wp)->w_llist) |
644 | 207 |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
208 // Macro to loop through all the items in a quickfix list |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
209 // Quickfix item index starts from 1, so i below starts at 1 |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
210 #define FOR_ALL_QFL_ITEMS(qfl, qfp, i) \ |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
211 for ((i) = 1, (qfp) = (qfl)->qf_start; \ |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
212 !got_int && (i) <= (qfl)->qf_count && (qfp) != NULL; \ |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27605
diff
changeset
|
213 ++(i), (qfp) = (qfp)->qf_next) |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
214 |
7 | 215 /* |
11443
30b3775addb2
patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents:
11426
diff
changeset
|
216 * 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
|
217 * 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
|
218 */ |
11447
698ee9d4fe9f
patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents:
11445
diff
changeset
|
219 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
|
220 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
|
221 |
30b3775addb2
patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents:
11426
diff
changeset
|
222 /* |
9033
0536d1469b67
commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents:
8932
diff
changeset
|
223 * 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
|
224 */ |
0536d1469b67
commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents:
8932
diff
changeset
|
225 #define LINE_MAXLEN 4096 |
0536d1469b67
commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents:
8932
diff
changeset
|
226 |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
227 /* |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
228 * Patterns used. Keep in sync with qf_parse_fmt[]. |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
229 */ |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
230 static struct fmtpattern |
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 char_u convchar; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
233 char *pattern; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
234 } fmt_pat[FMT_PATTERNS] = |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
235 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
236 {'f', ".\\+"}, // only used when at end |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
237 {'n', "\\d\\+"}, // 1 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
238 {'l', "\\d\\+"}, // 2 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
239 {'e', "\\d\\+"}, // 3 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
240 {'c', "\\d\\+"}, // 4 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
241 {'k', "\\d\\+"}, // 5 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
242 {'t', "."}, // 6 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
243 #define FMT_PATTERN_M 7 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
244 {'m', ".\\+"}, // 7 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
245 #define FMT_PATTERN_R 8 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
246 {'r', ".*"}, // 8 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
247 {'p', "[- .]*"}, // 9 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
248 {'v', "\\d\\+"}, // 10 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
249 {'s', ".\\+"}, // 11 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
250 {'o', ".\\+"} // 12 |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
251 }; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
252 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
253 /* |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
254 * Convert an errorformat pattern to a regular expression pattern. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
255 * See fmt_pat definition above for the list of supported patterns. The |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
256 * pattern specifier is supplied in "efmpat". The converted pattern is stored |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
257 * in "regpat". Returns a pointer to the location after the pattern. |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
258 */ |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
259 static char_u * |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
260 efmpat_to_regpat( |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
261 char_u *efmpat, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
262 char_u *regpat, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
263 efm_T *efminfo, |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
264 int idx, |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
265 int round) |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
266 { |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
267 char_u *srcptr; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
268 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
269 if (efminfo->addr[idx]) |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
270 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
271 // Each errorformat pattern can occur only once |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
272 semsg(_(e_too_many_chr_in_format_string), *efmpat); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
273 return NULL; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
274 } |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
275 if ((idx && idx < FMT_PATTERN_R |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
276 && vim_strchr((char_u *)"DXOPQ", efminfo->prefix) != NULL) |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
277 || (idx == FMT_PATTERN_R |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
278 && vim_strchr((char_u *)"OPQ", efminfo->prefix) == NULL)) |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
279 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
280 semsg(_(e_unexpected_chr_in_format_str), *efmpat); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
281 return NULL; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
282 } |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
283 efminfo->addr[idx] = (char_u)++round; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
284 *regpat++ = '\\'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
285 *regpat++ = '('; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
286 #ifdef BACKSLASH_IN_FILENAME |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
287 if (*efmpat == 'f') |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
288 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
289 // Also match "c:" in the file name, even when |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
290 // checking for a colon next: "%f:". |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
291 // "\%(\a:\)\=" |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
292 STRCPY(regpat, "\\%(\\a:\\)\\="); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
293 regpat += 10; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
294 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
295 #endif |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
296 if (*efmpat == 'f' && efmpat[1] != NUL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
297 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
298 if (efmpat[1] != '\\' && efmpat[1] != '%') |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
299 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
300 // A file name may contain spaces, but this isn't |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
301 // in "\f". For "%f:%l:%m" there may be a ":" in |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
302 // the file name. Use ".\{-1,}x" instead (x is |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
303 // the next character), the requirement that :999: |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
304 // follows should work. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
305 STRCPY(regpat, ".\\{-1,}"); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
306 regpat += 7; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
307 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
308 else |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
309 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
310 // File name followed by '\\' or '%': include as |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
311 // many file name chars as possible. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
312 STRCPY(regpat, "\\f\\+"); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
313 regpat += 4; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
314 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
315 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
316 else |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
317 { |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
318 srcptr = (char_u *)fmt_pat[idx].pattern; |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
319 while ((*regpat = *srcptr++) != NUL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
320 ++regpat; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
321 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
322 *regpat++ = '\\'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
323 *regpat++ = ')'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
324 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
325 return regpat; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
326 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
327 |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
328 /* |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
329 * Convert a scanf like format in 'errorformat' to a regular expression. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
330 * Returns a pointer to the location after the pattern. |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
331 */ |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
332 static char_u * |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
333 scanf_fmt_to_regpat( |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
334 char_u **pefmp, |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
335 char_u *efm, |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
336 int len, |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
337 char_u *regpat) |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
338 { |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
339 char_u *efmp = *pefmp; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
340 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
341 if (*efmp == '[' || *efmp == '\\') |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
342 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
343 if ((*regpat++ = *efmp) == '[') // %*[^a-z0-9] etc. |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
344 { |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
345 if (efmp[1] == '^') |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
346 *regpat++ = *++efmp; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
347 if (efmp < efm + len) |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
348 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
349 *regpat++ = *++efmp; // could be ']' |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
350 while (efmp < efm + len |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
351 && (*regpat++ = *++efmp) != ']') |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
352 // skip ; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
353 if (efmp == efm + len) |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
354 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
355 emsg(_(e_missing_rsb_in_format_string)); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
356 return NULL; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
357 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
358 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
359 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
360 else if (efmp < efm + len) // %*\D, %*\s etc. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
361 *regpat++ = *++efmp; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
362 *regpat++ = '\\'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
363 *regpat++ = '+'; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
364 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
365 else |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
366 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
367 // TODO: scanf()-like: %*ud, %*3c, %*f, ... ? |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
368 semsg(_(e_unsupported_chr_in_format_string), *efmp); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
369 return NULL; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
370 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
371 |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
372 *pefmp = efmp; |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
373 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
374 return regpat; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
375 } |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
376 |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
377 /* |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
378 * Analyze/parse an errorformat prefix. |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
379 */ |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
380 static char_u * |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
381 efm_analyze_prefix(char_u *efmp, efm_T *efminfo) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
382 { |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
383 if (vim_strchr((char_u *)"+-", *efmp) != NULL) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
384 efminfo->flags = *efmp++; |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
385 if (vim_strchr((char_u *)"DXAEWINCZGOPQ", *efmp) != NULL) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
386 efminfo->prefix = *efmp; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
387 else |
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
388 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
389 semsg(_(e_invalid_chr_in_format_string_prefix), *efmp); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
390 return NULL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
391 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
392 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
393 return efmp; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
394 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
395 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
396 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
397 * Converts a 'errorformat' string part in 'efm' to a regular expression |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
398 * pattern. The resulting regex pattern is returned in "regpat". Additional |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
399 * information about the 'erroformat' pattern is returned in "fmt_ptr". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
400 * Returns OK or FAIL. |
9365
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 static int |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
403 efm_to_regpat( |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
404 char_u *efm, |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
405 int len, |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
406 efm_T *fmt_ptr, |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
407 char_u *regpat) |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
408 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
409 char_u *ptr; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
410 char_u *efmp; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
411 int round; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
412 int idx = 0; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
413 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
414 // Build a regexp pattern for a 'errorformat' option part |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
415 ptr = regpat; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
416 *ptr++ = '^'; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
417 round = 0; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
418 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
|
419 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
420 if (*efmp == '%') |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
421 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
422 ++efmp; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
423 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
|
424 if (fmt_pat[idx].convchar == *efmp) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
425 break; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
426 if (idx < FMT_PATTERNS) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
427 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
428 ptr = efmpat_to_regpat(efmp, ptr, fmt_ptr, idx, round); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
429 if (ptr == NULL) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
430 return FAIL; |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
431 round++; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
432 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
433 else if (*efmp == '*') |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
434 { |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
435 ++efmp; |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
436 ptr = scanf_fmt_to_regpat(&efmp, efm, len, ptr); |
13984
9b1dc5c2f460
patch 8.1.0010: efm_to_regpat() is too long
Christian Brabandt <cb@256bit.org>
parents:
13948
diff
changeset
|
437 if (ptr == NULL) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
438 return FAIL; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
439 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
440 else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
441 *ptr++ = *efmp; // regexp magic characters |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
442 else if (*efmp == '#') |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
443 *ptr++ = '*'; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
444 else if (*efmp == '>') |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
445 fmt_ptr->conthere = TRUE; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
446 else if (efmp == efm + 1) // analyse prefix |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
447 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
448 // prefix is allowed only at the beginning of the errorformat |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
449 // option part |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
450 efmp = efm_analyze_prefix(efmp, fmt_ptr); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
451 if (efmp == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
452 return FAIL; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
453 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
454 else |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
455 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
456 semsg(_(e_invalid_chr_in_format_string), *efmp); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
457 return FAIL; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
458 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
459 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
460 else // copy normal character |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
461 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
462 if (*efmp == '\\' && efmp + 1 < efm + len) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
463 ++efmp; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
464 else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
465 *ptr++ = '\\'; // escape regexp atoms |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
466 if (*efmp) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
467 *ptr++ = *efmp; |
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 *ptr++ = '$'; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
471 *ptr = NUL; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
472 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
473 return OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
474 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
475 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
476 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
477 * Free the 'errorformat' information list |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
478 */ |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
479 static void |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
480 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
|
481 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
482 efm_T *efm_ptr; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
483 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
484 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
|
485 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
486 *efm_first = efm_ptr->next; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
487 vim_regfree(efm_ptr->prog); |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
488 vim_free(efm_ptr); |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
489 } |
10367
4e4e116e3689
commit https://github.com/vim/vim/commit/63bed3d319b5d90765dbdae93a3579b6322d79fb
Christian Brabandt <cb@256bit.org>
parents:
10359
diff
changeset
|
490 fmt_start = NULL; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
491 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
492 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
493 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
494 * Compute the size of the buffer used to convert a 'errorformat' pattern into |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
495 * a regular expression pattern. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
496 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
497 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
498 efm_regpat_bufsz(char_u *efm) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
499 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
500 int sz; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
501 int i; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
502 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
503 sz = (FMT_PATTERNS * 3) + ((int)STRLEN(efm) << 2); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
504 for (i = FMT_PATTERNS; i > 0; ) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
505 sz += (int)STRLEN(fmt_pat[--i].pattern); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
506 #ifdef BACKSLASH_IN_FILENAME |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
507 sz += 12; // "%f" can become twelve chars longer (see efm_to_regpat) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
508 #else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
509 sz += 2; // "%f" can become two chars longer |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
510 #endif |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
511 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
512 return sz; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
513 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
514 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
515 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
516 * Return the length of a 'errorformat' option part (separated by ","). |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
517 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
518 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
519 efm_option_part_len(char_u *efm) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
520 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
521 int len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
522 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
523 for (len = 0; efm[len] != NUL && efm[len] != ','; ++len) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
524 if (efm[len] == '\\' && efm[len + 1] != NUL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
525 ++len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
526 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
527 return len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
528 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
529 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
530 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
531 * Parse the 'errorformat' option. Multiple parts in the 'errorformat' option |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
532 * are parsed and converted to regular expressions. Returns information about |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
533 * the parsed 'errorformat' option. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
534 */ |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
535 static efm_T * |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
536 parse_efm_option(char_u *efm) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
537 { |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
538 efm_T *fmt_ptr = NULL; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
539 efm_T *fmt_first = NULL; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
540 efm_T *fmt_last = NULL; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
541 char_u *fmtstr = NULL; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
542 int len; |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
543 int sz; |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
544 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
545 // Each part of the format string is copied and modified from errorformat |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
546 // to regex prog. Only a few % characters are allowed. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
547 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
548 // Get some space to modify the format string into. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
549 sz = efm_regpat_bufsz(efm); |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
550 if ((fmtstr = alloc_id(sz, aid_qf_efm_fmtstr)) == NULL) |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
551 goto parse_efm_error; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
552 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
553 while (efm[0] != NUL) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
554 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
555 // Allocate a new eformat structure and put it at the end of the list |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
556 fmt_ptr = ALLOC_CLEAR_ONE_ID(efm_T, aid_qf_efm_fmtpart); |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
557 if (fmt_ptr == NULL) |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
558 goto parse_efm_error; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
559 if (fmt_first == NULL) // first one |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
560 fmt_first = fmt_ptr; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
561 else |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
562 fmt_last->next = fmt_ptr; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
563 fmt_last = fmt_ptr; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
564 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
565 // Isolate one part in the 'errorformat' option |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
566 len = efm_option_part_len(efm); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
567 |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
568 if (efm_to_regpat(efm, len, fmt_ptr, fmtstr) == FAIL) |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
569 goto parse_efm_error; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
570 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
|
571 goto parse_efm_error; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
572 // Advance to next part |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
573 efm = skip_to_option_part(efm + len); // skip comma and spaces |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
574 } |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
575 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
576 if (fmt_first == NULL) // nothing found |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
577 emsg(_(e_errorformat_contains_no_pattern)); |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
578 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
579 goto parse_efm_end; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
580 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
581 parse_efm_error: |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
582 free_efm_list(&fmt_first); |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
583 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
584 parse_efm_end: |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
585 vim_free(fmtstr); |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
586 |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
587 return fmt_first; |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
588 } |
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
589 |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
590 enum { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
591 QF_FAIL = 0, |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
592 QF_OK = 1, |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
593 QF_END_OF_INPUT = 2, |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
594 QF_NOMEM = 3, |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
595 QF_IGNORE_LINE = 4, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
596 QF_MULTISCAN = 5, |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
597 QF_ABORT = 6 |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
598 }; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
599 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
600 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
601 * State information used to parse lines and add entries to a quickfix/location |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
602 * list. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
603 */ |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
604 typedef struct { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
605 char_u *linebuf; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
606 int linelen; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
607 char_u *growbuf; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
608 int growbufsiz; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
609 FILE *fd; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
610 typval_T *tv; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
611 char_u *p_str; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
612 listitem_T *p_li; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
613 buf_T *buf; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
614 linenr_T buflnum; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
615 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
|
616 vimconv_T vc; |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
617 } qfstate_T; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
618 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
619 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
620 * Allocate more memory for the line buffer used for parsing lines. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
621 */ |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
622 static char_u * |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
623 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
|
624 { |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
625 char_u *p; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
626 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
627 // If the line exceeds LINE_MAXLEN exclude the last |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
628 // byte since it's not a NL character. |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
629 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
|
630 if (state->growbuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
631 { |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
632 state->growbuf = alloc_id(state->linelen + 1, aid_qf_linebuf); |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
633 if (state->growbuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
634 return NULL; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
635 state->growbufsiz = state->linelen; |
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 else if (state->linelen > state->growbufsiz) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
638 { |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
639 if ((p = vim_realloc(state->growbuf, state->linelen + 1)) == NULL) |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
640 return NULL; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
641 state->growbuf = p; |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
642 state->growbufsiz = state->linelen; |
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 return state->growbuf; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
645 } |
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 /* |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
648 * 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
|
649 */ |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
650 static int |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
651 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
|
652 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
653 // Get the next line from the supplied string |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
654 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
|
655 char_u *p; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
656 int len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
657 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
658 if (*p_str == NUL) // Reached the end of the string |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
659 return QF_END_OF_INPUT; |
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 p = vim_strchr(p_str, '\n'); |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
662 if (p != NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
663 len = (int)(p - p_str) + 1; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
664 else |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
665 len = (int)STRLEN(p_str); |
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 if (len > IOSIZE - 2) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
668 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
669 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
|
670 if (state->linebuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
671 return QF_NOMEM; |
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 else |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
674 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
675 state->linebuf = IObuff; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
676 state->linelen = len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
677 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
678 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
|
679 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
680 // Increment using len in order to discard the rest of the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
681 // line if it exceeds LINE_MAXLEN. |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
682 p_str += len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
683 state->p_str = p_str; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
684 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
685 return QF_OK; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
686 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
687 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
688 /* |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
689 * Get the next string from the List item state->p_li. |
9531
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 static int |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
692 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
|
693 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
694 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
|
695 int len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
696 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
697 while (p_li != NULL |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
698 && (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
|
699 || p_li->li_tv.vval.v_string == NULL)) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
700 p_li = p_li->li_next; // Skip non-string items |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
701 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
702 if (p_li == NULL) // End of the list |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
703 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
704 state->p_li = NULL; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
705 return QF_END_OF_INPUT; |
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 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
708 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
|
709 if (len > IOSIZE - 2) |
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->linebuf = qf_grow_linebuf(state, len); |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
712 if (state->linebuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
713 return QF_NOMEM; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
714 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
715 else |
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 state->linebuf = IObuff; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
718 state->linelen = len; |
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 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
|
722 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
723 state->p_li = p_li->li_next; // next item |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
724 return QF_OK; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
725 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
726 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
727 /* |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
728 * 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
|
729 */ |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
730 static int |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
731 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
|
732 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
733 char_u *p_buf = NULL; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
734 int len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
735 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
736 // Get the next line from the supplied buffer |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
737 if (state->buflnum > state->lnumlast) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
738 return QF_END_OF_INPUT; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
739 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
740 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
|
741 state->buflnum += 1; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
742 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
743 len = (int)STRLEN(p_buf); |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
744 if (len > IOSIZE - 2) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
745 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
746 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
|
747 if (state->linebuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
748 return QF_NOMEM; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
749 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
750 else |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
751 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
752 state->linebuf = IObuff; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
753 state->linelen = len; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
754 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
755 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
|
756 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
757 return QF_OK; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
758 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
759 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
760 /* |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
761 * 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
|
762 */ |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
763 static int |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
764 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
|
765 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
766 int discard; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
767 int growbuflen; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
768 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
769 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
|
770 return QF_END_OF_INPUT; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
771 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
772 discard = FALSE; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
773 state->linelen = (int)STRLEN(IObuff); |
9738
6818e3c96473
commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
774 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
|
775 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
776 // The current line exceeds IObuff, continue reading using |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
777 // growbuf until EOL or LINE_MAXLEN bytes is read. |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
778 if (state->growbuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
779 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
780 state->growbufsiz = 2 * (IOSIZE - 1); |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
781 state->growbuf = alloc_id(state->growbufsiz, aid_qf_linebuf); |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
782 if (state->growbuf == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
783 return QF_NOMEM; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
784 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
785 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
786 // Copy the read part of the line, excluding null-terminator |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
787 memcpy(state->growbuf, IObuff, IOSIZE - 1); |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
788 growbuflen = state->linelen; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
789 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
790 for (;;) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
791 { |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
792 char_u *p; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
793 |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
794 if (fgets((char *)state->growbuf + growbuflen, |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
795 state->growbufsiz - growbuflen, state->fd) == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
796 break; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
797 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
|
798 growbuflen += state->linelen; |
9738
6818e3c96473
commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
799 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
|
800 break; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
801 if (state->growbufsiz == LINE_MAXLEN) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
802 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
803 discard = TRUE; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
804 break; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
805 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
806 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
807 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
|
808 ? 2 * state->growbufsiz : LINE_MAXLEN; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
809 if ((p = vim_realloc(state->growbuf, state->growbufsiz)) == NULL) |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
810 return QF_NOMEM; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
811 state->growbuf = p; |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
812 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
813 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
814 while (discard) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
815 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
816 // The current line is longer than LINE_MAXLEN, continue |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
817 // reading but discard everything until EOL or EOF is |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
818 // reached. |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
819 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
|
820 || (int)STRLEN(IObuff) < IOSIZE - 1 |
22099
b7cc5d8ea702
patch 8.2.1599: missing line end when skipping a long line with :cgetfile
Bram Moolenaar <Bram@vim.org>
parents:
22015
diff
changeset
|
821 || IObuff[IOSIZE - 2] == '\n') |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
822 break; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
823 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
824 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
825 state->linebuf = state->growbuf; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
826 state->linelen = growbuflen; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
827 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
828 else |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
829 state->linebuf = IObuff; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
830 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
831 // 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
|
832 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
|
833 { |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
834 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
|
835 |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
836 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
|
837 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
|
838 { |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
839 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
|
840 { |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
841 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
|
842 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
|
843 } |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
844 else |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
845 { |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
846 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
|
847 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
|
848 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
|
849 ? 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
|
850 } |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
851 } |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
852 } |
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
853 |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
854 return QF_OK; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
855 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
856 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
857 /* |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
858 * 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
|
859 */ |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
860 static int |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
861 qf_get_nextline(qfstate_T *state) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
862 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
863 int status = QF_FAIL; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
864 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
865 if (state->fd == NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
866 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
867 if (state->tv != NULL) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
868 { |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
869 if (state->tv->v_type == VAR_STRING) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
870 // Get the next line from the supplied string |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
871 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
|
872 else if (state->tv->v_type == VAR_LIST) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
873 // Get the next line from the supplied list |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
874 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
|
875 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
876 else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
877 // Get the next line from the supplied buffer |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
878 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
|
879 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
880 else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
881 // Get the next line from the supplied file |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
882 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
|
883 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
884 if (status != QF_OK) |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
885 return status; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
886 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
887 // remove newline/CR from the line |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
888 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
|
889 { |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
890 state->linebuf[state->linelen - 1] = NUL; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
891 #ifdef USE_CRNL |
9738
6818e3c96473
commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
892 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
|
893 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
|
894 #endif |
9738
6818e3c96473
commit https://github.com/vim/vim/commit/796aa9c804f09276bd3cc45123f4a191a001dec2
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
895 } |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
896 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
897 remove_bom(state->linebuf); |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
898 |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
899 return QF_OK; |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
900 } |
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
901 |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
902 typedef struct { |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
903 char_u *namebuf; |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
904 char_u *module; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
905 char_u *errmsg; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
906 int errmsglen; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
907 long lnum; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
908 long end_lnum; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
909 int col; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
910 int end_col; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
911 char_u use_viscol; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
912 char_u *pattern; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
913 int enr; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
914 int type; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
915 int valid; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
916 } qffields_T; |
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 /* |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
919 * Parse the match for filename ('%f') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
920 * Return the matched value in "fields->namebuf". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
921 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
922 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
923 qf_parse_fmt_f(regmatch_T *rmp, int midx, qffields_T *fields, int prefix) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
924 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
925 int c; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
926 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
927 if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
928 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
929 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
930 // Expand ~/file and $HOME/file to full path. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
931 c = *rmp->endp[midx]; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
932 *rmp->endp[midx] = NUL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
933 expand_env(rmp->startp[midx], fields->namebuf, CMDBUFFSIZE); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
934 *rmp->endp[midx] = c; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
935 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
936 // For separate filename patterns (%O, %P and %Q), the specified file |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
937 // should exist. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
938 if (vim_strchr((char_u *)"OPQ", prefix) != NULL |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
939 && mch_getperm(fields->namebuf) == -1) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
940 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
941 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
942 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
943 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
944 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
945 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
946 * Parse the match for error number ('%n') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
947 * Return the matched value in "fields->enr". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
948 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
949 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
950 qf_parse_fmt_n(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
951 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
952 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
953 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
954 fields->enr = (int)atol((char *)rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
955 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
956 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
957 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
958 /* |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
959 * Parse the match for line number ('%l') pattern in regmatch. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
960 * Return the matched value in "fields->lnum". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
961 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
962 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
963 qf_parse_fmt_l(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
964 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
965 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
966 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
967 fields->lnum = atol((char *)rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
968 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
969 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
970 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
971 /* |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
972 * Parse the match for end line number ('%e') pattern in regmatch. |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
973 * Return the matched value in "fields->end_lnum". |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
974 */ |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
975 static int |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
976 qf_parse_fmt_e(regmatch_T *rmp, int midx, qffields_T *fields) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
977 { |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
978 if (rmp->startp[midx] == NULL) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
979 return QF_FAIL; |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
980 fields->end_lnum = atol((char *)rmp->startp[midx]); |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
981 return QF_OK; |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
982 } |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
983 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
984 /* |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
985 * Parse the match for column number ('%c') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
986 * Return the matched value in "fields->col". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
987 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
988 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
989 qf_parse_fmt_c(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
990 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
991 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
992 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
993 fields->col = (int)atol((char *)rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
994 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
995 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
996 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
997 /* |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
998 * Parse the match for end column number ('%k') pattern in regmatch. |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
999 * Return the matched value in "fields->end_col". |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1000 */ |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1001 static int |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1002 qf_parse_fmt_k(regmatch_T *rmp, int midx, qffields_T *fields) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1003 { |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1004 if (rmp->startp[midx] == NULL) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1005 return QF_FAIL; |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1006 fields->end_col = (int)atol((char *)rmp->startp[midx]); |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1007 return QF_OK; |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1008 } |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1009 |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1010 /* |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1011 * Parse the match for error type ('%t') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1012 * Return the matched value in "fields->type". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1013 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1014 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1015 qf_parse_fmt_t(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1016 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1017 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1018 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1019 fields->type = *rmp->startp[midx]; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1020 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1021 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1022 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1023 /* |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1024 * Copy a non-error line into the error string. Return the matched line in |
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1025 * "fields->errmsg". |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1026 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1027 static int |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1028 copy_nonerror_line(char_u *linebuf, int linelen, qffields_T *fields) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1029 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1030 char_u *p; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1031 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1032 if (linelen >= fields->errmsglen) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1033 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1034 // linelen + null terminator |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1035 if ((p = vim_realloc(fields->errmsg, linelen + 1)) == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1036 return QF_NOMEM; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1037 fields->errmsg = p; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1038 fields->errmsglen = linelen + 1; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1039 } |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1040 // copy whole line to error message |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1041 vim_strncpy(fields->errmsg, linebuf, linelen); |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1042 |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1043 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1044 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1045 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1046 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1047 * Parse the match for error message ('%m') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1048 * Return the matched value in "fields->errmsg". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1049 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1050 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1051 qf_parse_fmt_m(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1052 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1053 char_u *p; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1054 int len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1055 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1056 if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1057 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1058 len = (int)(rmp->endp[midx] - rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1059 if (len >= fields->errmsglen) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1060 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1061 // len + null terminator |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1062 if ((p = vim_realloc(fields->errmsg, len + 1)) == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1063 return QF_NOMEM; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1064 fields->errmsg = p; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1065 fields->errmsglen = len + 1; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1066 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1067 vim_strncpy(fields->errmsg, rmp->startp[midx], len); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1068 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1069 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1070 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1071 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1072 * Parse the match for rest of a single-line file message ('%r') pattern. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1073 * Return the matched value in "tail". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1074 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1075 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1076 qf_parse_fmt_r(regmatch_T *rmp, int midx, char_u **tail) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1077 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1078 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1079 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1080 *tail = rmp->startp[midx]; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1081 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1082 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1083 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1084 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1085 * Parse the match for the pointer line ('%p') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1086 * Return the matched value in "fields->col". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1087 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1088 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1089 qf_parse_fmt_p(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1090 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1091 char_u *match_ptr; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1092 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1093 if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1094 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1095 fields->col = 0; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1096 for (match_ptr = rmp->startp[midx]; match_ptr != rmp->endp[midx]; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1097 ++match_ptr) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1098 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1099 ++fields->col; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1100 if (*match_ptr == TAB) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1101 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1102 fields->col += 7; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1103 fields->col -= fields->col % 8; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1104 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1105 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1106 ++fields->col; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1107 fields->use_viscol = TRUE; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1108 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1109 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1110 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1111 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1112 * Parse the match for the virtual column number ('%v') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1113 * Return the matched value in "fields->col". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1114 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1115 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1116 qf_parse_fmt_v(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1117 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1118 if (rmp->startp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1119 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1120 fields->col = (int)atol((char *)rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1121 fields->use_viscol = TRUE; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1122 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1123 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1124 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1125 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1126 * Parse the match for the search text ('%s') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1127 * Return the matched value in "fields->pattern". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1128 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1129 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1130 qf_parse_fmt_s(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1131 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1132 int len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1133 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1134 if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1135 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1136 len = (int)(rmp->endp[midx] - rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1137 if (len > CMDBUFFSIZE - 5) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1138 len = CMDBUFFSIZE - 5; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1139 STRCPY(fields->pattern, "^\\V"); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1140 STRNCAT(fields->pattern, rmp->startp[midx], len); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1141 fields->pattern[len + 3] = '\\'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1142 fields->pattern[len + 4] = '$'; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1143 fields->pattern[len + 5] = NUL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1144 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1145 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1146 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1147 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1148 * Parse the match for the module ('%o') pattern in regmatch. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1149 * Return the matched value in "fields->module". |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1150 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1151 static int |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1152 qf_parse_fmt_o(regmatch_T *rmp, int midx, qffields_T *fields) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1153 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1154 int len; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1155 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1156 if (rmp->startp[midx] == NULL || rmp->endp[midx] == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1157 return QF_FAIL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1158 len = (int)(rmp->endp[midx] - rmp->startp[midx]); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1159 if (len > CMDBUFFSIZE) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1160 len = CMDBUFFSIZE; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1161 STRNCAT(fields->module, rmp->startp[midx], len); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1162 return QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1163 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1164 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1165 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1166 * 'errorformat' format pattern parser functions. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1167 * The '%f' and '%r' formats are parsed differently from other formats. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1168 * See qf_parse_match() for details. |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1169 * Keep in sync with fmt_pat[]. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1170 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1171 static int (*qf_parse_fmt[FMT_PATTERNS])(regmatch_T *, int, qffields_T *) = |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1172 { |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1173 NULL, // %f |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1174 qf_parse_fmt_n, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1175 qf_parse_fmt_l, |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1176 qf_parse_fmt_e, |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1177 qf_parse_fmt_c, |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1178 qf_parse_fmt_k, |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1179 qf_parse_fmt_t, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1180 qf_parse_fmt_m, |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1181 NULL, // %r |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1182 qf_parse_fmt_p, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1183 qf_parse_fmt_v, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1184 qf_parse_fmt_s, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1185 qf_parse_fmt_o |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1186 }; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1187 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1188 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1189 * Parse the error format pattern matches in "regmatch" and set the values in |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1190 * "fields". fmt_ptr contains the 'efm' format specifiers/prefixes that have a |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1191 * match. Returns QF_OK if all the matches are successfully parsed. On |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1192 * failure, returns QF_FAIL or QF_NOMEM. |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1193 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1194 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1195 qf_parse_match( |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1196 char_u *linebuf, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1197 int linelen, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1198 efm_T *fmt_ptr, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1199 regmatch_T *regmatch, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1200 qffields_T *fields, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1201 int qf_multiline, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1202 int qf_multiscan, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1203 char_u **tail) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1204 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1205 int idx = fmt_ptr->prefix; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1206 int i; |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1207 int midx; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1208 int status; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1209 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1210 if ((idx == 'C' || idx == 'Z') && !qf_multiline) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1211 return QF_FAIL; |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
1212 if (vim_strchr((char_u *)"EWIN", idx) != NULL) |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1213 fields->type = idx; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1214 else |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1215 fields->type = 0; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1216 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1217 // Extract error message data from matched line. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1218 // We check for an actual submatch, because "\[" and "\]" in |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1219 // the 'errorformat' may cause the wrong submatch to be used. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1220 for (i = 0; i < FMT_PATTERNS; i++) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1221 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1222 status = QF_OK; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1223 midx = (int)fmt_ptr->addr[i]; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1224 if (i == 0 && midx > 0) // %f |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1225 status = qf_parse_fmt_f(regmatch, midx, fields, idx); |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1226 else if (i == FMT_PATTERN_M) |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1227 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1228 if (fmt_ptr->flags == '+' && !qf_multiscan) // %+ |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1229 status = copy_nonerror_line(linebuf, linelen, fields); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1230 else if (midx > 0) // %m |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1231 status = qf_parse_fmt_m(regmatch, midx, fields); |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1232 } |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1233 else if (i == FMT_PATTERN_R && midx > 0) // %r |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1234 status = qf_parse_fmt_r(regmatch, midx, tail); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1235 else if (midx > 0) // others |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1236 status = (qf_parse_fmt[i])(regmatch, midx, fields); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1237 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1238 if (status != QF_OK) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1239 return status; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1240 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1241 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1242 return QF_OK; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1243 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1244 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1245 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1246 * Parse an error line in 'linebuf' using a single error format string in |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1247 * 'fmt_ptr->prog' and return the matching values in 'fields'. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1248 * Returns QF_OK if the efm format matches completely and the fields are |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1249 * successfully copied. Otherwise returns QF_FAIL or QF_NOMEM. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1250 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1251 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1252 qf_parse_get_fields( |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1253 char_u *linebuf, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1254 int linelen, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1255 efm_T *fmt_ptr, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1256 qffields_T *fields, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1257 int qf_multiline, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1258 int qf_multiscan, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1259 char_u **tail) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1260 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1261 regmatch_T regmatch; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1262 int status = QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1263 int r; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1264 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1265 if (qf_multiscan && |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1266 vim_strchr((char_u *)"OPQ", fmt_ptr->prefix) == NULL) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1267 return QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1268 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1269 fields->namebuf[0] = NUL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1270 fields->module[0] = NUL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1271 fields->pattern[0] = NUL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1272 if (!qf_multiscan) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1273 fields->errmsg[0] = NUL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1274 fields->lnum = 0; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
1275 fields->end_lnum = 0; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1276 fields->col = 0; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
1277 fields->end_col = 0; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1278 fields->use_viscol = FALSE; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1279 fields->enr = -1; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1280 fields->type = 0; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1281 *tail = NULL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1282 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1283 // Always ignore case when looking for a matching error. |
13921
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1284 regmatch.rm_ic = TRUE; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1285 regmatch.regprog = fmt_ptr->prog; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1286 r = vim_regexec(®match, linebuf, (colnr_T)0); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1287 fmt_ptr->prog = regmatch.regprog; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1288 if (r) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1289 status = qf_parse_match(linebuf, linelen, fmt_ptr, ®match, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1290 fields, qf_multiline, qf_multiscan, tail); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1291 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1292 return status; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1293 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1294 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1295 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1296 * Parse directory error format prefixes (%D and %X). |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1297 * Push and pop directories from the directory stack when scanning directory |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1298 * names. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1299 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1300 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1301 qf_parse_dir_pfx(int idx, qffields_T *fields, qf_list_T *qfl) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1302 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1303 if (idx == 'D') // enter directory |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1304 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1305 if (*fields->namebuf == NUL) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1306 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
1307 emsg(_(e_missing_or_empty_directory_name)); |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1308 return QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1309 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1310 qfl->qf_directory = |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1311 qf_push_dir(fields->namebuf, &qfl->qf_dir_stack, FALSE); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1312 if (qfl->qf_directory == NULL) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1313 return QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1314 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1315 else if (idx == 'X') // leave directory |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1316 qfl->qf_directory = qf_pop_dir(&qfl->qf_dir_stack); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1317 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1318 return QF_OK; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1319 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1320 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1321 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1322 * Parse global file name error format prefixes (%O, %P and %Q). |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1323 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1324 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1325 qf_parse_file_pfx( |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1326 int idx, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1327 qffields_T *fields, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1328 qf_list_T *qfl, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1329 char_u *tail) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1330 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1331 fields->valid = FALSE; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1332 if (*fields->namebuf == NUL || mch_getperm(fields->namebuf) >= 0) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1333 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1334 if (*fields->namebuf && idx == 'P') |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1335 qfl->qf_currfile = |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1336 qf_push_dir(fields->namebuf, &qfl->qf_file_stack, TRUE); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1337 else if (idx == 'Q') |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1338 qfl->qf_currfile = qf_pop_dir(&qfl->qf_file_stack); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1339 *fields->namebuf = NUL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1340 if (tail && *tail) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1341 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1342 STRMOVE(IObuff, skipwhite(tail)); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1343 qfl->qf_multiscan = TRUE; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1344 return QF_MULTISCAN; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1345 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1346 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1347 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1348 return QF_OK; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1349 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1350 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1351 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1352 * Parse a non-error line (a line which doesn't match any of the error |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1353 * format in 'efm'). |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1354 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1355 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1356 qf_parse_line_nomatch(char_u *linebuf, int linelen, qffields_T *fields) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1357 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1358 fields->namebuf[0] = NUL; // no match found, remove file name |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1359 fields->lnum = 0; // don't jump to this line |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1360 fields->valid = FALSE; |
19405
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1361 |
08f4dc2ba716
patch 8.2.0260: several lines of code are duplicated
Bram Moolenaar <Bram@vim.org>
parents:
19366
diff
changeset
|
1362 return copy_nonerror_line(linebuf, linelen, fields); |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1363 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1364 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1365 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1366 * Parse multi-line error format prefixes (%C and %Z) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1367 */ |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1368 static int |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1369 qf_parse_multiline_pfx( |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1370 int idx, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1371 qf_list_T *qfl, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1372 qffields_T *fields) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1373 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1374 char_u *ptr; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1375 int len; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1376 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1377 if (!qfl->qf_multiignore) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1378 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1379 qfline_T *qfprev = qfl->qf_last; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1380 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1381 if (qfprev == NULL) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1382 return QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1383 if (*fields->errmsg && !qfl->qf_multiignore) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1384 { |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1385 len = (int)STRLEN(qfprev->qf_text); |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
1386 ptr = alloc_id(len + STRLEN(fields->errmsg) + 2, |
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
1387 aid_qf_multiline_pfx); |
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
1388 if (ptr == NULL) |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1389 return QF_FAIL; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1390 STRCPY(ptr, qfprev->qf_text); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1391 vim_free(qfprev->qf_text); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1392 qfprev->qf_text = ptr; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1393 *(ptr += len) = '\n'; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1394 STRCPY(++ptr, fields->errmsg); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1395 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1396 if (qfprev->qf_nr == -1) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1397 qfprev->qf_nr = fields->enr; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1398 if (vim_isprintc(fields->type) && !qfprev->qf_type) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1399 // only printable chars allowed |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1400 qfprev->qf_type = fields->type; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1401 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1402 if (!qfprev->qf_lnum) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1403 qfprev->qf_lnum = fields->lnum; |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1404 if (!qfprev->qf_end_lnum) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1405 qfprev->qf_end_lnum = fields->end_lnum; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1406 if (!qfprev->qf_col) |
22645
13904ca59f96
patch 8.2.1871: using %v in 'errorformat' may fail before %Z
Bram Moolenaar <Bram@vim.org>
parents:
22454
diff
changeset
|
1407 { |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1408 qfprev->qf_col = fields->col; |
22645
13904ca59f96
patch 8.2.1871: using %v in 'errorformat' may fail before %Z
Bram Moolenaar <Bram@vim.org>
parents:
22454
diff
changeset
|
1409 qfprev->qf_viscol = fields->use_viscol; |
13904ca59f96
patch 8.2.1871: using %v in 'errorformat' may fail before %Z
Bram Moolenaar <Bram@vim.org>
parents:
22454
diff
changeset
|
1410 } |
27605
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1411 if (!qfprev->qf_end_col) |
bf540a32439a
patch 8.2.4329: no support for end line number and column in 'errorformat'
Bram Moolenaar <Bram@vim.org>
parents:
26966
diff
changeset
|
1412 qfprev->qf_end_col = fields->end_col; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1413 if (!qfprev->qf_fnum) |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1414 qfprev->qf_fnum = qf_get_fnum(qfl, |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1415 qfl->qf_directory, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1416 *fields->namebuf || qfl->qf_directory != NULL |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1417 ? fields->namebuf |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1418 : qfl->qf_currfile != NULL && fields->valid |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1419 ? qfl->qf_currfile : 0); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1420 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1421 if (idx == 'Z') |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1422 qfl->qf_multiline = qfl->qf_multiignore = FALSE; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1423 line_breakcheck(); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1424 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1425 return QF_IGNORE_LINE; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1426 } |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1427 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1428 /* |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1429 * 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
|
1430 * Return the QF_ status. |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1431 */ |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1432 static int |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1433 qf_parse_line( |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1434 qf_list_T *qfl, |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1435 char_u *linebuf, |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1436 int linelen, |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1437 efm_T *fmt_first, |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1438 qffields_T *fields) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1439 { |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1440 efm_T *fmt_ptr; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1441 int idx = 0; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1442 char_u *tail = NULL; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1443 int status; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1444 |
13612
89223f5d5d12
patch 8.0.1678: errorformat "%r" implies "%>"
Christian Brabandt <cb@256bit.org>
parents:
13594
diff
changeset
|
1445 restofline: |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1446 // If there was no %> item start at the first pattern |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1447 if (fmt_start == NULL) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1448 fmt_ptr = fmt_first; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1449 else |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1450 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1451 // Otherwise start from the last used pattern |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1452 fmt_ptr = fmt_start; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1453 fmt_start = NULL; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1454 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1455 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1456 // Try to match each part of 'errorformat' until we find a complete |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1457 // match or no match. |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1458 fields->valid = TRUE; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1459 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
|
1460 { |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1461 idx = fmt_ptr->prefix; |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1462 status = qf_parse_get_fields(linebuf, linelen, fmt_ptr, fields, |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1463 qfl->qf_multiline, qfl->qf_multiscan, &tail); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1464 if (status == QF_NOMEM) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1465 return status; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1466 if (status == QF_OK) |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1467 break; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1468 } |
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
|
1469 qfl->qf_multiscan = FALSE; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1470 |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1471 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
|
1472 { |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1473 if (fmt_ptr != NULL) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1474 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1475 // 'D' and 'X' directory specifiers |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1476 status = qf_parse_dir_pfx(idx, fields, qfl); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1477 if (status != QF_OK) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1478 return status; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1479 } |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1480 |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1481 status = qf_parse_line_nomatch(linebuf, linelen, fields); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1482 if (status != QF_OK) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1483 return status; |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1484 |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1485 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
|
1486 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
|
1487 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1488 else if (fmt_ptr != NULL) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1489 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1490 // honor %> item |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1491 if (fmt_ptr->conthere) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1492 fmt_start = fmt_ptr; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1493 |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
1494 if (vim_strchr((char_u *)"AEWIN", idx) != NULL) |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1495 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1496 qfl->qf_multiline = TRUE; // start of a multi-line message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1497 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
|
1498 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1499 else if (vim_strchr((char_u *)"CZ", idx) != NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1500 { // continuation of multi-line msg |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1501 status = qf_parse_multiline_pfx(idx, qfl, fields); |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1502 if (status != QF_OK) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1503 return status; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1504 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1505 else if (vim_strchr((char_u *)"OPQ", idx) != NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1506 { // global file names |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1507 status = qf_parse_file_pfx(idx, fields, qfl, tail); |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1508 if (status == QF_MULTISCAN) |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1509 goto restofline; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1510 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1511 if (fmt_ptr->flags == '-') // generally exclude this line |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1512 { |
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
|
1513 if (qfl->qf_multiline) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1514 // 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
|
1515 qfl->qf_multiignore = TRUE; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1516 return QF_IGNORE_LINE; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1517 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1518 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1519 |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1520 return QF_OK; |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1521 } |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1522 |
9033
0536d1469b67
commit https://github.com/vim/vim/commit/6be8c8e165204b8aa4eeb8a52be87a58d8b41b9e
Christian Brabandt <cb@256bit.org>
parents:
8932
diff
changeset
|
1523 /* |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1524 * Returns TRUE if the specified quickfix/location stack is empty |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1525 */ |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1526 static int |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1527 qf_stack_empty(qf_info_T *qi) |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1528 { |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1529 return qi == NULL || qi->qf_listcount <= 0; |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1530 } |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1531 |
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
1532 /* |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1533 * Returns TRUE if the specified quickfix/location list is empty. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1534 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1535 static int |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1536 qf_list_empty(qf_list_T *qfl) |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1537 { |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1538 return qfl == NULL || qfl->qf_count <= 0; |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1539 } |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1540 |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1541 /* |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1542 * Returns TRUE if the specified quickfix/location list is not empty and |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1543 * has valid entries. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1544 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1545 static int |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1546 qf_list_has_valid_entries(qf_list_T *qfl) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1547 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1548 return !qf_list_empty(qfl) && !qfl->qf_nonevalid; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1549 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1550 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
1551 /* |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1552 * Return a pointer to a list in the specified quickfix stack |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1553 */ |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1554 static qf_list_T * |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1555 qf_get_list(qf_info_T *qi, int idx) |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1556 { |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1557 return &qi->qf_lists[idx]; |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1558 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1559 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
1560 /* |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1561 * Allocate the fields used for parsing lines and populating a quickfix list. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1562 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1563 static int |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1564 qf_alloc_fields(qffields_T *pfields) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1565 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1566 pfields->namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1567 pfields->module = alloc_id(CMDBUFFSIZE + 1, aid_qf_module); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1568 pfields->errmsglen = CMDBUFFSIZE + 1; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1569 pfields->errmsg = alloc_id(pfields->errmsglen, aid_qf_errmsg); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1570 pfields->pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1571 if (pfields->namebuf == NULL || pfields->errmsg == NULL |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1572 || pfields->pattern == NULL || pfields->module == NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1573 return FAIL; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1574 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1575 return OK; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1576 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1577 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1578 /* |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1579 * Free the fields used for parsing lines and populating a quickfix list. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1580 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1581 static void |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1582 qf_free_fields(qffields_T *pfields) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1583 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1584 vim_free(pfields->namebuf); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1585 vim_free(pfields->module); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1586 vim_free(pfields->errmsg); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1587 vim_free(pfields->pattern); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1588 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1589 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1590 /* |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1591 * Setup the state information used for parsing lines and populating a |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1592 * quickfix list. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1593 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1594 static int |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1595 qf_setup_state( |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1596 qfstate_T *pstate, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1597 char_u *enc, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1598 char_u *efile, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1599 typval_T *tv, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1600 buf_T *buf, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1601 linenr_T lnumfirst, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1602 linenr_T lnumlast) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1603 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1604 pstate->vc.vc_type = CONV_NONE; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1605 if (enc != NULL && *enc != NUL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1606 convert_setup(&pstate->vc, enc, p_enc); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1607 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1608 if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1609 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
1610 semsg(_(e_cant_open_errorfile_str), efile); |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1611 return FAIL; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1612 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1613 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1614 if (tv != NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1615 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1616 if (tv->v_type == VAR_STRING) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1617 pstate->p_str = tv->vval.v_string; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1618 else if (tv->v_type == VAR_LIST) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1619 pstate->p_li = tv->vval.v_list->lv_first; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1620 pstate->tv = tv; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1621 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1622 pstate->buf = buf; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1623 pstate->buflnum = lnumfirst; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1624 pstate->lnumlast = lnumlast; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1625 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1626 return OK; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1627 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1628 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1629 /* |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1630 * Cleanup the state information used for parsing lines and populating a |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1631 * quickfix list. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1632 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1633 static void |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1634 qf_cleanup_state(qfstate_T *pstate) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1635 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1636 if (pstate->fd != NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1637 fclose(pstate->fd); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1638 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1639 vim_free(pstate->growbuf); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1640 if (pstate->vc.vc_type != CONV_NONE) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1641 convert_setup(&pstate->vc, NULL, NULL); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1642 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1643 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1644 /* |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1645 * Process the next line from a file/buffer/list/string and add it |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1646 * to the quickfix list 'qfl'. |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1647 */ |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1648 static int |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1649 qf_init_process_nextline( |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1650 qf_list_T *qfl, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1651 efm_T *fmt_first, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1652 qfstate_T *state, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1653 qffields_T *fields) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1654 { |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1655 int status; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1656 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1657 // Get the next line from a file/buffer/list/string |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1658 status = qf_get_nextline(state); |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1659 if (status != QF_OK) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1660 return status; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1661 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1662 status = qf_parse_line(qfl, state->linebuf, state->linelen, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1663 fmt_first, fields); |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1664 if (status != QF_OK) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1665 return status; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1666 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1667 return qf_add_entry(qfl, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1668 qfl->qf_directory, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1669 (*fields->namebuf || qfl->qf_directory != NULL) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1670 ? fields->namebuf |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1671 : ((qfl->qf_currfile != NULL && fields->valid) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1672 ? qfl->qf_currfile : (char_u *)NULL), |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1673 fields->module, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1674 0, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1675 fields->errmsg, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1676 fields->lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
1677 fields->end_lnum, |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1678 fields->col, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
1679 fields->end_col, |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1680 fields->use_viscol, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1681 fields->pattern, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1682 fields->enr, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1683 fields->type, |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1684 fields->valid); |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1685 } |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1686 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1687 /* |
41 | 1688 * Read the errorfile "efile" into memory, line by line, building the error |
1689 * list. | |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
1690 * 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
|
1691 * Alternative: when "tv" is not NULL get errors from the string or list. |
41 | 1692 * 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
|
1693 * 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
|
1694 * Set the title of the list to "qf_title". |
41 | 1695 * Return -1 for error, number of errors for success. |
1696 */ | |
1697 static int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1698 qf_init_ext( |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1699 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
|
1700 int qf_idx, |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1701 char_u *efile, |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1702 buf_T *buf, |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1703 typval_T *tv, |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1704 char_u *errorformat, |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1705 int newlist, // TRUE: start a new error list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1706 linenr_T lnumfirst, // first line number to use |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1707 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
|
1708 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
|
1709 char_u *enc) |
41 | 1710 { |
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
|
1711 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
|
1712 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
|
1713 qffields_T fields; |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
1714 qfline_T *old_last = NULL; |
10369
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1715 int adding = FALSE; |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1716 static efm_T *fmt_first = NULL; |
7 | 1717 char_u *efm; |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1718 static char_u *last_efm = NULL; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1719 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
|
1720 int status; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1721 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1722 // Do not used the cached buffer, it may have been wiped out. |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13115
diff
changeset
|
1723 VIM_CLEAR(qf_last_bufname); |
11443
30b3775addb2
patch 8.0.0605: the quickfix cached buffer may become invalid
Christian Brabandt <cb@256bit.org>
parents:
11426
diff
changeset
|
1724 |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
1725 CLEAR_FIELD(state); |
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
1726 CLEAR_FIELD(fields); |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1727 if ((qf_alloc_fields(&fields) == FAIL) || |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1728 (qf_setup_state(&state, enc, efile, tv, buf, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1729 lnumfirst, lnumlast) == FAIL)) |
7 | 1730 goto qf_init_end; |
1731 | |
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
|
1732 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
|
1733 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1734 // make place for a new list |
3965 | 1735 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
|
1736 qf_idx = qi->qf_curlist; |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
1737 qfl = qf_get_list(qi, qf_idx); |
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
|
1738 } |
11609
6f11697fb92c
patch 8.0.0687: minor issues related to quickfix
Christian Brabandt <cb@256bit.org>
parents:
11589
diff
changeset
|
1739 else |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
1740 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1741 // 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
|
1742 adding = TRUE; |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
1743 qfl = qf_get_list(qi, qf_idx); |
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
1744 if (!qf_list_empty(qfl)) |
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
1745 old_last = qfl->qf_last; |
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
1746 } |
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
|
1747 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1748 // Use the local value of 'errorformat' if it's set. |
446 | 1749 if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL) |
41 | 1750 efm = buf->b_p_efm; |
7 | 1751 else |
1752 efm = errorformat; | |
9365
3830a92c12bf
commit https://github.com/vim/vim/commit/688e3d1fd9b9129a5ba0e0d599ccfe6f4443daf3
Christian Brabandt <cb@256bit.org>
parents:
9334
diff
changeset
|
1753 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1754 // If the errorformat didn't change between calls, then reuse the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1755 // previously parsed values. |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1756 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
|
1757 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1758 // free the previously parsed data |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13115
diff
changeset
|
1759 VIM_CLEAR(last_efm); |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1760 free_efm_list(&fmt_first); |
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1761 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1762 // parse the current 'efm' |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1763 fmt_first = parse_efm_option(efm); |
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1764 if (fmt_first != NULL) |
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1765 last_efm = vim_strsave(efm); |
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1766 } |
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
1767 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1768 if (fmt_first == NULL) // nothing found |
7 | 1769 goto error2; |
1770 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1771 // got_int is reset here, because it was probably set when killing the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1772 // ":make" command, but we still want to read the errorfile then. |
7 | 1773 got_int = FALSE; |
1774 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1775 // Read the lines in the error file one by one. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1776 // Try to recognize one of the error formats in each line. |
41 | 1777 while (!got_int) |
7 | 1778 { |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1779 status = qf_init_process_nextline(qfl, fmt_first, &state, &fields); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1780 if (status == QF_NOMEM) // memory alloc failure |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
1781 goto qf_init_end; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1782 if (status == QF_END_OF_INPUT) // end of input |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
1783 break; |
9568
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1784 if (status == QF_FAIL) |
ccbd2e604e59
commit https://github.com/vim/vim/commit/e87e6dddc2b2a99572ec0db0833c052214c4fbd3
Christian Brabandt <cb@256bit.org>
parents:
9540
diff
changeset
|
1785 goto error2; |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
1786 |
7 | 1787 line_breakcheck(); |
1788 } | |
9531
50697f3b49d6
commit https://github.com/vim/vim/commit/e0d3797664c59afc9705808f86a7cf00fd6d874d
Christian Brabandt <cb@256bit.org>
parents:
9487
diff
changeset
|
1789 if (state.fd == NULL || !ferror(state.fd)) |
7 | 1790 { |
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
|
1791 if (qfl->qf_index == 0) |
7 | 1792 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1793 // 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
|
1794 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
|
1795 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
|
1796 qfl->qf_nonevalid = TRUE; |
7 | 1797 } |
1798 else | |
1799 { | |
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
|
1800 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
|
1801 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
|
1802 qfl->qf_ptr = qfl->qf_start; |
7 | 1803 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1804 // 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
|
1805 retval = qfl->qf_count; |
9369
ce5b79b005ec
commit https://github.com/vim/vim/commit/bcf7772a23624edc0942120e564f6b4ac95604ad
Christian Brabandt <cb@256bit.org>
parents:
9365
diff
changeset
|
1806 goto qf_init_end; |
7 | 1807 } |
25320
1e6da8364a02
patch 8.2.3197: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25306
diff
changeset
|
1808 emsg(_(e_error_while_reading_errorfile)); |
7 | 1809 error2: |
10369
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1810 if (!adding) |
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1811 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1812 // Error when creating a new list. Free the new list |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
1813 qf_free(qfl); |
10369
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1814 qi->qf_listcount--; |
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1815 if (qi->qf_curlist > 0) |
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1816 --qi->qf_curlist; |
4e5b307638cb
commit https://github.com/vim/vim/commit/2b946c9f9b0e0fd805fb8f3e4c16e0a68ae13129
Christian Brabandt <cb@256bit.org>
parents:
10367
diff
changeset
|
1817 } |
9369
ce5b79b005ec
commit https://github.com/vim/vim/commit/bcf7772a23624edc0942120e564f6b4ac95604ad
Christian Brabandt <cb@256bit.org>
parents:
9365
diff
changeset
|
1818 qf_init_end: |
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
|
1819 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
|
1820 qf_update_buffer(qi, old_last); |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1821 qf_cleanup_state(&state); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1822 qf_free_fields(&fields); |
7 | 1823 |
1824 return retval; | |
1825 } | |
1826 | |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1827 /* |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1828 * Read the errorfile "efile" into memory, line by line, building the error |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1829 * list. Set the error list's title to qf_title. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1830 * Return -1 for error, number of errors for success. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1831 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1832 int |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1833 qf_init(win_T *wp, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1834 char_u *efile, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1835 char_u *errorformat, |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1836 int newlist, // TRUE: start a new error list |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1837 char_u *qf_title, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1838 char_u *enc) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1839 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1840 qf_info_T *qi = &ql_info; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1841 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1842 if (wp != NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1843 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1844 qi = ll_get_or_alloc_list(wp); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1845 if (qi == NULL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1846 return FAIL; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1847 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1848 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1849 return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1850 newlist, (linenr_T)0, (linenr_T)0, qf_title, enc); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1851 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1852 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
1853 /* |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1854 * Set the title of the specified quickfix list. Frees the previous title. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1855 * Prepends ':' to the title. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
1856 */ |
6079 | 1857 static void |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1858 qf_store_title(qf_list_T *qfl, char_u *title) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1859 { |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1860 VIM_CLEAR(qfl->qf_title); |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
1861 |
6079 | 1862 if (title != NULL) |
1863 { | |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
1864 char_u *p = alloc_id(STRLEN(title) + 2, aid_qf_title); |
6079 | 1865 |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1866 qfl->qf_title = p; |
6079 | 1867 if (p != NULL) |
13921
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1868 STRCPY(p, title); |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1869 } |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1870 } |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1871 |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1872 /* |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1873 * The title of a quickfix/location list is set, by default, to the command |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1874 * that created the quickfix list with the ":" prefix. |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1875 * Create a quickfix list title string by prepending ":" to a user command. |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1876 * Returns a pointer to a static buffer with the title. |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1877 */ |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1878 static char_u * |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1879 qf_cmdtitle(char_u *cmd) |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1880 { |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1881 static char_u qftitle_str[IOSIZE]; |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1882 |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1883 vim_snprintf((char *)qftitle_str, IOSIZE, ":%s", (char *)cmd); |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
1884 return qftitle_str; |
6079 | 1885 } |
1886 | |
7 | 1887 /* |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1888 * Return a pointer to the current list in the specified quickfix stack |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1889 */ |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1890 static qf_list_T * |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1891 qf_get_curlist(qf_info_T *qi) |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1892 { |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
1893 return qf_get_list(qi, qi->qf_curlist); |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1894 } |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1895 |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1896 /* |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
1897 * Prepare for adding a new quickfix list. If the current list is in the |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
1898 * middle of the stack, then all the following lists are freed and then |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
1899 * the new list is added. |
7 | 1900 */ |
1901 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1902 qf_new_list(qf_info_T *qi, char_u *qf_title) |
7 | 1903 { |
1904 int i; | |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
1905 qf_list_T *qfl; |
7 | 1906 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1907 // If the current entry is not the last entry, delete entries beyond |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1908 // the current entry. This makes it possible to browse in a tree-like |
18498
9e6d5a4abb1c
patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents:
18452
diff
changeset
|
1909 // way with ":grep". |
644 | 1910 while (qi->qf_listcount > qi->qf_curlist + 1) |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1911 qf_free(&qi->qf_lists[--qi->qf_listcount]); |
7 | 1912 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1913 // When the stack is full, remove to oldest entry |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1914 // Otherwise, add a new entry. |
644 | 1915 if (qi->qf_listcount == LISTCOUNT) |
7 | 1916 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1917 qf_free(&qi->qf_lists[0]); |
7 | 1918 for (i = 1; i < LISTCOUNT; ++i) |
644 | 1919 qi->qf_lists[i - 1] = qi->qf_lists[i]; |
1920 qi->qf_curlist = LISTCOUNT - 1; | |
7 | 1921 } |
1922 else | |
644 | 1923 qi->qf_curlist = qi->qf_listcount++; |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
1924 qfl = qf_get_curlist(qi); |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
1925 CLEAR_POINTER(qfl); |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
1926 qf_store_title(qfl, qf_title); |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
1927 qfl->qfl_type = qi->qfl_type; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
1928 qfl->qf_id = ++last_qf_id; |
7 | 1929 } |
1930 | |
644 | 1931 /* |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1932 * Queue location list stack delete request. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1933 */ |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1934 static void |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1935 locstack_queue_delreq(qf_info_T *qi) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1936 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1937 qf_delq_T *q; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1938 |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16782
diff
changeset
|
1939 q = ALLOC_ONE(qf_delq_T); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1940 if (q != NULL) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1941 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1942 q->qi = qi; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1943 q->next = qf_delq_head; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1944 qf_delq_head = q; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1945 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1946 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1947 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
1948 /* |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1949 * Return the global quickfix stack window buffer number. |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1950 */ |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1951 int |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1952 qf_stack_get_bufnr(void) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1953 { |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1954 return ql_info.qf_bufnr; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1955 } |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1956 |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1957 /* |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1958 * Wipe the quickfix window buffer (if present) for the specified |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1959 * quickfix/location list. |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1960 */ |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1961 static void |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1962 wipe_qf_buffer(qf_info_T *qi) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1963 { |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1964 buf_T *qfbuf; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1965 |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1966 if (qi->qf_bufnr != INVALID_QFBUFNR) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1967 { |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1968 qfbuf = buflist_findnr(qi->qf_bufnr); |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1969 if (qfbuf != NULL && qfbuf->b_nwindows == 0) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1970 { |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1971 // If the quickfix buffer is not loaded in any window, then |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1972 // wipe the buffer. |
18886
050f5eaa9e50
patch 8.2.0004: get E685 and E931 if buffer reload is interrupted
Bram Moolenaar <Bram@vim.org>
parents:
18827
diff
changeset
|
1973 close_buffer(NULL, qfbuf, DOBUF_WIPE, FALSE, FALSE); |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1974 qi->qf_bufnr = INVALID_QFBUFNR; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1975 } |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1976 } |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1977 } |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1978 |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
1979 /* |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
1980 * Free a location list stack |
644 | 1981 */ |
1982 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1983 ll_free_all(qf_info_T **pqi) |
359 | 1984 { |
1985 int i; | |
644 | 1986 qf_info_T *qi; |
1987 | |
1988 qi = *pqi; | |
1989 if (qi == NULL) | |
1990 return; | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
1991 *pqi = NULL; // Remove reference to this list |
644 | 1992 |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1993 // If the location list is still in use, then queue the delete request |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1994 // to be processed later. |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1995 if (quickfix_busy > 0) |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1996 { |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1997 locstack_queue_delreq(qi); |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1998 return; |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
1999 } |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2000 |
644 | 2001 qi->qf_refcount--; |
2002 if (qi->qf_refcount < 1) | |
2003 { | |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2004 // No references to this location list. |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2005 // If the quickfix window buffer is loaded, then wipe it |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2006 wipe_qf_buffer(qi); |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2007 |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2008 for (i = 0; i < qi->qf_listcount; ++i) |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2009 qf_free(qf_get_list(qi, i)); |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
2010 vim_free(qi); |
644 | 2011 } |
359 | 2012 } |
644 | 2013 |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
2014 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
2015 * Free all the quickfix/location lists in the stack. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
2016 */ |
644 | 2017 void |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
2018 qf_free_all(win_T *wp) |
644 | 2019 { |
2020 int i; | |
2021 qf_info_T *qi = &ql_info; | |
2022 | |
2023 if (wp != NULL) | |
2024 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2025 // location list |
644 | 2026 ll_free_all(&wp->w_llist); |
2027 ll_free_all(&wp->w_llist_ref); | |
2028 } | |
2029 else | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2030 // quickfix list |
644 | 2031 for (i = 0; i < qi->qf_listcount; ++i) |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2032 qf_free(qf_get_list(qi, i)); |
644 | 2033 } |
359 | 2034 |
7 | 2035 /* |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2036 * Delay freeing of location list stacks when the quickfix code is running. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2037 * Used to avoid problems with autocmds freeing location list stacks when the |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2038 * quickfix code is still referencing the stack. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2039 * Must always call decr_quickfix_busy() exactly once after this. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2040 */ |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2041 static void |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2042 incr_quickfix_busy(void) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2043 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2044 quickfix_busy++; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2045 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2046 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2047 /* |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2048 * Safe to free location list stacks. Process any delayed delete requests. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2049 */ |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2050 static void |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2051 decr_quickfix_busy(void) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2052 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2053 if (--quickfix_busy == 0) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2054 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2055 // No longer referencing the location lists. Process all the pending |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2056 // delete requests. |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2057 while (qf_delq_head != NULL) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2058 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2059 qf_delq_T *q = qf_delq_head; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2060 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2061 qf_delq_head = q->next; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2062 ll_free_all(&q->qi); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2063 vim_free(q); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2064 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2065 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2066 #ifdef ABORT_ON_INTERNAL_ERROR |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2067 if (quickfix_busy < 0) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2068 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
2069 emsg("quickfix_busy has become negative"); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2070 abort(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2071 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2072 #endif |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2073 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2074 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2075 #if defined(EXITFREE) || defined(PROTO) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2076 void |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2077 check_quickfix_busy(void) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2078 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2079 if (quickfix_busy != 0) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2080 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
2081 semsg("quickfix_busy not zero on exit: %ld", (long)quickfix_busy); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2082 # ifdef ABORT_ON_INTERNAL_ERROR |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2083 abort(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2084 # endif |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2085 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2086 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2087 #endif |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2088 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2089 /* |
7 | 2090 * Add an entry to the end of the list of errors. |
27873
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
2091 * Returns QF_OK on success or QF_FAIL on a memory allocation failure. |
7 | 2092 */ |
2093 static int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
2094 qf_add_entry( |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2095 qf_list_T *qfl, // quickfix list entry |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2096 char_u *dir, // optional directory name |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2097 char_u *fname, // file name or NULL |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2098 char_u *module, // module name or NULL |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2099 int bufnum, // buffer number or zero |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2100 char_u *mesg, // message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2101 long lnum, // line number |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2102 long end_lnum, // line number for end |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2103 int col, // column |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2104 int end_col, // column for end |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2105 int vis_col, // using visual column |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2106 char_u *pattern, // search pattern |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2107 int nr, // error number |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2108 int type, // type character |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2109 int valid) // valid entry |
7 | 2110 { |
230 | 2111 qfline_T *qfp; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2112 qfline_T **lastp; // pointer to qf_last or NULL |
7 | 2113 |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
2114 if ((qfp = ALLOC_ONE_ID(qfline_T, aid_qf_qfline)) == NULL) |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2115 return QF_FAIL; |
1065 | 2116 if (bufnum != 0) |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2117 { |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2118 buf_T *buf = buflist_findnr(bufnum); |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2119 |
1065 | 2120 qfp->qf_fnum = bufnum; |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2121 if (buf != NULL) |
9608
fa64afb99dda
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents:
9579
diff
changeset
|
2122 buf->b_has_qf_entry |= |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2123 IS_QF_LIST(qfl) ? 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
|
2124 } |
1065 | 2125 else |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2126 qfp->qf_fnum = qf_get_fnum(qfl, dir, fname); |
7 | 2127 if ((qfp->qf_text = vim_strsave(mesg)) == NULL) |
2128 { | |
2129 vim_free(qfp); | |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2130 return QF_FAIL; |
7 | 2131 } |
2132 qfp->qf_lnum = lnum; | |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2133 qfp->qf_end_lnum = end_lnum; |
7 | 2134 qfp->qf_col = col; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2135 qfp->qf_end_col = end_col; |
170 | 2136 qfp->qf_viscol = vis_col; |
230 | 2137 if (pattern == NULL || *pattern == NUL) |
2138 qfp->qf_pattern = NULL; | |
2139 else if ((qfp->qf_pattern = vim_strsave(pattern)) == NULL) | |
2140 { | |
2141 vim_free(qfp->qf_text); | |
2142 vim_free(qfp); | |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2143 return QF_FAIL; |
230 | 2144 } |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2145 if (module == NULL || *module == NUL) |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2146 qfp->qf_module = NULL; |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2147 else if ((qfp->qf_module = vim_strsave(module)) == NULL) |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2148 { |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2149 vim_free(qfp->qf_text); |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2150 vim_free(qfp->qf_pattern); |
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2151 vim_free(qfp); |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2152 return QF_FAIL; |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
2153 } |
7 | 2154 qfp->qf_nr = nr; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2155 if (type != 1 && !vim_isprintc(type)) // only printable chars allowed |
7 | 2156 type = 0; |
2157 qfp->qf_type = type; | |
2158 qfp->qf_valid = valid; | |
2159 | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2160 lastp = &qfl->qf_last; |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2161 if (qf_list_empty(qfl)) // first element in the list |
7 | 2162 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2163 qfl->qf_start = qfp; |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2164 qfl->qf_ptr = qfp; |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2165 qfl->qf_index = 0; |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
2166 qfp->qf_prev = NULL; |
7 | 2167 } |
2168 else | |
2169 { | |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
2170 qfp->qf_prev = *lastp; |
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
2171 (*lastp)->qf_next = qfp; |
7 | 2172 } |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
2173 qfp->qf_next = NULL; |
7 | 2174 qfp->qf_cleared = FALSE; |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
2175 *lastp = qfp; |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2176 ++qfl->qf_count; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2177 if (qfl->qf_index == 0 && qfp->qf_valid) // first valid entry |
7 | 2178 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2179 qfl->qf_index = qfl->qf_count; |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2180 qfl->qf_ptr = qfp; |
7 | 2181 } |
2182 | |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2183 return QF_OK; |
7 | 2184 } |
2185 | |
2186 /* | |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2187 * Allocate a new quickfix/location list stack |
644 | 2188 */ |
659 | 2189 static qf_info_T * |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2190 qf_alloc_stack(qfltype_T qfltype) |
644 | 2191 { |
659 | 2192 qf_info_T *qi; |
2193 | |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
2194 qi = ALLOC_CLEAR_ONE_ID(qf_info_T, aid_qf_qfinfo); |
659 | 2195 if (qi != NULL) |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2196 { |
659 | 2197 qi->qf_refcount++; |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2198 qi->qfl_type = qfltype; |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
2199 qi->qf_bufnr = INVALID_QFBUFNR; |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2200 } |
659 | 2201 return qi; |
644 | 2202 } |
2203 | |
2204 /* | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2205 * Return the location list stack for window 'wp'. |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2206 * If not present, allocate a location list stack |
644 | 2207 */ |
2208 static qf_info_T * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
2209 ll_get_or_alloc_list(win_T *wp) |
644 | 2210 { |
2211 if (IS_LL_WINDOW(wp)) | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2212 // For a location list window, use the referenced location list |
644 | 2213 return wp->w_llist_ref; |
2214 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2215 // For a non-location list window, w_llist_ref should not point to a |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2216 // location list. |
644 | 2217 ll_free_all(&wp->w_llist_ref); |
2218 | |
2219 if (wp->w_llist == NULL) | |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2220 wp->w_llist = qf_alloc_stack(QFLT_LOCATION); // new location list |
644 | 2221 return wp->w_llist; |
2222 } | |
2223 | |
2224 /* | |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2225 * Get the quickfix/location list stack to use for the specified Ex command. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2226 * For a location list command, returns the stack for the current window. If |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2227 * the location list is not found, then returns NULL and prints an error |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2228 * message if 'print_emsg' is TRUE. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2229 */ |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2230 static qf_info_T * |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2231 qf_cmd_get_stack(exarg_T *eap, int print_emsg) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2232 { |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2233 qf_info_T *qi = &ql_info; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2234 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2235 if (is_loclist_cmd(eap->cmdidx)) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2236 { |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2237 qi = GET_LOC_LIST(curwin); |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2238 if (qi == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2239 { |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2240 if (print_emsg) |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
2241 emsg(_(e_no_location_list)); |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2242 return NULL; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2243 } |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2244 } |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2245 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2246 return qi; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2247 } |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2248 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2249 /* |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2250 * Get the quickfix/location list stack to use for the specified Ex command. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2251 * For a location list command, returns the stack for the current window. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2252 * If the location list is not present, then allocates a new one. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2253 * Returns NULL if the allocation fails. For a location list command, sets |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2254 * 'pwinp' to curwin. |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2255 */ |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2256 static qf_info_T * |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2257 qf_cmd_get_or_alloc_stack(exarg_T *eap, win_T **pwinp) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2258 { |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2259 qf_info_T *qi = &ql_info; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2260 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2261 if (is_loclist_cmd(eap->cmdidx)) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2262 { |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2263 qi = ll_get_or_alloc_list(curwin); |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2264 if (qi == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2265 return NULL; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2266 *pwinp = curwin; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2267 } |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2268 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2269 return qi; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2270 } |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2271 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
2272 /* |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2273 * Copy location list entries from 'from_qfl' to 'to_qfl'. |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2274 */ |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2275 static int |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2276 copy_loclist_entries(qf_list_T *from_qfl, qf_list_T *to_qfl) |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2277 { |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2278 int i; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2279 qfline_T *from_qfp; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2280 qfline_T *prevp; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2281 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2282 // copy all the location entries in this list |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
2283 FOR_ALL_QFL_ITEMS(from_qfl, from_qfp, i) |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2284 { |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2285 if (qf_add_entry(to_qfl, |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2286 NULL, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2287 NULL, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2288 from_qfp->qf_module, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2289 0, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2290 from_qfp->qf_text, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2291 from_qfp->qf_lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2292 from_qfp->qf_end_lnum, |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2293 from_qfp->qf_col, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
2294 from_qfp->qf_end_col, |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2295 from_qfp->qf_viscol, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2296 from_qfp->qf_pattern, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2297 from_qfp->qf_nr, |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2298 0, |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2299 from_qfp->qf_valid) == QF_FAIL) |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2300 return FAIL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2301 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2302 // qf_add_entry() will not set the qf_num field, as the |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2303 // directory and file names are not supplied. So the qf_fnum |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2304 // field is copied here. |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2305 prevp = to_qfl->qf_last; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2306 prevp->qf_fnum = from_qfp->qf_fnum; // file number |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2307 prevp->qf_type = from_qfp->qf_type; // error type |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2308 if (from_qfl->qf_ptr == from_qfp) |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2309 to_qfl->qf_ptr = prevp; // current location |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2310 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2311 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2312 return OK; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2313 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2314 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2315 /* |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2316 * Copy the specified location list 'from_qfl' to 'to_qfl'. |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2317 */ |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2318 static int |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2319 copy_loclist(qf_list_T *from_qfl, qf_list_T *to_qfl) |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2320 { |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2321 // Some of the fields are populated by qf_add_entry() |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2322 to_qfl->qfl_type = from_qfl->qfl_type; |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2323 to_qfl->qf_nonevalid = from_qfl->qf_nonevalid; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2324 to_qfl->qf_count = 0; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2325 to_qfl->qf_index = 0; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2326 to_qfl->qf_start = NULL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2327 to_qfl->qf_last = NULL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2328 to_qfl->qf_ptr = NULL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2329 if (from_qfl->qf_title != NULL) |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2330 to_qfl->qf_title = vim_strsave(from_qfl->qf_title); |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2331 else |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2332 to_qfl->qf_title = NULL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2333 if (from_qfl->qf_ctx != NULL) |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2334 { |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2335 to_qfl->qf_ctx = alloc_tv(); |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2336 if (to_qfl->qf_ctx != NULL) |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2337 copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx); |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2338 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2339 else |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2340 to_qfl->qf_ctx = NULL; |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2341 if (from_qfl->qf_qftf_cb.cb_name != NULL) |
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2342 copy_callback(&to_qfl->qf_qftf_cb, &from_qfl->qf_qftf_cb); |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
2343 else |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
2344 to_qfl->qf_qftf_cb.cb_name = NULL; |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2345 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2346 if (from_qfl->qf_count) |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2347 if (copy_loclist_entries(from_qfl, to_qfl) == FAIL) |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2348 return FAIL; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2349 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2350 to_qfl->qf_index = from_qfl->qf_index; // current index in the list |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2351 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2352 // Assign a new ID for the location list |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2353 to_qfl->qf_id = ++last_qf_id; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2354 to_qfl->qf_changedtick = 0L; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2355 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2356 // When no valid entries are present in the list, qf_ptr points to |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2357 // the first item in the list |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2358 if (to_qfl->qf_nonevalid) |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2359 { |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2360 to_qfl->qf_ptr = to_qfl->qf_start; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2361 to_qfl->qf_index = 1; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2362 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2363 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2364 return OK; |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2365 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2366 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2367 /* |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2368 * Copy the location list stack 'from' window to 'to' window. |
644 | 2369 */ |
2370 void | |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2371 copy_loclist_stack(win_T *from, win_T *to) |
644 | 2372 { |
2373 qf_info_T *qi; | |
2374 int idx; | |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2375 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2376 // When copying from a location list window, copy the referenced |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2377 // location list. For other windows, copy the location list for |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2378 // that window. |
644 | 2379 if (IS_LL_WINDOW(from)) |
2380 qi = from->w_llist_ref; | |
2381 else | |
2382 qi = from->w_llist; | |
2383 | |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2384 if (qi == NULL) // no location list to copy |
644 | 2385 return; |
2386 | |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2387 // allocate a new location list |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2388 if ((to->w_llist = qf_alloc_stack(QFLT_LOCATION)) == NULL) |
644 | 2389 return; |
2390 | |
2391 to->w_llist->qf_listcount = qi->qf_listcount; | |
2392 | |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2393 // Copy the location lists one at a time |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
2394 for (idx = 0; idx < qi->qf_listcount; ++idx) |
644 | 2395 { |
2396 to->w_llist->qf_curlist = idx; | |
2397 | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2398 if (copy_loclist(qf_get_list(qi, idx), |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2399 qf_get_list(to->w_llist, idx)) == FAIL) |
644 | 2400 { |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2401 qf_free_all(to); |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2402 return; |
644 | 2403 } |
14844
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2404 } |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2405 |
a74786d0370c
patch 8.1.0434: copy_loclist() is too long
Christian Brabandt <cb@256bit.org>
parents:
14838
diff
changeset
|
2406 to->w_llist->qf_curlist = qi->qf_curlist; // current list |
644 | 2407 } |
2408 | |
2409 /* | |
10379
73e2a7abe2a3
commit https://github.com/vim/vim/commit/7618e00d3b8bfe064cfc524640d754607361f9df
Christian Brabandt <cb@256bit.org>
parents:
10369
diff
changeset
|
2410 * 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
|
2411 * Also sets the b_has_qf_entry flag. |
7 | 2412 */ |
2413 static int | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2414 qf_get_fnum(qf_list_T *qfl, char_u *directory, char_u *fname) |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
2415 { |
9473
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2416 char_u *ptr = NULL; |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2417 buf_T *buf; |
9473
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2418 char_u *bufname; |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2419 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2420 if (fname == NULL || *fname == NUL) // no file name |
7 | 2421 return 0; |
2422 | |
2823 | 2423 #ifdef VMS |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2424 vms_remove_version(fname); |
2823 | 2425 #endif |
2426 #ifdef BACKSLASH_IN_FILENAME | |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2427 if (directory != NULL) |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2428 slash_adjust(directory); |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2429 slash_adjust(fname); |
2823 | 2430 #endif |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2431 if (directory != NULL && !vim_isAbsName(fname) |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2432 && (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
|
2433 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2434 // Here we check if the file really exists. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2435 // This should normally be true, but if make works without |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2436 // "leaving directory"-messages we might have missed a |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2437 // directory change. |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2438 if (mch_getperm(ptr) < 0) |
7 | 2439 { |
2440 vim_free(ptr); | |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
2441 directory = qf_guess_filepath(qfl, fname); |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2442 if (directory) |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2443 ptr = concat_fnames(directory, fname, TRUE); |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2444 else |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2445 ptr = vim_strsave(fname); |
7 | 2446 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2447 // 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
|
2448 bufname = ptr; |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2449 } |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2450 else |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2451 bufname = fname; |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2452 |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2453 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
|
2454 && bufref_valid(&qf_last_bufref)) |
9473
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2455 { |
9475
4d8f7f8da90c
commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents:
9473
diff
changeset
|
2456 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
|
2457 vim_free(ptr); |
7 | 2458 } |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2459 else |
9473
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2460 { |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2461 vim_free(qf_last_bufname); |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2462 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
|
2463 if (bufname == ptr) |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2464 qf_last_bufname = bufname; |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2465 else |
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2466 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
|
2467 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
|
2468 } |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2469 if (buf == NULL) |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
2470 return 0; |
9473
bdac1019552f
commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents:
9458
diff
changeset
|
2471 |
9608
fa64afb99dda
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents:
9579
diff
changeset
|
2472 buf->b_has_qf_entry = |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
2473 IS_QF_LIST(qfl) ? 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
|
2474 return buf->b_fnum; |
7 | 2475 } |
2476 | |
2477 /* | |
9334
674f9e3ccd1a
commit https://github.com/vim/vim/commit/38df43bd13a2498cc96b3ddd9a20dd75126bd171
Christian Brabandt <cb@256bit.org>
parents:
9201
diff
changeset
|
2478 * 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
|
2479 * NULL on error. |
7 | 2480 */ |
2481 static char_u * | |
9397
e08e8b00fe48
commit https://github.com/vim/vim/commit/361c8f0e517e41f1f1d34dae328044406fde80ac
Christian Brabandt <cb@256bit.org>
parents:
9389
diff
changeset
|
2482 qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr, int is_file_stack) |
7 | 2483 { |
2484 struct dir_stack_T *ds_new; | |
2485 struct dir_stack_T *ds_ptr; | |
2486 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2487 // allocate new stack element and hook it in |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
2488 ds_new = ALLOC_ONE_ID(struct dir_stack_T, aid_qf_dirstack); |
7 | 2489 if (ds_new == NULL) |
2490 return NULL; | |
2491 | |
2492 ds_new->next = *stackptr; | |
2493 *stackptr = ds_new; | |
2494 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2495 // store directory on the stack |
7 | 2496 if (vim_isAbsName(dirbuf) |
2497 || (*stackptr)->next == NULL | |
28871
18604231a1d1
patch 8.2.4958: a couple conditions are always true
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
2498 || is_file_stack) |
7 | 2499 (*stackptr)->dirname = vim_strsave(dirbuf); |
2500 else | |
2501 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2502 // Okay we don't have an absolute path. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2503 // dirbuf must be a subdir of one of the directories on the stack. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2504 // Let's search... |
7 | 2505 ds_new = (*stackptr)->next; |
2506 (*stackptr)->dirname = NULL; | |
2507 while (ds_new) | |
2508 { | |
2509 vim_free((*stackptr)->dirname); | |
2510 (*stackptr)->dirname = concat_fnames(ds_new->dirname, dirbuf, | |
2511 TRUE); | |
2512 if (mch_isdir((*stackptr)->dirname) == TRUE) | |
2513 break; | |
2514 | |
2515 ds_new = ds_new->next; | |
2516 } | |
2517 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2518 // clean up all dirs we already left |
7 | 2519 while ((*stackptr)->next != ds_new) |
2520 { | |
2521 ds_ptr = (*stackptr)->next; | |
2522 (*stackptr)->next = (*stackptr)->next->next; | |
2523 vim_free(ds_ptr->dirname); | |
2524 vim_free(ds_ptr); | |
2525 } | |
2526 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2527 // Nothing found -> it must be on top level |
7 | 2528 if (ds_new == NULL) |
2529 { | |
2530 vim_free((*stackptr)->dirname); | |
2531 (*stackptr)->dirname = vim_strsave(dirbuf); | |
2532 } | |
2533 } | |
2534 | |
2535 if ((*stackptr)->dirname != NULL) | |
2536 return (*stackptr)->dirname; | |
2537 else | |
2538 { | |
2539 ds_ptr = *stackptr; | |
2540 *stackptr = (*stackptr)->next; | |
2541 vim_free(ds_ptr); | |
2542 return NULL; | |
2543 } | |
2544 } | |
2545 | |
2546 /* | |
2547 * pop dirbuf from the directory stack and return previous directory or NULL if | |
2548 * stack is empty | |
2549 */ | |
2550 static char_u * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
2551 qf_pop_dir(struct dir_stack_T **stackptr) |
7 | 2552 { |
2553 struct dir_stack_T *ds_ptr; | |
2554 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2555 // TODO: Should we check if dirbuf is the directory on top of the stack? |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2556 // What to do if it isn't? |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2557 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2558 // pop top element and free it |
7 | 2559 if (*stackptr != NULL) |
2560 { | |
2561 ds_ptr = *stackptr; | |
2562 *stackptr = (*stackptr)->next; | |
2563 vim_free(ds_ptr->dirname); | |
2564 vim_free(ds_ptr); | |
2565 } | |
2566 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2567 // return NEW top element as current dir or NULL if stack is empty |
7 | 2568 return *stackptr ? (*stackptr)->dirname : NULL; |
2569 } | |
2570 | |
2571 /* | |
2572 * clean up directory stack | |
2573 */ | |
2574 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
2575 qf_clean_dir_stack(struct dir_stack_T **stackptr) |
7 | 2576 { |
2577 struct dir_stack_T *ds_ptr; | |
2578 | |
2579 while ((ds_ptr = *stackptr) != NULL) | |
2580 { | |
2581 *stackptr = (*stackptr)->next; | |
2582 vim_free(ds_ptr->dirname); | |
2583 vim_free(ds_ptr); | |
2584 } | |
2585 } | |
2586 | |
2587 /* | |
2588 * Check in which directory of the directory stack the given file can be | |
2589 * found. | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
2590 * Returns a pointer to the directory name or NULL if not found. |
7 | 2591 * Cleans up intermediate directory entries. |
2592 * | |
2593 * TODO: How to solve the following problem? | |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2594 * If we have this directory tree: |
7 | 2595 * ./ |
2596 * ./aa | |
2597 * ./aa/bb | |
2598 * ./bb | |
2599 * ./bb/x.c | |
2600 * and make says: | |
2601 * making all in aa | |
2602 * making all in bb | |
2603 * x.c:9: Error | |
2604 * Then qf_push_dir thinks we are in ./aa/bb, but we are in ./bb. | |
2605 * qf_guess_filepath will return NULL. | |
2606 */ | |
2607 static char_u * | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2608 qf_guess_filepath(qf_list_T *qfl, char_u *filename) |
7 | 2609 { |
2610 struct dir_stack_T *ds_ptr; | |
2611 struct dir_stack_T *ds_tmp; | |
2612 char_u *fullname; | |
2613 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2614 // 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
|
2615 if (qfl->qf_dir_stack == NULL) |
7 | 2616 return NULL; |
2617 | |
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
|
2618 ds_ptr = qfl->qf_dir_stack->next; |
7 | 2619 fullname = NULL; |
2620 while (ds_ptr) | |
2621 { | |
2622 vim_free(fullname); | |
2623 fullname = concat_fnames(ds_ptr->dirname, filename, TRUE); | |
2624 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2625 // If concat_fnames failed, just go on. The worst thing that can happen |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2626 // is that we delete the entire stack. |
7 | 2627 if ((fullname != NULL) && (mch_getperm(fullname) >= 0)) |
2628 break; | |
2629 | |
2630 ds_ptr = ds_ptr->next; | |
2631 } | |
2632 | |
2633 vim_free(fullname); | |
2634 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2635 // 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
|
2636 while (qfl->qf_dir_stack->next != ds_ptr) |
7 | 2637 { |
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
|
2638 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
|
2639 qfl->qf_dir_stack->next = qfl->qf_dir_stack->next->next; |
7 | 2640 vim_free(ds_tmp->dirname); |
2641 vim_free(ds_tmp); | |
2642 } | |
2643 | |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2644 return ds_ptr == NULL ? NULL : ds_ptr->dirname; |
7 | 2645 } |
2646 | |
2647 /* | |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2648 * Returns TRUE if a quickfix/location list with the given identifier exists. |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2649 */ |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2650 static int |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
2651 qflist_valid(win_T *wp, int_u qf_id) |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2652 { |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2653 qf_info_T *qi = &ql_info; |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2654 int i; |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2655 |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2656 if (wp != NULL) |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2657 { |
23865
e1643a1aa1a0
patch 8.2.2474: using freed memory when window is closed by autocommand
Bram Moolenaar <Bram@vim.org>
parents:
23778
diff
changeset
|
2658 if (!win_valid(wp)) |
e1643a1aa1a0
patch 8.2.2474: using freed memory when window is closed by autocommand
Bram Moolenaar <Bram@vim.org>
parents:
23778
diff
changeset
|
2659 return FALSE; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2660 qi = GET_LOC_LIST(wp); // Location list |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2661 if (qi == NULL) |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2662 return FALSE; |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2663 } |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2664 |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2665 for (i = 0; i < qi->qf_listcount; ++i) |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2666 if (qi->qf_lists[i].qf_id == qf_id) |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2667 return TRUE; |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2668 |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2669 return FALSE; |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2670 } |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2671 |
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
2672 /* |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
2673 * When loading a file from the quickfix, the autocommands may modify it. |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2674 * This may invalidate the current quickfix entry. This function checks |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2675 * whether an entry is still present in the quickfix list. |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2676 * Similar to location list. |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2677 */ |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2678 static int |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2679 is_qf_entry_present(qf_list_T *qfl, qfline_T *qf_ptr) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2680 { |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2681 qfline_T *qfp; |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2682 int i; |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2683 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2684 // Search for the entry in the current list |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
2685 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
2686 if (qfp == qf_ptr) |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2687 break; |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2688 |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
2689 if (i > qfl->qf_count) // Entry is not found |
8702
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2690 return FALSE; |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2691 |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2692 return TRUE; |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2693 } |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2694 |
39d6e4f2f748
commit https://github.com/vim/vim/commit/ffec3c53496d49668669deabc0724ec78e2274fd
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
2695 /* |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2696 * Get the next valid entry in the current quickfix/location list. The search |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
2697 * starts from the current entry. Returns NULL on failure. |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2698 */ |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2699 static qfline_T * |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2700 get_next_valid_entry( |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2701 qf_list_T *qfl, |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2702 qfline_T *qf_ptr, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2703 int *qf_index, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2704 int dir) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2705 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2706 int idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2707 int old_qf_fnum; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2708 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2709 idx = *qf_index; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2710 old_qf_fnum = qf_ptr->qf_fnum; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2711 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2712 do |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2713 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2714 if (idx == qfl->qf_count || qf_ptr->qf_next == NULL) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2715 return NULL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2716 ++idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2717 qf_ptr = qf_ptr->qf_next; |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2718 } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2719 || (dir == FORWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum)); |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2720 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2721 *qf_index = idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2722 return qf_ptr; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2723 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2724 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2725 /* |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2726 * Get the previous valid entry in the current quickfix/location list. The |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
2727 * search starts from the current entry. Returns NULL on failure. |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2728 */ |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2729 static qfline_T * |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2730 get_prev_valid_entry( |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2731 qf_list_T *qfl, |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2732 qfline_T *qf_ptr, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2733 int *qf_index, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2734 int dir) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2735 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2736 int idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2737 int old_qf_fnum; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2738 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2739 idx = *qf_index; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2740 old_qf_fnum = qf_ptr->qf_fnum; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2741 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2742 do |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2743 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2744 if (idx == 1 || qf_ptr->qf_prev == NULL) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2745 return NULL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2746 --idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2747 qf_ptr = qf_ptr->qf_prev; |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2748 } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2749 || (dir == BACKWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum)); |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2750 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2751 *qf_index = idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2752 return qf_ptr; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2753 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2754 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2755 /* |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2756 * Get the n'th (errornr) previous/next valid entry from the current entry in |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2757 * the quickfix list. |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2758 * dir == FORWARD or FORWARD_FILE: next valid entry |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2759 * dir == BACKWARD or BACKWARD_FILE: previous valid entry |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2760 */ |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2761 static qfline_T * |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2762 get_nth_valid_entry( |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2763 qf_list_T *qfl, |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2764 int errornr, |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2765 int dir, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2766 int *new_qfidx) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2767 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2768 qfline_T *qf_ptr = qfl->qf_ptr; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2769 int qf_idx = qfl->qf_index; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2770 qfline_T *prev_qf_ptr; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2771 int prev_index; |
26917
d91aea2a612c
patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26913
diff
changeset
|
2772 char *err = e_no_more_items; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2773 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2774 while (errornr--) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2775 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2776 prev_qf_ptr = qf_ptr; |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2777 prev_index = qf_idx; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2778 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2779 if (dir == FORWARD || dir == FORWARD_FILE) |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2780 qf_ptr = get_next_valid_entry(qfl, qf_ptr, &qf_idx, dir); |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2781 else |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2782 qf_ptr = get_prev_valid_entry(qfl, qf_ptr, &qf_idx, dir); |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2783 if (qf_ptr == NULL) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2784 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2785 qf_ptr = prev_qf_ptr; |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2786 qf_idx = prev_index; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2787 if (err != NULL) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2788 { |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
2789 emsg(_(err)); |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2790 return NULL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2791 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2792 break; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2793 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2794 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2795 err = NULL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2796 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2797 |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2798 *new_qfidx = qf_idx; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2799 return qf_ptr; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2800 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2801 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2802 /* |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2803 * Get n'th (errornr) quickfix entry from the current entry in the quickfix |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2804 * list 'qfl'. Returns a pointer to the new entry and the index in 'new_qfidx' |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2805 */ |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2806 static qfline_T * |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2807 get_nth_entry(qf_list_T *qfl, int errornr, int *new_qfidx) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2808 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2809 qfline_T *qf_ptr = qfl->qf_ptr; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2810 int qf_idx = qfl->qf_index; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2811 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2812 // New error number is less than the current error number |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2813 while (errornr < qf_idx && qf_idx > 1 && qf_ptr->qf_prev != NULL) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2814 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2815 --qf_idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2816 qf_ptr = qf_ptr->qf_prev; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2817 } |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2818 // New error number is greater than the current error number |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2819 while (errornr > qf_idx && qf_idx < qfl->qf_count && |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
2820 qf_ptr->qf_next != NULL) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2821 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2822 ++qf_idx; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2823 qf_ptr = qf_ptr->qf_next; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2824 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2825 |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2826 *new_qfidx = qf_idx; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2827 return qf_ptr; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2828 } |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2829 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2830 /* |
19195
2ef19eed524a
patch 8.2.0156: various typos in source files and tests
Bram Moolenaar <Bram@vim.org>
parents:
18886
diff
changeset
|
2831 * Get a entry specified by 'errornr' and 'dir' from the current |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2832 * quickfix/location list. 'errornr' specifies the index of the entry and 'dir' |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2833 * specifies the direction (FORWARD/BACKWARD/FORWARD_FILE/BACKWARD_FILE). |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2834 * Returns a pointer to the entry and the index of the new entry is stored in |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2835 * 'new_qfidx'. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2836 */ |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2837 static qfline_T * |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2838 qf_get_entry( |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2839 qf_list_T *qfl, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2840 int errornr, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2841 int dir, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2842 int *new_qfidx) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2843 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2844 qfline_T *qf_ptr = qfl->qf_ptr; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2845 int qfidx = qfl->qf_index; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2846 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2847 if (dir != 0) // next/prev valid entry |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2848 qf_ptr = get_nth_valid_entry(qfl, errornr, dir, &qfidx); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2849 else if (errornr != 0) // go to specified number |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2850 qf_ptr = get_nth_entry(qfl, errornr, &qfidx); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2851 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
2852 *new_qfidx = qfidx; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2853 return qf_ptr; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2854 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2855 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2856 /* |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
2857 * Find a window displaying a Vim help file in the current tab page. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2858 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2859 static win_T * |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2860 qf_find_help_win(void) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2861 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2862 win_T *wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2863 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2864 FOR_ALL_WINDOWS(wp) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2865 if (bt_help(wp->w_buffer)) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2866 return wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2867 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2868 return NULL; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2869 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2870 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2871 /* |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2872 * Set the location list for the specified window to 'qi'. |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2873 */ |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2874 static void |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2875 win_set_loclist(win_T *wp, qf_info_T *qi) |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2876 { |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2877 wp->w_llist = qi; |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2878 qi->qf_refcount++; |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2879 } |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2880 |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2881 /* |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2882 * Find a help window or open one. If 'newwin' is TRUE, then open a new help |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2883 * window. |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2884 */ |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2885 static int |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2886 jump_to_help_window(qf_info_T *qi, int newwin, int *opened_window) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2887 { |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2888 win_T *wp; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2889 int flags; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2890 |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
2891 if (cmdmod.cmod_tab != 0 || newwin) |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2892 wp = NULL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2893 else |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2894 wp = qf_find_help_win(); |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2895 if (wp != NULL && wp->w_buffer->b_nwindows > 0) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2896 win_enter(wp, TRUE); |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2897 else |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2898 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2899 // Split off help window; put it at far top if no position |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2900 // specified, the current window is vertically split and narrow. |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2901 flags = WSP_HELP; |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
2902 if (cmdmod.cmod_split == 0 && curwin->w_width != Columns |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2903 && curwin->w_width < 80) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2904 flags |= WSP_TOP; |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2905 // If the user asks to open a new window, then copy the location list. |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2906 // Otherwise, don't copy the location list. |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2907 if (IS_LL_STACK(qi) && !newwin) |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2908 flags |= WSP_NEWLOC; |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2909 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2910 if (win_split(0, flags) == FAIL) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2911 return FAIL; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2912 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2913 *opened_window = TRUE; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2914 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2915 if (curwin->w_height < p_hh) |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2916 win_setheight((int)p_hh); |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2917 |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2918 // When using location list, the new window should use the supplied |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2919 // location list. If the user asks to open a new window, then the new |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2920 // window will get a copy of the location list. |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
2921 if (IS_LL_STACK(qi) && !newwin) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
2922 win_set_loclist(curwin, qi); |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2923 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2924 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2925 if (!p_im) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2926 restart_edit = 0; // don't want insert mode in help file |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2927 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2928 return OK; |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2929 } |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2930 |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
2931 /* |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
2932 * Find a non-quickfix window using the given location list stack in the |
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
2933 * current tabpage. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2934 * Returns NULL if a matching window is not found. |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2935 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2936 static win_T * |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2937 qf_find_win_with_loclist(qf_info_T *ll) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2938 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2939 win_T *wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2940 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2941 FOR_ALL_WINDOWS(wp) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2942 if (wp->w_llist == ll && !bt_quickfix(wp->w_buffer)) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2943 return wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2944 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2945 return NULL; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2946 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2947 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2948 /* |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
2949 * Find a window containing a normal buffer in the current tab page. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2950 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2951 static win_T * |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2952 qf_find_win_with_normal_buf(void) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2953 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2954 win_T *wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2955 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2956 FOR_ALL_WINDOWS(wp) |
14433
4a94173743d9
patch 8.1.0230: directly checking 'buftype' value
Christian Brabandt <cb@256bit.org>
parents:
14397
diff
changeset
|
2957 if (bt_normal(wp->w_buffer)) |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2958 return wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2959 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2960 return NULL; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2961 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2962 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2963 /* |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2964 * Go to a window in any tabpage containing the specified file. Returns TRUE |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2965 * if successfully jumped to the window. Otherwise returns FALSE. |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2966 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2967 static int |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2968 qf_goto_tabwin_with_file(int fnum) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2969 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2970 tabpage_T *tp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2971 win_T *wp; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2972 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2973 FOR_ALL_TAB_WINDOWS(tp, wp) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2974 if (wp->w_buffer->b_fnum == fnum) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2975 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2976 goto_tabpage_win(tp, wp); |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2977 return TRUE; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2978 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2979 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2980 return FALSE; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2981 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2982 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2983 /* |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2984 * Create a new window to show a file above the quickfix window. Called when |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2985 * only the quickfix window is present. |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2986 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2987 static int |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2988 qf_open_new_file_win(qf_info_T *ll_ref) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2989 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2990 int flags; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2991 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2992 flags = WSP_ABOVE; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2993 if (ll_ref != NULL) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2994 flags |= WSP_NEWLOC; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2995 if (win_split(0, flags) == FAIL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2996 return FAIL; // not enough room for window |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
2997 p_swb = empty_option; // don't split again |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2998 swb_flags = 0; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
2999 RESET_BINDING(curwin); |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3000 if (ll_ref != NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3001 // The new window should use the location list from the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3002 // location list window |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3003 win_set_loclist(curwin, ll_ref); |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3004 return OK; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3005 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3006 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3007 /* |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3008 * Go to a window that shows the right buffer. If the window is not found, go |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3009 * to the window just above the location list window. This is used for opening |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3010 * a file from a location window and not from a quickfix window. If some usable |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3011 * window is previously found, then it is supplied in 'use_win'. |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3012 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3013 static void |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3014 qf_goto_win_with_ll_file(win_T *use_win, int qf_fnum, qf_info_T *ll_ref) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3015 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3016 win_T *win = use_win; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3017 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3018 if (win == NULL) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3019 { |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
3020 // Find the window showing the selected file in the current tab page. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3021 FOR_ALL_WINDOWS(win) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3022 if (win->w_buffer->b_fnum == qf_fnum) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3023 break; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3024 if (win == NULL) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3025 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3026 // Find a previous usable window |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3027 win = curwin; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3028 do |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3029 { |
14433
4a94173743d9
patch 8.1.0230: directly checking 'buftype' value
Christian Brabandt <cb@256bit.org>
parents:
14397
diff
changeset
|
3030 if (bt_normal(win->w_buffer)) |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3031 break; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3032 if (win->w_prev == NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3033 win = lastwin; // wrap around the top |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3034 else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3035 win = win->w_prev; // go to previous window |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3036 } while (win != curwin); |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3037 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3038 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3039 win_goto(win); |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3040 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3041 // If the location list for the window is not set, then set it |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3042 // to the location list from the location window |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
3043 if (win->w_llist == NULL && ll_ref != NULL) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3044 win_set_loclist(win, ll_ref); |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3045 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3046 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3047 /* |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3048 * Go to a window that contains the specified buffer 'qf_fnum'. If a window is |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3049 * not found, then go to the window just above the quickfix window. This is |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3050 * used for opening a file from a quickfix window and not from a location |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3051 * window. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3052 */ |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3053 static void |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3054 qf_goto_win_with_qfl_file(int qf_fnum) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3055 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3056 win_T *win; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3057 win_T *altwin; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3058 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3059 win = curwin; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3060 altwin = NULL; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3061 for (;;) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3062 { |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3063 if (win->w_buffer->b_fnum == qf_fnum) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3064 break; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3065 if (win->w_prev == NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3066 win = lastwin; // wrap around the top |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3067 else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3068 win = win->w_prev; // go to previous window |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3069 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3070 if (IS_QF_WINDOW(win)) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3071 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3072 // Didn't find it, go to the window before the quickfix |
18646
394abd397e15
patch 8.1.2315: not always using the right window when jumping to an error
Bram Moolenaar <Bram@vim.org>
parents:
18607
diff
changeset
|
3073 // window, unless 'switchbuf' contains 'uselast': in this case we |
394abd397e15
patch 8.1.2315: not always using the right window when jumping to an error
Bram Moolenaar <Bram@vim.org>
parents:
18607
diff
changeset
|
3074 // try to jump to the previously used window first. |
394abd397e15
patch 8.1.2315: not always using the right window when jumping to an error
Bram Moolenaar <Bram@vim.org>
parents:
18607
diff
changeset
|
3075 if ((swb_flags & SWB_USELAST) && win_valid(prevwin)) |
394abd397e15
patch 8.1.2315: not always using the right window when jumping to an error
Bram Moolenaar <Bram@vim.org>
parents:
18607
diff
changeset
|
3076 win = prevwin; |
394abd397e15
patch 8.1.2315: not always using the right window when jumping to an error
Bram Moolenaar <Bram@vim.org>
parents:
18607
diff
changeset
|
3077 else if (altwin != NULL) |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3078 win = altwin; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3079 else if (curwin->w_prev != NULL) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3080 win = curwin->w_prev; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3081 else |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3082 win = curwin->w_next; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3083 break; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3084 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3085 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3086 // Remember a usable window. |
14433
4a94173743d9
patch 8.1.0230: directly checking 'buftype' value
Christian Brabandt <cb@256bit.org>
parents:
14397
diff
changeset
|
3087 if (altwin == NULL && !win->w_p_pvw && bt_normal(win->w_buffer)) |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3088 altwin = win; |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3089 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3090 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3091 win_goto(win); |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3092 } |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3093 |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3094 /* |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3095 * Find a suitable window for opening a file (qf_fnum) from the |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3096 * quickfix/location list and jump to it. If the file is already opened in a |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3097 * window, jump to it. Otherwise open a new window to display the file. If |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3098 * 'newwin' is TRUE, then always open a new window. This is called from either |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3099 * a quickfix or a location list window. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3100 */ |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3101 static int |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3102 qf_jump_to_usable_window(int qf_fnum, int newwin, int *opened_window) |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3103 { |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3104 win_T *usable_wp = NULL; |
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3105 int usable_win = FALSE; |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3106 qf_info_T *ll_ref = NULL; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3107 |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3108 // If opening a new window, then don't use the location list referred by |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3109 // the current window. Otherwise two windows will refer to the same |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3110 // location list. |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3111 if (!newwin) |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3112 ll_ref = curwin->w_llist_ref; |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3113 |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3114 if (ll_ref != NULL) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3115 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3116 // Find a non-quickfix window with this location list |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3117 usable_wp = qf_find_win_with_loclist(ll_ref); |
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3118 if (usable_wp != NULL) |
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3119 usable_win = TRUE; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3120 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3121 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3122 if (!usable_win) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3123 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3124 // Locate a window showing a normal buffer |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3125 win_T *win = qf_find_win_with_normal_buf(); |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3126 if (win != NULL) |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3127 usable_win = TRUE; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3128 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3129 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3130 // If no usable window is found and 'switchbuf' contains "usetab" |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3131 // then search in other tabs. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3132 if (!usable_win && (swb_flags & SWB_USETAB)) |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3133 usable_win = qf_goto_tabwin_with_file(qf_fnum); |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3134 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3135 // If there is only one window and it is the quickfix window, create a |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3136 // new one above the quickfix window. |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3137 if ((ONE_WINDOW && bt_quickfix(curbuf)) || !usable_win || newwin) |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3138 { |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3139 if (qf_open_new_file_win(ll_ref) != OK) |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3140 return FAIL; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3141 *opened_window = TRUE; // close it when fail |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3142 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3143 else |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3144 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3145 if (curwin->w_llist_ref != NULL) // In a location window |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3146 qf_goto_win_with_ll_file(usable_wp, qf_fnum, ll_ref); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3147 else // In a quickfix window |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3148 qf_goto_win_with_qfl_file(qf_fnum); |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3149 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3150 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3151 return OK; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3152 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3153 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3154 /* |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3155 * Edit the selected file or help file. |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3156 * Returns OK if successfully edited the file, FAIL on failing to open the |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3157 * buffer and QF_ABORT if the quickfix/location list was freed by an autocmd |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3158 * when opening the buffer. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3159 */ |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3160 static int |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3161 qf_jump_edit_buffer( |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3162 qf_info_T *qi, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3163 qfline_T *qf_ptr, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3164 int forceit, |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3165 int prev_winid, |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3166 int *opened_window) |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3167 { |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3168 qf_list_T *qfl = qf_get_curlist(qi); |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3169 int old_changedtick = qfl->qf_changedtick; |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
3170 qfltype_T qfl_type = qfl->qfl_type; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3171 int retval = OK; |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3172 int old_qf_curlist = qi->qf_curlist; |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3173 int save_qfid = qfl->qf_id; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3174 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3175 if (qf_ptr->qf_type == 1) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3176 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3177 // Open help file (do_ecmd() will set b_help flag, readfile() will |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3178 // set b_p_ro flag). |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3179 if (!can_abandon(curbuf, forceit)) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3180 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3181 no_write_message(); |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3182 return FAIL; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3183 } |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3184 |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3185 retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3186 ECMD_HIDE + ECMD_SET_HELP, |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3187 prev_winid == curwin->w_id ? curwin : NULL); |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3188 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3189 else |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3190 retval = buflist_getfile(qf_ptr->qf_fnum, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3191 (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit); |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
3192 |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3193 // If a location list, check whether the associated window is still |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3194 // present. |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3195 if (qfl_type == QFLT_LOCATION) |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3196 { |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3197 win_T *wp = win_id2wp(prev_winid); |
28247
f70015784777
patch 8.2.4649: various formatting problems
Bram Moolenaar <Bram@vim.org>
parents:
27974
diff
changeset
|
3198 |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3199 if (wp == NULL && curwin->w_llist != qi) |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3200 { |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26958
diff
changeset
|
3201 emsg(_(e_current_window_was_closed)); |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3202 *opened_window = FALSE; |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3203 return QF_ABORT; |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3204 } |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3205 } |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3206 |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
3207 if (qfl_type == QFLT_QUICKFIX && !qflist_valid(NULL, save_qfid)) |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3208 { |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3209 emsg(_(e_current_quickfix_list_was_changed)); |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3210 return QF_ABORT; |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3211 } |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3212 |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3213 // Check if the list was changed. The pointers may happen to be identical, |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3214 // thus also check qf_changedtick. |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3215 if (old_qf_curlist != qi->qf_curlist |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3216 || old_changedtick != qfl->qf_changedtick |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3217 || !is_qf_entry_present(qfl, qf_ptr)) |
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3218 { |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
3219 if (qfl_type == QFLT_QUICKFIX) |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3220 emsg(_(e_current_quickfix_list_was_changed)); |
14956
940def6df43f
patch 8.1.0489: crash when autocmd clears vimpgrep location list
Bram Moolenaar <Bram@vim.org>
parents:
14954
diff
changeset
|
3221 else |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3222 emsg(_(e_current_location_list_was_changed)); |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3223 return QF_ABORT; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3224 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3225 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3226 return retval; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3227 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3228 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3229 /* |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3230 * Go to the error line in the current file using either line/column number or |
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
3231 * a search pattern. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3232 */ |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3233 static void |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3234 qf_jump_goto_line( |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3235 linenr_T qf_lnum, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3236 int qf_col, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3237 char_u qf_viscol, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3238 char_u *qf_pattern) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3239 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3240 linenr_T i; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3241 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3242 if (qf_pattern == NULL) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3243 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3244 // Go to line with error, unless qf_lnum is 0. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3245 i = qf_lnum; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3246 if (i > 0) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3247 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3248 if (i > curbuf->b_ml.ml_line_count) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3249 i = curbuf->b_ml.ml_line_count; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3250 curwin->w_cursor.lnum = i; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3251 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3252 if (qf_col > 0) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3253 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3254 curwin->w_cursor.coladd = 0; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3255 if (qf_viscol == TRUE) |
15703
b8a2362073bb
patch 8.1.0859: "%v" in 'errorformat' does handle multi-byte characters
Bram Moolenaar <Bram@vim.org>
parents:
15641
diff
changeset
|
3256 coladvance(qf_col - 1); |
b8a2362073bb
patch 8.1.0859: "%v" in 'errorformat' does handle multi-byte characters
Bram Moolenaar <Bram@vim.org>
parents:
15641
diff
changeset
|
3257 else |
b8a2362073bb
patch 8.1.0859: "%v" in 'errorformat' does handle multi-byte characters
Bram Moolenaar <Bram@vim.org>
parents:
15641
diff
changeset
|
3258 curwin->w_cursor.col = qf_col - 1; |
14552
b298737a7188
patch 8.1.0289: cursor moves to wrong column after quickfix jump
Christian Brabandt <cb@256bit.org>
parents:
14550
diff
changeset
|
3259 curwin->w_set_curswant = TRUE; |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3260 check_cursor(); |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3261 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3262 else |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3263 beginline(BL_WHITE | BL_FIX); |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3264 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3265 else |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3266 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3267 pos_T save_cursor; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3268 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3269 // Move the cursor to the first line in the buffer |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3270 save_cursor = curwin->w_cursor; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3271 curwin->w_cursor.lnum = 0; |
19475
5512aa74cb62
patch 8.2.0295: highlighting for :s wrong when using different separator
Bram Moolenaar <Bram@vim.org>
parents:
19405
diff
changeset
|
3272 if (!do_search(NULL, '/', '/', qf_pattern, (long)1, SEARCH_KEEP, NULL)) |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3273 curwin->w_cursor = save_cursor; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3274 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3275 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3276 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3277 /* |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3278 * Display quickfix list index and size message |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3279 */ |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3280 static void |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3281 qf_jump_print_msg( |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3282 qf_info_T *qi, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3283 int qf_index, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3284 qfline_T *qf_ptr, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3285 buf_T *old_curbuf, |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3286 linenr_T old_lnum) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3287 { |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3288 linenr_T i; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3289 int len; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3290 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3291 // Update the screen before showing the message, unless the screen |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3292 // scrolled up. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3293 if (!msg_scrolled) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3294 update_topline_redraw(); |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3295 sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index, |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3296 qf_get_curlist(qi)->qf_count, |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3297 qf_ptr->qf_cleared ? _(" (line deleted)") : "", |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3298 (char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr)); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3299 // Add the message, skipping leading whitespace and newlines. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3300 len = (int)STRLEN(IObuff); |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3301 qf_fmt_text(skipwhite(qf_ptr->qf_text), IObuff + len, IOSIZE - len); |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3302 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3303 // Output the message. Overwrite to avoid scrolling when the 'O' |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3304 // flag is present in 'shortmess'; But when not jumping, print the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3305 // whole message. |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3306 i = msg_scroll; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3307 if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3308 msg_scroll = TRUE; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3309 else if (!msg_scrolled && shortmess(SHM_OVERALL)) |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3310 msg_scroll = FALSE; |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3311 msg_attr_keep((char *)IObuff, 0, TRUE); |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3312 msg_scroll = i; |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3313 } |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3314 |
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3315 /* |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3316 * Find a usable window for opening a file from the quickfix/location list. If |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3317 * a window is not found then open a new window. If 'newwin' is TRUE, then open |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3318 * a new window. |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3319 * Returns OK if successfully jumped or opened a window. Returns FAIL if not |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3320 * able to jump/open a window. Returns NOTDONE if a file is not associated |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3321 * with the entry. Returns QF_ABORT if the quickfix/location list was modified |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3322 * by an autocmd. |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3323 */ |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3324 static int |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3325 qf_jump_open_window( |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3326 qf_info_T *qi, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3327 qfline_T *qf_ptr, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3328 int newwin, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3329 int *opened_window) |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3330 { |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3331 qf_list_T *qfl = qf_get_curlist(qi); |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3332 int old_changedtick = qfl->qf_changedtick; |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3333 int old_qf_curlist = qi->qf_curlist; |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3334 qfltype_T qfl_type = qfl->qfl_type; |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3335 |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3336 // For ":helpgrep" find a help window or open one. |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
3337 if (qf_ptr->qf_type == 1 && (!bt_help(curwin->w_buffer) |
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
3338 || cmdmod.cmod_tab != 0)) |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3339 if (jump_to_help_window(qi, newwin, opened_window) == FAIL) |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3340 return FAIL; |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3341 if (old_qf_curlist != qi->qf_curlist |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3342 || old_changedtick != qfl->qf_changedtick |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3343 || !is_qf_entry_present(qfl, qf_ptr)) |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3344 { |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3345 if (qfl_type == QFLT_QUICKFIX) |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3346 emsg(_(e_current_quickfix_list_was_changed)); |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3347 else |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3348 emsg(_(e_current_location_list_was_changed)); |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3349 return QF_ABORT; |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3350 } |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3351 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3352 // If currently in the quickfix window, find another window to show the |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3353 // file in. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3354 if (bt_quickfix(curbuf) && !*opened_window) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3355 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3356 // If there is no file specified, we don't know where to go. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3357 // But do advance, otherwise ":cn" gets stuck. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3358 if (qf_ptr->qf_fnum == 0) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3359 return NOTDONE; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3360 |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3361 if (qf_jump_to_usable_window(qf_ptr->qf_fnum, newwin, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3362 opened_window) == FAIL) |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3363 return FAIL; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3364 } |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3365 if (old_qf_curlist != qi->qf_curlist |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3366 || old_changedtick != qfl->qf_changedtick |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3367 || !is_qf_entry_present(qfl, qf_ptr)) |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3368 { |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3369 if (qfl_type == QFLT_QUICKFIX) |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3370 emsg(_(e_current_quickfix_list_was_changed)); |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3371 else |
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3372 emsg(_(e_current_location_list_was_changed)); |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3373 return QF_ABORT; |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
3374 } |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3375 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3376 return OK; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3377 } |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3378 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3379 /* |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3380 * Edit a selected file from the quickfix/location list and jump to a |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3381 * particular line/column, adjust the folds and display a message about the |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3382 * jump. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3383 * Returns OK on success and FAIL on failing to open the file/buffer. Returns |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3384 * QF_ABORT if the quickfix/location list is freed by an autocmd when opening |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3385 * the file. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3386 */ |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3387 static int |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3388 qf_jump_to_buffer( |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3389 qf_info_T *qi, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3390 int qf_index, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3391 qfline_T *qf_ptr, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3392 int forceit, |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3393 int prev_winid, |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3394 int *opened_window, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3395 int openfold, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3396 int print_message) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3397 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3398 buf_T *old_curbuf; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3399 linenr_T old_lnum; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3400 int retval = OK; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3401 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3402 // If there is a file name, read the wanted file if needed, and check |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3403 // autowrite etc. |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3404 old_curbuf = curbuf; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3405 old_lnum = curwin->w_cursor.lnum; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3406 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3407 if (qf_ptr->qf_fnum != 0) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3408 { |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3409 retval = qf_jump_edit_buffer(qi, qf_ptr, forceit, prev_winid, |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3410 opened_window); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3411 if (retval != OK) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3412 return retval; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3413 } |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3414 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3415 // When not switched to another buffer, still need to set pc mark |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3416 if (curbuf == old_curbuf) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3417 setpcmark(); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3418 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3419 qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, qf_ptr->qf_viscol, |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3420 qf_ptr->qf_pattern); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3421 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3422 #ifdef FEAT_FOLDING |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3423 if ((fdo_flags & FDO_QUICKFIX) && openfold) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3424 foldOpenCursor(); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3425 #endif |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3426 if (print_message) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3427 qf_jump_print_msg(qi, qf_index, qf_ptr, old_curbuf, old_lnum); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3428 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3429 return retval; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3430 } |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3431 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3432 /* |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3433 * Jump to a quickfix line and try to use an existing window. |
7 | 3434 */ |
3435 void | |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3436 qf_jump(qf_info_T *qi, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3437 int dir, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3438 int errornr, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3439 int forceit) |
7 | 3440 { |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3441 qf_jump_newwin(qi, dir, errornr, forceit, FALSE); |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3442 } |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3443 |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3444 /* |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3445 * Jump to a quickfix line. |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3446 * If dir == 0 go to entry "errornr". |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3447 * If dir == FORWARD go "errornr" valid entries forward. |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3448 * If dir == BACKWARD go "errornr" valid entries backward. |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3449 * If dir == FORWARD_FILE go "errornr" valid entries files backward. |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3450 * If dir == BACKWARD_FILE go "errornr" valid entries files backward |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3451 * else if "errornr" is zero, redisplay the same line |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3452 * If 'forceit' is TRUE, then can discard changes to the current buffer. |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3453 * If 'newwin' is TRUE, then open the file in a new window. |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3454 */ |
17789
0f7ae8010787
patch 8.1.1891: functions used in one file are global
Bram Moolenaar <Bram@vim.org>
parents:
17099
diff
changeset
|
3455 static void |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3456 qf_jump_newwin(qf_info_T *qi, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3457 int dir, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3458 int errornr, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3459 int forceit, |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3460 int newwin) |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3461 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3462 qf_list_T *qfl; |
230 | 3463 qfline_T *qf_ptr; |
3464 qfline_T *old_qf_ptr; | |
7 | 3465 int qf_index; |
3466 int old_qf_index; | |
639 | 3467 char_u *old_swb = p_swb; |
1621 | 3468 unsigned old_swb_flags = swb_flags; |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3469 int prev_winid; |
7 | 3470 int opened_window = FALSE; |
3471 int print_message = TRUE; | |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3472 int old_KeyTyped = KeyTyped; // getting file may reset it |
12503
4d40b2644e92
patch 8.0.1130: the qf_jump() function is still too long
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
3473 int retval = OK; |
644 | 3474 |
659 | 3475 if (qi == NULL) |
3476 qi = &ql_info; | |
644 | 3477 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
3478 if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) |
7 | 3479 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
3480 emsg(_(e_no_errors)); |
7 | 3481 return; |
3482 } | |
3483 | |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3484 incr_quickfix_busy(); |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3485 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3486 qfl = qf_get_curlist(qi); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3487 |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3488 qf_ptr = qfl->qf_ptr; |
7 | 3489 old_qf_ptr = qf_ptr; |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3490 qf_index = qfl->qf_index; |
7 | 3491 old_qf_index = qf_index; |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3492 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3493 qf_ptr = qf_get_entry(qfl, errornr, dir, &qf_index); |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3494 if (qf_ptr == NULL) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3495 { |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3496 qf_ptr = old_qf_ptr; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3497 qf_index = old_qf_index; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3498 goto theend; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3499 } |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3500 |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3501 qfl->qf_index = qf_index; |
25254
5127844b909b
patch 8.2.3163: location list window may open a wrong file
Bram Moolenaar <Bram@vim.org>
parents:
25064
diff
changeset
|
3502 qfl->qf_ptr = qf_ptr; |
644 | 3503 if (qf_win_pos_update(qi, old_qf_index)) |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3504 // No need to print the error message if it's visible in the error |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3505 // window |
7 | 3506 print_message = FALSE; |
3507 | |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3508 prev_winid = curwin->w_id; |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3509 |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
3510 retval = qf_jump_open_window(qi, qf_ptr, newwin, &opened_window); |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3511 if (retval == FAIL) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3512 goto failed; |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3513 if (retval == QF_ABORT) |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3514 { |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3515 qi = NULL; |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3516 qf_ptr = NULL; |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3517 goto theend; |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3518 } |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3519 if (retval == NOTDONE) |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3520 goto theend; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3521 |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3522 retval = qf_jump_to_buffer(qi, qf_index, qf_ptr, forceit, prev_winid, |
17950
bb0e25a8b5d7
patch 8.1.1971: manually enabling features causes build errors
Bram Moolenaar <Bram@vim.org>
parents:
17940
diff
changeset
|
3523 &opened_window, old_KeyTyped, print_message); |
29896
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3524 if (retval == QF_ABORT) |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3525 { |
c554ac4c17c3
patch 9.0.0286: using freed memory when location list changed in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
29843
diff
changeset
|
3526 // Quickfix/location list was modified by an autocmd |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3527 qi = NULL; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3528 qf_ptr = NULL; |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3529 } |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3530 |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3531 if (retval != OK) |
7 | 3532 { |
3533 if (opened_window) | |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3534 win_close(curwin, TRUE); // Close opened window |
8605
536b9b88d1ca
commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents:
8603
diff
changeset
|
3535 if (qf_ptr != NULL && qf_ptr->qf_fnum != 0) |
7 | 3536 { |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3537 // Couldn't open file, so put index back where it was. This could |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3538 // happen if the file was readonly and we changed something. |
7 | 3539 failed: |
3540 qf_ptr = old_qf_ptr; | |
3541 qf_index = old_qf_index; | |
3542 } | |
3543 } | |
3544 theend: | |
8605
536b9b88d1ca
commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents:
8603
diff
changeset
|
3545 if (qi != NULL) |
536b9b88d1ca
commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents:
8603
diff
changeset
|
3546 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3547 qfl->qf_ptr = qf_ptr; |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3548 qfl->qf_index = qf_index; |
8605
536b9b88d1ca
commit https://github.com/vim/vim/commit/0899d698030ec076eb26352cda1ea334ab0819d9
Christian Brabandt <cb@256bit.org>
parents:
8603
diff
changeset
|
3549 } |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3550 if (p_swb != old_swb && p_swb == empty_option) |
7 | 3551 { |
14838
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3552 // Restore old 'switchbuf' value, but not when an autocommand or |
6040d93396de
patch 8.1.0431: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14796
diff
changeset
|
3553 // modeline has changed the value. |
18656
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3554 p_swb = old_swb; |
022deb0adec9
patch 8.1.2320: insufficient test coverage for quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18646
diff
changeset
|
3555 swb_flags = old_swb_flags; |
7 | 3556 } |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
3557 decr_quickfix_busy(); |
7 | 3558 } |
3559 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3560 // Highlight attributes used for displaying entries from the quickfix list. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3561 static int qfFileAttr; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3562 static int qfSepAttr; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3563 static int qfLineAttr; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3564 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3565 /* |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3566 * Display information about a single entry from the quickfix/location list. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3567 * Used by ":clist/:llist" commands. |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3568 * 'cursel' will be set to TRUE for the currently selected entry in the |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3569 * quickfix list. |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3570 */ |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3571 static void |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3572 qf_list_entry(qfline_T *qfp, int qf_idx, int cursel) |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3573 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3574 char_u *fname; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3575 buf_T *buf; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3576 int filter_entry; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3577 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3578 fname = NULL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3579 if (qfp->qf_module != NULL && *qfp->qf_module != NUL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3580 vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", qf_idx, |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3581 (char *)qfp->qf_module); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3582 else { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3583 if (qfp->qf_fnum != 0 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3584 && (buf = buflist_findnr(qfp->qf_fnum)) != NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3585 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3586 fname = buf->b_fname; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3587 if (qfp->qf_type == 1) // :helpgrep |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3588 fname = gettail(fname); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3589 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3590 if (fname == NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3591 sprintf((char *)IObuff, "%2d", qf_idx); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3592 else |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3593 vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3594 qf_idx, (char *)fname); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3595 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3596 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3597 // Support for filtering entries using :filter /pat/ clist |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3598 // Match against the module name, file name, search pattern and |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3599 // text of the entry. |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3600 filter_entry = TRUE; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3601 if (qfp->qf_module != NULL && *qfp->qf_module != NUL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3602 filter_entry &= message_filtered(qfp->qf_module); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3603 if (filter_entry && fname != NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3604 filter_entry &= message_filtered(fname); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3605 if (filter_entry && qfp->qf_pattern != NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3606 filter_entry &= message_filtered(qfp->qf_pattern); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3607 if (filter_entry) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3608 filter_entry &= message_filtered(qfp->qf_text); |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3609 if (filter_entry) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3610 return; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3611 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3612 msg_putchar('\n'); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3613 msg_outtrans_attr(IObuff, cursel ? HL_ATTR(HLF_QFL) : qfFileAttr); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3614 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3615 if (qfp->qf_lnum != 0) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3616 msg_puts_attr(":", qfSepAttr); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3617 if (qfp->qf_lnum == 0) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3618 IObuff[0] = NUL; |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3619 else |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3620 qf_range_text(qfp, IObuff, IOSIZE); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3621 sprintf((char *)IObuff + STRLEN(IObuff), "%s", |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3622 (char *)qf_types(qfp->qf_type, qfp->qf_nr)); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3623 msg_puts_attr((char *)IObuff, qfLineAttr); |
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3624 msg_puts_attr(":", qfSepAttr); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3625 if (qfp->qf_pattern != NULL) |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3626 { |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3627 qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3628 msg_puts((char *)IObuff); |
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3629 msg_puts_attr(":", qfSepAttr); |
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3630 } |
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3631 msg_puts(" "); |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3632 |
29511
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3633 { |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3634 char_u *tbuf = IObuff; |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3635 size_t tbuflen = IOSIZE; |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3636 size_t len = STRLEN(qfp->qf_text) + 3; |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3637 |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3638 if (len > IOSIZE) |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3639 { |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3640 tbuf = alloc(len); |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3641 if (tbuf != NULL) |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3642 tbuflen = len; |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3643 else |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3644 tbuf = IObuff; |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3645 } |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3646 |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3647 // Remove newlines and leading whitespace from the text. For an |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3648 // unrecognized line keep the indent, the compiler may mark a word |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3649 // with ^^^^. |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3650 qf_fmt_text((fname != NULL || qfp->qf_lnum != 0) |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3651 ? skipwhite(qfp->qf_text) : qfp->qf_text, |
29576
04bc48a4ca6f
patch 9.0.0129: compiler warning for int/size_t usage
Bram Moolenaar <Bram@vim.org>
parents:
29511
diff
changeset
|
3652 tbuf, (int)tbuflen); |
29511
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3653 msg_prt_line(tbuf, FALSE); |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3654 |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3655 if (tbuf != IObuff) |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3656 vim_free(tbuf); |
3778f9415b92
patch 9.0.0097: long quickfix line is truncated for :clist
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
3657 } |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3658 out_flush(); // show one line at a time |
14477
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3659 } |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3660 |
1ccf5dcd88ca
patch 8.1.0252: quickfix functions are too long
Christian Brabandt <cb@256bit.org>
parents:
14469
diff
changeset
|
3661 /* |
7 | 3662 * ":clist": list all errors |
644 | 3663 * ":llist": list all locations |
7 | 3664 */ |
3665 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
3666 qf_list(exarg_T *eap) |
7 | 3667 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3668 qf_list_T *qfl; |
230 | 3669 qfline_T *qfp; |
3670 int i; | |
3671 int idx1 = 1; | |
3672 int idx2 = -1; | |
3673 char_u *arg = eap->arg; | |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3674 int plus = FALSE; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3675 int all = eap->forceit; // if not :cl!, only show |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3676 // recognised errors |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3677 qf_info_T *qi; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3678 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3679 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3680 return; |
644 | 3681 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
3682 if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) |
7 | 3683 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
3684 emsg(_(e_no_errors)); |
7 | 3685 return; |
3686 } | |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3687 if (*arg == '+') |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3688 { |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3689 ++arg; |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3690 plus = TRUE; |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3691 } |
7 | 3692 if (!get_list_range(&arg, &idx1, &idx2) || *arg != NUL) |
3693 { | |
26883
7f150a4936f2
patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
3694 semsg(_(e_trailing_characters_str), arg); |
7 | 3695 return; |
3696 } | |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
3697 qfl = qf_get_curlist(qi); |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3698 if (plus) |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3699 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3700 i = qfl->qf_index; |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3701 idx2 = i + idx1; |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3702 idx1 = i; |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3703 } |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3704 else |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3705 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3706 i = qfl->qf_count; |
9379
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3707 if (idx1 < 0) |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3708 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
|
3709 if (idx2 < 0) |
b398e4e12751
commit https://github.com/vim/vim/commit/e8fea0728a2fa1fe78ef0ac90dee1a84bd7ef9fb
Christian Brabandt <cb@256bit.org>
parents:
9369
diff
changeset
|
3710 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
|
3711 } |
7 | 3712 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3713 // Shorten all the file names, so that it is easy to read |
13819
31bb8e1f7625
patch 8.0.1781: file names in quickfix window are not shortened
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
3714 shorten_fnames(FALSE); |
31bb8e1f7625
patch 8.0.1781: file names in quickfix window are not shortened
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
3715 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3716 // Get the attributes for the different quickfix highlight items. Note |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3717 // that this depends on syntax items defined in the qf.vim syntax file |
12912
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3718 qfFileAttr = syn_name2attr((char_u *)"qfFileName"); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3719 if (qfFileAttr == 0) |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3720 qfFileAttr = HL_ATTR(HLF_D); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3721 qfSepAttr = syn_name2attr((char_u *)"qfSeparator"); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3722 if (qfSepAttr == 0) |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3723 qfSepAttr = HL_ATTR(HLF_D); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3724 qfLineAttr = syn_name2attr((char_u *)"qfLineNr"); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3725 if (qfLineAttr == 0) |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3726 qfLineAttr = HL_ATTR(HLF_N); |
888441e8fbb0
patch 8.0.1332: highlighting in quickfix window could be better
Christian Brabandt <cb@256bit.org>
parents:
12531
diff
changeset
|
3727 |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3728 if (qfl->qf_nonevalid) |
7 | 3729 all = TRUE; |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
3730 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
7 | 3731 { |
3732 if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2) | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3733 qf_list_entry(qfp, i, i == qfl->qf_index); |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
3734 |
7 | 3735 ui_breakcheck(); |
3736 } | |
3737 } | |
3738 | |
3739 /* | |
3740 * Remove newlines and leading whitespace from an error message. | |
3741 * Put the result in "buf[bufsize]". | |
3742 */ | |
3743 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
3744 qf_fmt_text(char_u *text, char_u *buf, int bufsize) |
7 | 3745 { |
3746 int i; | |
3747 char_u *p = text; | |
3748 | |
3749 for (i = 0; *p != NUL && i < bufsize - 1; ++i) | |
3750 { | |
3751 if (*p == '\n') | |
3752 { | |
3753 buf[i] = ' '; | |
3754 while (*++p != NUL) | |
11129
f4ea50924c6d
patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
11063
diff
changeset
|
3755 if (!VIM_ISWHITE(*p) && *p != '\n') |
7 | 3756 break; |
3757 } | |
3758 else | |
3759 buf[i] = *p++; | |
3760 } | |
3761 buf[i] = NUL; | |
3762 } | |
3763 | |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3764 /* |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3765 * Range information from lnum, col, end_lnum, and end_col. |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3766 * Put the result in "buf[bufsize]". |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3767 */ |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3768 static void |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3769 qf_range_text(qfline_T *qfp, char_u *buf, int bufsize) |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3770 { |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3771 int len; |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3772 vim_snprintf((char *)buf, bufsize, "%ld", qfp->qf_lnum); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3773 len = (int)STRLEN(buf); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3774 |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3775 if (qfp->qf_end_lnum > 0 && qfp->qf_lnum != qfp->qf_end_lnum) |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3776 { |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3777 vim_snprintf((char *)buf + len, bufsize - len, |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3778 "-%ld", qfp->qf_end_lnum); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3779 len += (int)STRLEN(buf + len); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3780 } |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3781 if (qfp->qf_col > 0) |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3782 { |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3783 vim_snprintf((char *)buf + len, bufsize - len, " col %d", qfp->qf_col); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3784 len += (int)STRLEN(buf + len); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3785 if (qfp->qf_end_col > 0 && qfp->qf_col != qfp->qf_end_col) |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3786 { |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3787 vim_snprintf((char *)buf + len, bufsize - len, |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3788 "-%d", qfp->qf_end_col); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3789 len += (int)STRLEN(buf + len); |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3790 } |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3791 } |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3792 buf[len] = NUL; |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3793 } |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3794 |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
3795 /* |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3796 * Display information (list number, list size and the title) about a |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3797 * quickfix/location list. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3798 */ |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3799 static void |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3800 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
|
3801 { |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3802 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
|
3803 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
|
3804 char_u buf[IOSIZE]; |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3805 |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3806 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
|
3807 lead, |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3808 which + 1, |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3809 qi->qf_listcount, |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3810 count); |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3811 |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3812 if (title != NULL) |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3813 { |
9579
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3814 size_t len = STRLEN(buf); |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3815 |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3816 if (len < 34) |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3817 { |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3818 vim_memset(buf + len, ' ', 34 - len); |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3819 buf[34] = NUL; |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3820 } |
2fb7e008ac9b
commit https://github.com/vim/vim/commit/16ec3c9be3fcdc38530bddb12978bc5a7b98c0f6
Christian Brabandt <cb@256bit.org>
parents:
9573
diff
changeset
|
3821 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
|
3822 } |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3823 trunc_string(buf, buf, Columns - 1, IOSIZE); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3824 msg((char *)buf); |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3825 } |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3826 |
7 | 3827 /* |
3828 * ":colder [count]": Up in the quickfix stack. | |
3829 * ":cnewer [count]": Down in the quickfix stack. | |
644 | 3830 * ":lolder [count]": Up in the location list stack. |
3831 * ":lnewer [count]": Down in the location list stack. | |
7 | 3832 */ |
3833 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
3834 qf_age(exarg_T *eap) |
7 | 3835 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3836 qf_info_T *qi; |
7 | 3837 int count; |
3838 | |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3839 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3840 return; |
644 | 3841 |
7 | 3842 if (eap->addr_count != 0) |
3843 count = eap->line2; | |
3844 else | |
3845 count = 1; | |
3846 while (count--) | |
3847 { | |
644 | 3848 if (eap->cmdidx == CMD_colder || eap->cmdidx == CMD_lolder) |
7 | 3849 { |
644 | 3850 if (qi->qf_curlist == 0) |
7 | 3851 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
3852 emsg(_(e_at_bottom_of_quickfix_stack)); |
4371 | 3853 break; |
7 | 3854 } |
644 | 3855 --qi->qf_curlist; |
7 | 3856 } |
3857 else | |
3858 { | |
644 | 3859 if (qi->qf_curlist >= qi->qf_listcount - 1) |
7 | 3860 { |
26913
d4e61d61afd9
patch 8.2.3985: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26883
diff
changeset
|
3861 emsg(_(e_at_top_of_quickfix_stack)); |
4371 | 3862 break; |
7 | 3863 } |
644 | 3864 ++qi->qf_curlist; |
7 | 3865 } |
3866 } | |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3867 qf_msg(qi, qi->qf_curlist, ""); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
3868 qf_update_buffer(qi, NULL); |
7 | 3869 } |
3870 | |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3871 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3872 * Display the information about all the quickfix/location lists in the stack |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
3873 */ |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3874 void |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3875 qf_history(exarg_T *eap) |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3876 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
3877 qf_info_T *qi = qf_cmd_get_stack(eap, FALSE); |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3878 int i; |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3879 |
16555
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3880 if (eap->addr_count > 0) |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3881 { |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3882 if (qi == NULL) |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3883 { |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
3884 emsg(_(e_no_location_list)); |
16555
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3885 return; |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3886 } |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3887 |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3888 // Jump to the specified quickfix list |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3889 if (eap->line2 > 0 && eap->line2 <= qi->qf_listcount) |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3890 { |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3891 qi->qf_curlist = eap->line2 - 1; |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3892 qf_msg(qi, qi->qf_curlist, ""); |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3893 qf_update_buffer(qi, NULL); |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3894 } |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3895 else |
25064
8f2262c72178
patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
24964
diff
changeset
|
3896 emsg(_(e_invalid_range)); |
16555
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3897 |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3898 return; |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3899 } |
1302bc0b80db
patch 8.1.1281: cannot specify a count with :chistory
Bram Moolenaar <Bram@vim.org>
parents:
16543
diff
changeset
|
3900 |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
3901 if (qf_stack_empty(qi)) |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
3902 msg(_("No entries")); |
9538
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3903 else |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3904 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
|
3905 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
|
3906 } |
26da1efa9e46
commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents:
9534
diff
changeset
|
3907 |
7 | 3908 /* |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3909 * 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
|
3910 * associated with the list like context and title are not freed. |
7 | 3911 */ |
3912 static void | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3913 qf_free_items(qf_list_T *qfl) |
7 | 3914 { |
230 | 3915 qfline_T *qfp; |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
3916 qfline_T *qfpnext; |
3982 | 3917 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
|
3918 |
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
|
3919 while (qfl->qf_count && qfl->qf_start != NULL) |
7 | 3920 { |
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
|
3921 qfp = qfl->qf_start; |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
3922 qfpnext = qfp->qf_next; |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
3923 if (!stop) |
3949 | 3924 { |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
3925 vim_free(qfp->qf_module); |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
3926 vim_free(qfp->qf_text); |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
3927 vim_free(qfp->qf_pattern); |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
3928 stop = (qfp == qfpnext); |
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
3929 vim_free(qfp); |
3982 | 3930 if (stop) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3931 // Somehow qf_count may have an incorrect value, set it to 1 |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3932 // to avoid crashing when it's wrong. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
3933 // 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
|
3934 qfl->qf_count = 1; |
3949 | 3935 } |
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
|
3936 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
|
3937 --qfl->qf_count; |
7 | 3938 } |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3939 |
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
|
3940 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
|
3941 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
|
3942 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
|
3943 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
|
3944 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
|
3945 |
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
|
3946 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
|
3947 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
|
3948 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
|
3949 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
|
3950 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
|
3951 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
|
3952 qfl->qf_multiscan = FALSE; |
7 | 3953 } |
3954 | |
3955 /* | |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3956 * 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
|
3957 * 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
|
3958 */ |
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3959 static void |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3960 qf_free(qf_list_T *qfl) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3961 { |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
3962 qf_free_items(qfl); |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3963 |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13115
diff
changeset
|
3964 VIM_CLEAR(qfl->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
|
3965 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
|
3966 qfl->qf_ctx = NULL; |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
3967 free_callback(&qfl->qf_qftf_cb); |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
3968 qfl->qf_id = 0; |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
3969 qfl->qf_changedtick = 0L; |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3970 } |
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3971 |
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
3972 /* |
7 | 3973 * qf_mark_adjust: adjust marks |
3974 */ | |
3975 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
3976 qf_mark_adjust( |
12449
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3977 win_T *wp, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3978 linenr_T line1, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3979 linenr_T line2, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3980 long amount, |
7a743053dfd6
patch 8.0.1104: the qf_jump() function is too long
Christian Brabandt <cb@256bit.org>
parents:
12427
diff
changeset
|
3981 long amount_after) |
7 | 3982 { |
230 | 3983 int i; |
3984 qfline_T *qfp; | |
3985 int idx; | |
644 | 3986 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
|
3987 int found_one = FALSE; |
9608
fa64afb99dda
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents:
9579
diff
changeset
|
3988 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
|
3989 |
fa64afb99dda
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents:
9579
diff
changeset
|
3990 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
|
3991 return; |
644 | 3992 if (wp != NULL) |
3993 { | |
3994 if (wp->w_llist == NULL) | |
3995 return; | |
3996 qi = wp->w_llist; | |
3997 } | |
3998 | |
3999 for (idx = 0; idx < qi->qf_listcount; ++idx) | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4000 { |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4001 qf_list_T *qfl = qf_get_list(qi, idx); |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4002 |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4003 if (!qf_list_empty(qfl)) |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
4004 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
7 | 4005 if (qfp->qf_fnum == curbuf->b_fnum) |
4006 { | |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
4007 found_one = TRUE; |
7 | 4008 if (qfp->qf_lnum >= line1 && qfp->qf_lnum <= line2) |
4009 { | |
4010 if (amount == MAXLNUM) | |
4011 qfp->qf_cleared = TRUE; | |
4012 else | |
4013 qfp->qf_lnum += amount; | |
4014 } | |
4015 else if (amount_after && qfp->qf_lnum > line2) | |
4016 qfp->qf_lnum += amount_after; | |
4017 } | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4018 } |
9201
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
4019 |
692e156c7023
commit https://github.com/vim/vim/commit/2f095a4bc4d786e0ac834f48dd18a94fe2d140e3
Christian Brabandt <cb@256bit.org>
parents:
9197
diff
changeset
|
4020 if (!found_one) |
9608
fa64afb99dda
commit https://github.com/vim/vim/commit/c1542744e788d96fed24dd421f43009288092504
Christian Brabandt <cb@256bit.org>
parents:
9579
diff
changeset
|
4021 curbuf->b_has_qf_entry &= ~buf_has_flag; |
7 | 4022 } |
4023 | |
4024 /* | |
4025 * Make a nice message out of the error character and the error number: | |
4026 * char number message | |
4027 * e or E 0 " error" | |
4028 * w or W 0 " warning" | |
4029 * i or I 0 " info" | |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
4030 * n or N 0 " note" |
7 | 4031 * 0 0 "" |
4032 * other 0 " c" | |
4033 * e or E n " error n" | |
4034 * w or W n " warning n" | |
4035 * i or I n " info n" | |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
4036 * n or N n " note n" |
7 | 4037 * 0 n " error n" |
4038 * other n " c n" | |
4039 * 1 x "" :helpgrep | |
4040 */ | |
4041 static char_u * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4042 qf_types(int c, int nr) |
7 | 4043 { |
4044 static char_u buf[20]; | |
4045 static char_u cc[3]; | |
4046 char_u *p; | |
4047 | |
4048 if (c == 'W' || c == 'w') | |
4049 p = (char_u *)" warning"; | |
4050 else if (c == 'I' || c == 'i') | |
4051 p = (char_u *)" info"; | |
20729
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
4052 else if (c == 'N' || c == 'n') |
ada6f26e6eb1
patch 8.2.0917: quickfix entries do not suport a "note" type
Bram Moolenaar <Bram@vim.org>
parents:
20631
diff
changeset
|
4053 p = (char_u *)" note"; |
7 | 4054 else if (c == 'E' || c == 'e' || (c == 0 && nr > 0)) |
4055 p = (char_u *)" error"; | |
4056 else if (c == 0 || c == 1) | |
4057 p = (char_u *)""; | |
4058 else | |
4059 { | |
4060 cc[0] = ' '; | |
4061 cc[1] = c; | |
4062 cc[2] = NUL; | |
4063 p = cc; | |
4064 } | |
4065 | |
4066 if (nr <= 0) | |
4067 return p; | |
4068 | |
4069 sprintf((char *)buf, "%s %3d", (char *)p, nr); | |
4070 return buf; | |
4071 } | |
4072 | |
4073 /* | |
14397
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4074 * When "split" is FALSE: Open the entry/result under the cursor. |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4075 * When "split" is TRUE: Open the entry/result under the cursor in a new window. |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4076 */ |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4077 void |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4078 qf_view_result(int split) |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4079 { |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4080 qf_info_T *qi = &ql_info; |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4081 |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4082 if (IS_LL_WINDOW(curwin)) |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4083 qi = GET_LOC_LIST(curwin); |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4084 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4085 if (qf_list_empty(qf_get_curlist(qi))) |
14397
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4086 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
4087 emsg(_(e_no_errors)); |
14397
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4088 return; |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4089 } |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4090 |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4091 if (split) |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4092 { |
15024
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
4093 // Open the selected entry in a new window |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
4094 qf_jump_newwin(qi, 0, (long)curwin->w_cursor.lnum, FALSE, TRUE); |
3a3c9b638187
patch 8.1.0523: opening window from quickfix leaves empty buffer behind
Bram Moolenaar <Bram@vim.org>
parents:
14976
diff
changeset
|
4095 do_cmdline_cmd((char_u *) "clearjumps"); |
14397
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4096 return; |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4097 } |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4098 |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4099 do_cmdline_cmd((char_u *)(IS_LL_WINDOW(curwin) ? ".ll" : ".cc")); |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4100 } |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4101 |
19d99d9e670c
patch 8.1.0213: CTRL-W CR does not work properly in a quickfix window
Christian Brabandt <cb@256bit.org>
parents:
14307
diff
changeset
|
4102 /* |
7 | 4103 * ":cwindow": open the quickfix window if we have errors to display, |
4104 * close it if not. | |
644 | 4105 * ":lwindow": open the location list window if we have locations to display, |
4106 * close it if not. | |
7 | 4107 */ |
4108 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4109 ex_cwindow(exarg_T *eap) |
7 | 4110 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4111 qf_info_T *qi; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4112 qf_list_T *qfl; |
7 | 4113 win_T *win; |
4114 | |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4115 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4116 return; |
644 | 4117 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4118 qfl = qf_get_curlist(qi); |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4119 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4120 // Look for an existing quickfix window. |
644 | 4121 win = qf_find_win(qi); |
7 | 4122 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4123 // If a quickfix window is open but we have no errors to display, |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4124 // close the window. If a quickfix window is not open, then open |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4125 // it if we have errors; otherwise, leave it closed. |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
4126 if (qf_stack_empty(qi) |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4127 || qfl->qf_nonevalid |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
4128 || qf_list_empty(qfl)) |
7 | 4129 { |
4130 if (win != NULL) | |
4131 ex_cclose(eap); | |
4132 } | |
4133 else if (win == NULL) | |
4134 ex_copen(eap); | |
4135 } | |
4136 | |
4137 /* | |
4138 * ":cclose": close the window showing the list of errors. | |
644 | 4139 * ":lclose": close the window showing the location list |
7 | 4140 */ |
4141 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4142 ex_cclose(exarg_T *eap) |
7 | 4143 { |
644 | 4144 win_T *win = NULL; |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4145 qf_info_T *qi; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4146 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4147 if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4148 return; |
644 | 4149 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4150 // Find existing quickfix window and close it. |
644 | 4151 win = qf_find_win(qi); |
7 | 4152 if (win != NULL) |
4153 win_close(win, FALSE); | |
4154 } | |
4155 | |
4156 /* | |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4157 * Set "w:quickfix_title" if "qi" has a title. |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4158 */ |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4159 static void |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4160 qf_set_title_var(qf_list_T *qfl) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4161 { |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4162 if (qfl->qf_title != NULL) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4163 set_internal_string_var((char_u *)"w:quickfix_title", qfl->qf_title); |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4164 } |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4165 |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4166 /* |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4167 * Goto a quickfix or location list window (if present). |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4168 * Returns OK if the window is found, FAIL otherwise. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4169 */ |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4170 static int |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4171 qf_goto_cwindow(qf_info_T *qi, int resize, int sz, int vertsplit) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4172 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4173 win_T *win; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4174 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4175 win = qf_find_win(qi); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4176 if (win == NULL) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4177 return FAIL; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4178 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4179 win_goto(win); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4180 if (resize) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4181 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4182 if (vertsplit) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4183 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4184 if (sz != win->w_width) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4185 win_setwidth(sz); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4186 } |
18319
4cc8a1a134fc
patch 8.1.2154: quickfix window height wrong when there is a tabline
Bram Moolenaar <Bram@vim.org>
parents:
17950
diff
changeset
|
4187 else if (sz != win->w_height && win->w_height |
4cc8a1a134fc
patch 8.1.2154: quickfix window height wrong when there is a tabline
Bram Moolenaar <Bram@vim.org>
parents:
17950
diff
changeset
|
4188 + win->w_status_height + tabline_height() < cmdline_row) |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4189 win_setheight(sz); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4190 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4191 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4192 return OK; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4193 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4194 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4195 /* |
15965
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4196 * Set options for the buffer in the quickfix or location list window. |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4197 */ |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4198 static void |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4199 qf_set_cwindow_options(void) |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4200 { |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4201 // switch off 'swapfile' |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4202 set_option_value_give_err((char_u *)"swf", 0L, NULL, OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4203 set_option_value_give_err((char_u *)"bt", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4204 0L, (char_u *)"quickfix", OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4205 set_option_value_give_err((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL); |
15965
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4206 RESET_BINDING(curwin); |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4207 #ifdef FEAT_DIFF |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4208 curwin->w_p_diff = FALSE; |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4209 #endif |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4210 #ifdef FEAT_FOLDING |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4211 set_option_value_give_err((char_u *)"fdm", 0L, (char_u *)"manual", |
15965
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4212 OPT_LOCAL); |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4213 #endif |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4214 } |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4215 |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4216 /* |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4217 * Open a new quickfix or location list window, load the quickfix buffer and |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4218 * set the appropriate options for the window. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4219 * Returns FAIL if the window could not be opened. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4220 */ |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4221 static int |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4222 qf_open_new_cwindow(qf_info_T *qi, int height) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4223 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4224 buf_T *qf_buf; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4225 win_T *oldwin = curwin; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4226 tabpage_T *prevtab = curtab; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4227 int flags = 0; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4228 win_T *win; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4229 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4230 qf_buf = qf_find_buf(qi); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4231 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4232 // The current window becomes the previous window afterwards. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4233 win = curwin; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4234 |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
4235 if (IS_QF_STACK(qi) && cmdmod.cmod_split == 0) |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4236 // Create the new quickfix window at the very bottom, except when |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4237 // :belowright or :aboveleft is used. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4238 win_goto(lastwin); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4239 // Default is to open the window below the current window |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
4240 if (cmdmod.cmod_split == 0) |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4241 flags = WSP_BELOW; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4242 flags |= WSP_NEWLOC; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4243 if (win_split(height, flags) == FAIL) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4244 return FAIL; // not enough room for window |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4245 RESET_BINDING(curwin); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4246 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4247 if (IS_LL_STACK(qi)) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4248 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4249 // For the location list window, create a reference to the |
15770
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
4250 // location list stack from the window 'win'. |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
4251 curwin->w_llist_ref = qi; |
77e97f159554
patch 8.1.0892: failure when closing a window when location list is in use
Bram Moolenaar <Bram@vim.org>
parents:
15740
diff
changeset
|
4252 qi->qf_refcount++; |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4253 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4254 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4255 if (oldwin != curwin) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4256 oldwin = NULL; // don't store info when in another window |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4257 if (qf_buf != NULL) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4258 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4259 // Use the existing quickfix buffer |
22979
fab8455af19c
patch 8.2.2036: buffer messed up if creating the quickfix window fails
Bram Moolenaar <Bram@vim.org>
parents:
22870
diff
changeset
|
4260 if (do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, |
26026
db9fdfb86679
patch 8.2.3547: opening the quickfix window triggers BufWinEnter twice
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
4261 ECMD_HIDE + ECMD_OLDBUF + ECMD_NOWINENTER, oldwin) == FAIL) |
22979
fab8455af19c
patch 8.2.2036: buffer messed up if creating the quickfix window fails
Bram Moolenaar <Bram@vim.org>
parents:
22870
diff
changeset
|
4262 return FAIL; |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4263 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4264 else |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4265 { |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4266 // Create a new quickfix buffer |
26026
db9fdfb86679
patch 8.2.3547: opening the quickfix window triggers BufWinEnter twice
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
4267 if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE + ECMD_NOWINENTER, |
db9fdfb86679
patch 8.2.3547: opening the quickfix window triggers BufWinEnter twice
Bram Moolenaar <Bram@vim.org>
parents:
25384
diff
changeset
|
4268 oldwin) == FAIL) |
22979
fab8455af19c
patch 8.2.2036: buffer messed up if creating the quickfix window fails
Bram Moolenaar <Bram@vim.org>
parents:
22870
diff
changeset
|
4269 return FAIL; |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4270 |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4271 // save the number of the new buffer |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4272 qi->qf_bufnr = curbuf->b_fnum; |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4273 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4274 |
15965
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4275 // Set the options for the quickfix buffer/window (if not already done) |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4276 // Do this even if the quickfix buffer was already present, as an autocmd |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4277 // might have previously deleted (:bdelete) the quickfix buffer. |
17099
54b3059311b5
patch 8.1.1549: quickfix test fails
Bram Moolenaar <Bram@vim.org>
parents:
17095
diff
changeset
|
4278 if (!bt_quickfix(curbuf)) |
15965
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4279 qf_set_cwindow_options(); |
f376cd250b07
patch 8.1.0988: deleting location list buffer breaks location list window
Bram Moolenaar <Bram@vim.org>
parents:
15770
diff
changeset
|
4280 |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4281 // Only set the height when still in the same tab page and there is no |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4282 // window to the side. |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4283 if (curtab == prevtab && curwin->w_width == Columns) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4284 win_setheight(height); |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4285 curwin->w_p_wfh = TRUE; // set 'winfixheight' |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4286 if (win_valid(win)) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4287 prevwin = win; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4288 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4289 return OK; |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4290 } |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4291 |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4292 /* |
7 | 4293 * ":copen": open a window that shows the list of errors. |
644 | 4294 * ":lopen": open a window that shows the location list. |
7 | 4295 */ |
4296 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4297 ex_copen(exarg_T *eap) |
7 | 4298 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4299 qf_info_T *qi; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4300 qf_list_T *qfl; |
7 | 4301 int height; |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4302 int status = FAIL; |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4303 int lnum; |
7 | 4304 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4305 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4306 return; |
644 | 4307 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4308 incr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4309 |
7 | 4310 if (eap->addr_count != 0) |
4311 height = eap->line2; | |
4312 else | |
4313 height = QF_WINHEIGHT; | |
4314 | |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4315 reset_VIsual_and_resel(); // stop Visual mode |
7 | 4316 #ifdef FEAT_GUI |
4317 need_mouse_correct = TRUE; | |
4318 #endif | |
4319 | |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4320 // Find an existing quickfix window, or open a new one. |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
4321 if (cmdmod.cmod_tab == 0) |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4322 status = qf_goto_cwindow(qi, eap->addr_count != 0, height, |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
4323 cmdmod.cmod_split & WSP_VERT); |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4324 if (status == FAIL) |
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4325 if (qf_open_new_cwindow(qi, height) == FAIL) |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4326 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4327 decr_quickfix_busy(); |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4328 return; |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4329 } |
7 | 4330 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4331 qfl = qf_get_curlist(qi); |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4332 qf_set_title_var(qfl); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4333 // Save the current index here, as updating the quickfix buffer may free |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4334 // the quickfix list |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4335 lnum = qfl->qf_index; |
6793 | 4336 |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4337 // Fill the buffer with the quickfix list. |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4338 qf_fill_buffer(qfl, curbuf, NULL, curwin->w_id); |
644 | 4339 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4340 decr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4341 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
4342 curwin->w_cursor.lnum = lnum; |
7 | 4343 curwin->w_cursor.col = 0; |
4344 check_cursor(); | |
14796
74fd69162d50
patch 8.1.0410: the ex_copen() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14790
diff
changeset
|
4345 update_topline(); // scroll to show the line |
7 | 4346 } |
4347 | |
4348 /* | |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4349 * 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
|
4350 */ |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4351 static void |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4352 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
|
4353 { |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4354 win_T *old_curwin = curwin; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4355 |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4356 curwin = win; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4357 curbuf = win->w_buffer; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4358 curwin->w_cursor.lnum = lnum; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4359 curwin->w_cursor.col = 0; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4360 curwin->w_cursor.coladd = 0; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4361 curwin->w_curswant = 0; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4362 update_topline(); // scroll to show the line |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29576
diff
changeset
|
4363 redraw_later(UPD_VALID); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4364 curwin->w_redr_status = TRUE; // update ruler |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4365 curwin = old_curwin; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4366 curbuf = curwin->w_buffer; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4367 } |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4368 |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4369 /* |
9458
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
4370 * :cbottom/:lbottom commands. |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4371 */ |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4372 void |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
4373 ex_cbottom(exarg_T *eap) |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4374 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4375 qf_info_T *qi; |
9458
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
4376 win_T *win; |
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
4377 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4378 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
4379 return; |
9458
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
4380 |
374afcf9d11d
commit https://github.com/vim/vim/commit/537ef08408c50e0c4104d57f74993b3b0ed9560d
Christian Brabandt <cb@256bit.org>
parents:
9432
diff
changeset
|
4381 win = qf_find_win(qi); |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4382 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
|
4383 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
|
4384 } |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4385 |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4386 /* |
7 | 4387 * Return the number of the current entry (line number in the quickfix |
4388 * window). | |
4389 */ | |
4390 linenr_T | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4391 qf_current_entry(win_T *wp) |
7 | 4392 { |
644 | 4393 qf_info_T *qi = &ql_info; |
4394 | |
4395 if (IS_LL_WINDOW(wp)) | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4396 // In the location list window, use the referenced location list |
644 | 4397 qi = wp->w_llist_ref; |
4398 | |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4399 return qf_get_curlist(qi)->qf_index; |
7 | 4400 } |
4401 | |
4402 /* | |
4403 * Update the cursor position in the quickfix window to the current error. | |
4404 * Return TRUE if there is a quickfix window. | |
4405 */ | |
4406 static int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4407 qf_win_pos_update( |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4408 qf_info_T *qi, |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4409 int old_qf_index) // previous qf_index or zero |
7 | 4410 { |
4411 win_T *win; | |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4412 int qf_index = qf_get_curlist(qi)->qf_index; |
7 | 4413 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4414 // Put the cursor on the current error in the quickfix window, so that |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4415 // it's viewable. |
644 | 4416 win = qf_find_win(qi); |
7 | 4417 if (win != NULL |
4418 && qf_index <= win->w_buffer->b_ml.ml_line_count | |
4419 && old_qf_index != qf_index) | |
4420 { | |
4421 if (qf_index > old_qf_index) | |
4422 { | |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4423 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
|
4424 win->w_redraw_bot = qf_index; |
7 | 4425 } |
4426 else | |
4427 { | |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4428 win->w_redraw_top = qf_index; |
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4429 win->w_redraw_bot = old_qf_index; |
7 | 4430 } |
9432
abb72f0b9e06
commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents:
9397
diff
changeset
|
4431 qf_win_goto(win, qf_index); |
7 | 4432 } |
4433 return win != NULL; | |
4434 } | |
4435 | |
4436 /* | |
859 | 4437 * Check whether the given window is displaying the specified quickfix/location |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
4438 * stack. |
859 | 4439 */ |
4440 static int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4441 is_qf_win(win_T *win, qf_info_T *qi) |
859 | 4442 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4443 // A window displaying the quickfix buffer will have the w_llist_ref field |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4444 // set to NULL. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4445 // A window displaying a location list buffer will have the w_llist_ref |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4446 // pointing to the location list. |
859 | 4447 if (bt_quickfix(win->w_buffer)) |
14560
8413e66d00a1
patch 8.1.0293: checks for type of stack is cryptic
Christian Brabandt <cb@256bit.org>
parents:
14552
diff
changeset
|
4448 if ((IS_QF_STACK(qi) && win->w_llist_ref == NULL) |
8413e66d00a1
patch 8.1.0293: checks for type of stack is cryptic
Christian Brabandt <cb@256bit.org>
parents:
14552
diff
changeset
|
4449 || (IS_LL_STACK(qi) && win->w_llist_ref == qi)) |
859 | 4450 return TRUE; |
4451 | |
4452 return FALSE; | |
4453 } | |
4454 | |
4455 /* | |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
4456 * Find a window displaying the quickfix/location stack 'qi' in the current tab |
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
4457 * page. |
644 | 4458 */ |
4459 static win_T * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4460 qf_find_win(qf_info_T *qi) |
644 | 4461 { |
4462 win_T *win; | |
4463 | |
4464 FOR_ALL_WINDOWS(win) | |
859 | 4465 if (is_qf_win(win, qi)) |
13115
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
4466 return win; |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
4467 return NULL; |
644 | 4468 } |
4469 | |
4470 /* | |
859 | 4471 * Find a quickfix buffer. |
26458
824fe105f5b9
patch 8.2.3759: quickfix buffer becomes hidden while still in a window
Bram Moolenaar <Bram@vim.org>
parents:
26364
diff
changeset
|
4472 * Searches in windows opened in all the tab pages. |
7 | 4473 */ |
4474 static buf_T * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4475 qf_find_buf(qf_info_T *qi) |
7 | 4476 { |
859 | 4477 tabpage_T *tp; |
644 | 4478 win_T *win; |
4479 | |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4480 if (qi->qf_bufnr != INVALID_QFBUFNR) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4481 { |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4482 buf_T *qfbuf; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4483 qfbuf = buflist_findnr(qi->qf_bufnr); |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4484 if (qfbuf != NULL) |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4485 return qfbuf; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4486 // buffer is no longer present |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4487 qi->qf_bufnr = INVALID_QFBUFNR; |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4488 } |
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
4489 |
859 | 4490 FOR_ALL_TAB_WINDOWS(tp, win) |
4491 if (is_qf_win(win, qi)) | |
4492 return win->w_buffer; | |
4493 | |
4494 return NULL; | |
7 | 4495 } |
4496 | |
4497 /* | |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4498 * Process the 'quickfixtextfunc' option value. |
26175
6b4f017d7005
patch 8.2.3619: cannot use a lambda for 'operatorfunc'
Bram Moolenaar <Bram@vim.org>
parents:
26026
diff
changeset
|
4499 * Returns OK or FAIL. |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4500 */ |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4501 int |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4502 qf_process_qftf_option(void) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4503 { |
26175
6b4f017d7005
patch 8.2.3619: cannot use a lambda for 'operatorfunc'
Bram Moolenaar <Bram@vim.org>
parents:
26026
diff
changeset
|
4504 return option_set_callback_func(p_qftf, &qftf_cb); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4505 } |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4506 |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4507 /* |
23203
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4508 * Update the w:quickfix_title variable in the quickfix/location list window in |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4509 * all the tab pages. |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4510 */ |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4511 static void |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4512 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
|
4513 { |
23203
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4514 qf_list_T *qfl = qf_get_curlist(qi); |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4515 tabpage_T *tp; |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4516 win_T *win; |
23203
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4517 win_T *save_curwin = curwin; |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4518 |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4519 FOR_ALL_TAB_WINDOWS(tp, win) |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4520 { |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4521 if (is_qf_win(win, qi)) |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4522 { |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4523 curwin = win; |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4524 qf_set_title_var(qfl); |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4525 } |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4526 } |
db97415750ce
patch 8.2.2147: quickfix window title not updated in all tab pages
Bram Moolenaar <Bram@vim.org>
parents:
23045
diff
changeset
|
4527 curwin = save_curwin; |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4528 } |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4529 |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4530 /* |
7 | 4531 * Find the quickfix buffer. If it exists, update the contents. |
4532 */ | |
4533 static void | |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4534 qf_update_buffer(qf_info_T *qi, qfline_T *old_last) |
7 | 4535 { |
4536 buf_T *buf; | |
3016 | 4537 win_T *win; |
7 | 4538 aco_save_T aco; |
4539 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4540 // Check if a buffer for the quickfix list exists. Update it. |
644 | 4541 buf = qf_find_buf(qi); |
7 | 4542 if (buf != NULL) |
4543 { | |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4544 linenr_T old_line_count = buf->b_ml.ml_line_count; |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4545 int qf_winid = 0; |
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4546 |
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4547 if (IS_LL_STACK(qi)) |
24962
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4548 { |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4549 if (curwin->w_llist == qi) |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4550 win = curwin; |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4551 else |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4552 { |
27873
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
4553 // Find the file window (non-quickfix) with this location list |
24962
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4554 win = qf_find_win_with_loclist(qi); |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4555 if (win == NULL) |
27873
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
4556 // File window is not found. Find the location list window. |
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
4557 win = qf_find_win(qi); |
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
4558 if (win == NULL) |
24962
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4559 return; |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4560 } |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4561 qf_winid = win->w_id; |
437b8be91993
patch 8.2.3018: 'quickfixtextfunc' formatting is lost when switching buffers
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
4562 } |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4563 |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4564 if (old_last == NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4565 // set curwin/curbuf to buf and save a few things |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4566 aucmd_prepbuf(&aco, buf); |
7 | 4567 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
4568 qf_update_win_titlevar(qi); |
3016 | 4569 |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4570 qf_fill_buffer(qf_get_curlist(qi), buf, old_last, qf_winid); |
11705
c43118ecb0a3
patch 8.0.0735: no indication that the quickfix window/buffer changed
Christian Brabandt <cb@256bit.org>
parents:
11700
diff
changeset
|
4571 ++CHANGEDTICK(buf); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4572 |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4573 if (old_last == NULL) |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4574 { |
8932
25c2031e9f9f
commit https://github.com/vim/vim/commit/c1808d5822ed9534ef7f0fe509b15bee92a5cc28
Christian Brabandt <cb@256bit.org>
parents:
8751
diff
changeset
|
4575 (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
|
4576 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4577 // restore curwin/curbuf and a few other things |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4578 aucmd_restbuf(&aco); |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4579 } |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4580 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4581 // Only redraw when added lines are visible. This avoids flickering |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4582 // when the added lines are not visible. |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4583 if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline) |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29576
diff
changeset
|
4584 redraw_buf_later(buf, UPD_NOT_VALID); |
7 | 4585 } |
4586 } | |
4587 | |
6793 | 4588 /* |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4589 * Add an error line to the quickfix buffer. |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4590 */ |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4591 static int |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4592 qf_buf_add_line( |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4593 buf_T *buf, // quickfix window buffer |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4594 linenr_T lnum, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4595 qfline_T *qfp, |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4596 char_u *dirname, |
22454
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4597 int first_bufline, |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4598 char_u *qftf_str) |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4599 { |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4600 int len; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4601 buf_T *errbuf; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4602 |
26771
fc859aea8cec
patch 8.2.3914: various spelling mistakes in comments
Bram Moolenaar <Bram@vim.org>
parents:
26602
diff
changeset
|
4603 // If the 'quickfixtextfunc' function returned a non-empty custom string |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4604 // for this entry, then use it. |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4605 if (qftf_str != NULL && *qftf_str != NUL) |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4606 vim_strncpy(IObuff, qftf_str, IOSIZE - 1); |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4607 else |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4608 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4609 if (qfp->qf_module != NULL) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4610 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4611 vim_strncpy(IObuff, qfp->qf_module, IOSIZE - 1); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4612 len = (int)STRLEN(IObuff); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4613 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4614 else if (qfp->qf_fnum != 0 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4615 && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4616 && errbuf->b_fname != NULL) |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4617 { |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4618 if (qfp->qf_type == 1) // :helpgrep |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4619 vim_strncpy(IObuff, gettail(errbuf->b_fname), IOSIZE - 1); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4620 else |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4621 { |
22454
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4622 // Shorten the file name if not done already. |
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4623 // For optimization, do this only for the first entry in a |
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4624 // buffer. |
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4625 if (first_bufline && (errbuf->b_sfname == NULL |
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4626 || mch_isFullName(errbuf->b_sfname))) |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4627 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4628 if (*dirname == NUL) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4629 mch_dirname(dirname, MAXPATHL); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4630 shorten_buf_fname(errbuf, dirname, FALSE); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4631 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4632 vim_strncpy(IObuff, errbuf->b_fname, IOSIZE - 1); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4633 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4634 len = (int)STRLEN(IObuff); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4635 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4636 else |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4637 len = 0; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4638 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4639 if (len < IOSIZE - 1) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4640 IObuff[len++] = '|'; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4641 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4642 if (qfp->qf_lnum > 0) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4643 { |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
4644 qf_range_text(qfp, IObuff + len, IOSIZE - len); |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4645 len += (int)STRLEN(IObuff + len); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4646 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4647 vim_snprintf((char *)IObuff + len, IOSIZE - len, "%s", |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4648 (char *)qf_types(qfp->qf_type, qfp->qf_nr)); |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4649 len += (int)STRLEN(IObuff + len); |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4650 } |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4651 else if (qfp->qf_pattern != NULL) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4652 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4653 qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4654 len += (int)STRLEN(IObuff + len); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4655 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4656 if (len < IOSIZE - 2) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4657 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4658 IObuff[len++] = '|'; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4659 IObuff[len++] = ' '; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4660 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4661 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4662 // Remove newlines and leading whitespace from the text. |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4663 // For an unrecognized line keep the indent, the compiler may |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4664 // mark a word with ^^^^. |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4665 qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4666 IObuff + len, IOSIZE - len); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
4667 } |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4668 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4669 if (ml_append_buf(buf, lnum, IObuff, |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4670 (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL) |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4671 return FAIL; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4672 |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4673 return OK; |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4674 } |
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4675 |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4676 /* |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4677 * Call the 'quickfixtextfunc' function to get the list of lines to display in |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4678 * the quickfix window for the entries 'start_idx' to 'end_idx'. |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4679 */ |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4680 static list_T * |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4681 call_qftf_func(qf_list_T *qfl, int qf_winid, long start_idx, long end_idx) |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4682 { |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4683 callback_T *cb = &qftf_cb; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4684 list_T *qftf_list = NULL; |
29843
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4685 static int recursive = FALSE; |
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4686 |
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4687 if (recursive) |
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4688 return NULL; // this doesn't work properly recursively |
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4689 recursive = TRUE; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4690 |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4691 // If 'quickfixtextfunc' is set, then use the user-supplied function to get |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4692 // the text to display. Use the local value of 'quickfixtextfunc' if it is |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4693 // set. |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
4694 if (qfl->qf_qftf_cb.cb_name != NULL) |
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
4695 cb = &qfl->qf_qftf_cb; |
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
4696 if (cb->cb_name != NULL) |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4697 { |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4698 typval_T args[1]; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4699 dict_T *d; |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4700 typval_T rettv; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4701 |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4702 // create the dict argument |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4703 if ((d = dict_alloc_lock(VAR_FIXED)) == NULL) |
29843
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4704 { |
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4705 recursive = FALSE; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4706 return NULL; |
29843
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4707 } |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4708 dict_add_number(d, "quickfix", (long)IS_QF_LIST(qfl)); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4709 dict_add_number(d, "winid", (long)qf_winid); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4710 dict_add_number(d, "id", (long)qfl->qf_id); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4711 dict_add_number(d, "start_idx", start_idx); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4712 dict_add_number(d, "end_idx", end_idx); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4713 ++d->dv_refcount; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4714 args[0].v_type = VAR_DICT; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4715 args[0].vval.v_dict = d; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4716 |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4717 qftf_list = NULL; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4718 if (call_callback(cb, 0, &rettv, 1, args) != FAIL) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4719 { |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4720 if (rettv.v_type == VAR_LIST) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4721 { |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4722 qftf_list = rettv.vval.v_list; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4723 qftf_list->lv_refcount++; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4724 } |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4725 clear_tv(&rettv); |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4726 } |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4727 dict_unref(d); |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4728 } |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4729 |
29843
256418aa72ed
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
4730 recursive = FALSE; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4731 return qftf_list; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4732 } |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4733 |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4734 /* |
7 | 4735 * Fill current buffer with quickfix errors, replacing any previous contents. |
4736 * 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
|
4737 * 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
|
4738 * 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
|
4739 * ml_delete() is used and autocommands will be triggered. |
7 | 4740 */ |
4741 static void | |
20762
68170c89e355
patch 8.2.0933: 'quickfixtextfunc' does not get window ID of location list
Bram Moolenaar <Bram@vim.org>
parents:
20729
diff
changeset
|
4742 qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last, int qf_winid) |
7 | 4743 { |
230 | 4744 linenr_T lnum; |
4745 qfline_T *qfp; | |
4746 int old_KeyTyped = KeyTyped; | |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4747 list_T *qftf_list = NULL; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4748 listitem_T *qftf_li = NULL; |
7 | 4749 |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4750 if (old_last == NULL) |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4751 { |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4752 if (buf != curbuf) |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4753 { |
10359
66f1b5bf3fa6
commit https://github.com/vim/vim/commit/95f096030ed1a8afea028f2ea295d6f6a70f466f
Christian Brabandt <cb@256bit.org>
parents:
10349
diff
changeset
|
4754 internal_error("qf_fill_buffer()"); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4755 return; |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4756 } |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4757 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4758 // delete all existing lines |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4759 while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0) |
20599
d571231175b4
patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
4760 (void)ml_delete((linenr_T)1); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4761 } |
7 | 4762 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4763 // Check if there is anything to display |
29968
b01273bbc75e
patch 9.0.0322: crash when no errors and 'quickfixtextfunc' is set
Bram Moolenaar <Bram@vim.org>
parents:
29896
diff
changeset
|
4764 if (qfl != NULL && qfl->qf_start != NULL) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4765 { |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4766 char_u dirname[MAXPATHL]; |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4767 int invalid_val = FALSE; |
22454
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4768 int prev_bufnr = -1; |
13819
31bb8e1f7625
patch 8.0.1781: file names in quickfix window are not shortened
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
4769 |
31bb8e1f7625
patch 8.0.1781: file names in quickfix window are not shortened
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
4770 *dirname = NUL; |
31bb8e1f7625
patch 8.0.1781: file names in quickfix window are not shortened
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
4771 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4772 // Add one line for each error |
22870
69b48d2822ec
patch 8.2.1982: quickfix window now updated when adding invalid entries
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
4773 if (old_last == NULL) |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4774 { |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4775 qfp = qfl->qf_start; |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4776 lnum = 0; |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4777 } |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4778 else |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4779 { |
22870
69b48d2822ec
patch 8.2.1982: quickfix window now updated when adding invalid entries
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
4780 if (old_last->qf_next != NULL) |
69b48d2822ec
patch 8.2.1982: quickfix window now updated when adding invalid entries
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
4781 qfp = old_last->qf_next; |
69b48d2822ec
patch 8.2.1982: quickfix window now updated when adding invalid entries
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
4782 else |
69b48d2822ec
patch 8.2.1982: quickfix window now updated when adding invalid entries
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
4783 qfp = old_last; |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4784 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
|
4785 } |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4786 |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4787 qftf_list = call_qftf_func(qfl, qf_winid, (long)(lnum + 1), |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4788 (long)qfl->qf_count); |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4789 if (qftf_list != NULL) |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4790 qftf_li = qftf_list->lv_first; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4791 |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4792 while (lnum < qfl->qf_count) |
7 | 4793 { |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4794 char_u *qftf_str = NULL; |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4795 |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4796 // Use the text supplied by the user defined function (if any). |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4797 // If the returned value is not string, then ignore the rest |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4798 // of the returned values and use the default. |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4799 if (qftf_li != NULL && !invalid_val) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4800 { |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4801 qftf_str = tv_get_string_chk(&qftf_li->li_tv); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4802 if (qftf_str == NULL) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4803 invalid_val = TRUE; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
4804 } |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4805 |
22454
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4806 if (qf_buf_add_line(buf, lnum, qfp, dirname, |
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4807 prev_bufnr != qfp->qf_fnum, qftf_str) == FAIL) |
7 | 4808 break; |
13992
710b1bb82f2c
patch 8.1.0014: qf_init_ext() is too long
Christian Brabandt <cb@256bit.org>
parents:
13984
diff
changeset
|
4809 |
22454
849c6f766b19
patch 8.2.1775: MS-Windows: adding a long quickfix list is slow
Bram Moolenaar <Bram@vim.org>
parents:
22256
diff
changeset
|
4810 prev_bufnr = qfp->qf_fnum; |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4811 ++lnum; |
7 | 4812 qfp = qfp->qf_next; |
9195
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
4813 if (qfp == NULL) |
543f068f3706
commit https://github.com/vim/vim/commit/83e6d7ac6a1c2a0cb5ee6c8420a5dc792f1d5ffa
Christian Brabandt <cb@256bit.org>
parents:
9175
diff
changeset
|
4814 break; |
20814
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4815 |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4816 if (qftf_li != NULL) |
f23c6543a54d
patch 8.2.0959: using 'quickfixtextfunc' is a bit slow
Bram Moolenaar <Bram@vim.org>
parents:
20764
diff
changeset
|
4817 qftf_li = qftf_li->li_next; |
7 | 4818 } |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4819 |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4820 if (old_last == NULL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4821 // Delete the empty line which is now at the end |
20599
d571231175b4
patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
4822 (void)ml_delete(lnum + 1); |
7 | 4823 } |
4824 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4825 // correct cursor position |
7 | 4826 check_lnums(TRUE); |
4827 | |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4828 if (old_last == NULL) |
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4829 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4830 // Set the 'filetype' to "qf" each time after filling the buffer. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4831 // This resembles reading a file into a buffer, it's more logical when |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4832 // using autocommands. |
11589
39787def24bb
patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents:
11549
diff
changeset
|
4833 ++curbuf_lock; |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4834 set_option_value_give_err((char_u *)"ft", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
4835 0L, (char_u *)"qf", OPT_LOCAL); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4836 curbuf->b_p_ma = FALSE; |
7 | 4837 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4838 keep_filetype = TRUE; // don't detect 'filetype' |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4839 apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL, |
7 | 4840 FALSE, curbuf); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4841 apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL, |
7 | 4842 FALSE, curbuf); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4843 keep_filetype = FALSE; |
11589
39787def24bb
patch 8.0.0677: setting 'filetype' may switch buffers
Christian Brabandt <cb@256bit.org>
parents:
11549
diff
changeset
|
4844 --curbuf_lock; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
4845 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4846 // make sure it will be redrawn |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29576
diff
changeset
|
4847 redraw_curbuf_later(UPD_NOT_VALID); |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
4848 } |
7 | 4849 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
4850 // Restore KeyTyped, setting 'filetype' may reset it. |
7 | 4851 KeyTyped = old_KeyTyped; |
4852 } | |
4853 | |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
4854 /* |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
4855 * For every change made to the quickfix list, update the changed tick. |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
4856 */ |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
4857 static void |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4858 qf_list_changed(qf_list_T *qfl) |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4859 { |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
4860 qfl->qf_changedtick++; |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
4861 } |
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
4862 |
7 | 4863 /* |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4864 * Return the quickfix/location list number with the given identifier. |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4865 * Returns -1 if list is not found. |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4866 */ |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4867 static int |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4868 qf_id2nr(qf_info_T *qi, int_u qfid) |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4869 { |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4870 int qf_idx; |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4871 |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4872 for (qf_idx = 0; qf_idx < qi->qf_listcount; qf_idx++) |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4873 if (qi->qf_lists[qf_idx].qf_id == qfid) |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4874 return qf_idx; |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4875 return INVALID_QFIDX; |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4876 } |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4877 |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
4878 /* |
14495
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4879 * If the current list is not "save_qfid" and we can find the list with that ID |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4880 * then make it the current list. |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4881 * This is used when autocommands may have changed the current list. |
14507
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4882 * Returns OK if successfully restored the list. Returns FAIL if the list with |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4883 * the specified identifier (save_qfid) is not found in the stack. |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4884 */ |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4885 static int |
14495
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4886 qf_restore_list(qf_info_T *qi, int_u save_qfid) |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4887 { |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4888 int curlist; |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4889 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
4890 if (qf_get_curlist(qi)->qf_id != save_qfid) |
14495
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4891 { |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4892 curlist = qf_id2nr(qi, save_qfid); |
14507
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4893 if (curlist < 0) |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4894 // list is not present |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4895 return FAIL; |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4896 qi->qf_curlist = curlist; |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4897 } |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4898 return OK; |
14495
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4899 } |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4900 |
178162aeebeb
patch 8.1.0261: Coverity complains about a negative array index
Christian Brabandt <cb@256bit.org>
parents:
14491
diff
changeset
|
4901 /* |
14469
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4902 * Jump to the first entry if there is one. |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4903 */ |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4904 static void |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4905 qf_jump_first(qf_info_T *qi, int_u save_qfid, int forceit) |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4906 { |
14507
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4907 if (qf_restore_list(qi, save_qfid) == FAIL) |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4908 return; |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4909 |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
4910 // Autocommands might have cleared the list, check for that. |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
4911 if (!qf_list_empty(qf_get_curlist(qi))) |
14469
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4912 qf_jump(qi, 0, 0, forceit); |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4913 } |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4914 |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
4915 /* |
41 | 4916 * Return TRUE when using ":vimgrep" for ":grep". |
4917 */ | |
4918 int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4919 grep_internal(cmdidx_T cmdidx) |
41 | 4920 { |
661 | 4921 return ((cmdidx == CMD_grep |
4922 || cmdidx == CMD_lgrep | |
4923 || cmdidx == CMD_grepadd | |
4924 || cmdidx == CMD_lgrepadd) | |
41 | 4925 && STRCMP("internal", |
4926 *curbuf->b_p_gp == NUL ? p_gp : curbuf->b_p_gp) == 0); | |
4927 } | |
4928 | |
4929 /* | |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4930 * Return the make/grep autocmd name. |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4931 */ |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4932 static char_u * |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4933 make_get_auname(cmdidx_T cmdidx) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4934 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4935 switch (cmdidx) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4936 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4937 case CMD_make: return (char_u *)"make"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4938 case CMD_lmake: return (char_u *)"lmake"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4939 case CMD_grep: return (char_u *)"grep"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4940 case CMD_lgrep: return (char_u *)"lgrep"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4941 case CMD_grepadd: return (char_u *)"grepadd"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4942 case CMD_lgrepadd: return (char_u *)"lgrepadd"; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4943 default: return NULL; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4944 } |
7 | 4945 } |
4946 | |
4947 /* | |
4948 * Return the name for the errorfile, in allocated memory. | |
4949 * Find a new unique name when 'makeef' contains "##". | |
4950 * Returns NULL for error. | |
4951 */ | |
4952 static char_u * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
4953 get_mef_name(void) |
7 | 4954 { |
4955 char_u *p; | |
4956 char_u *name; | |
4957 static int start = -1; | |
4958 static int off = 0; | |
4959 #ifdef HAVE_LSTAT | |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9379
diff
changeset
|
4960 stat_T sb; |
7 | 4961 #endif |
4962 | |
4963 if (*p_mef == NUL) | |
4964 { | |
6721 | 4965 name = vim_tempname('e', FALSE); |
7 | 4966 if (name == NULL) |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
4967 emsg(_(e_cant_get_temp_file_name)); |
7 | 4968 return name; |
4969 } | |
4970 | |
4971 for (p = p_mef; *p; ++p) | |
4972 if (p[0] == '#' && p[1] == '#') | |
4973 break; | |
4974 | |
4975 if (*p == NUL) | |
4976 return vim_strsave(p_mef); | |
4977 | |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4978 // Keep trying until the name doesn't exist yet. |
7 | 4979 for (;;) |
4980 { | |
4981 if (start == -1) | |
4982 start = mch_get_pid(); | |
4983 else | |
4984 off += 19; | |
4985 | |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
4986 name = alloc_id(STRLEN(p_mef) + 30, aid_qf_mef_name); |
7 | 4987 if (name == NULL) |
4988 break; | |
4989 STRCPY(name, p_mef); | |
4990 sprintf((char *)name + (p - p_mef), "%d%d", start, off); | |
4991 STRCAT(name, p + 2); | |
4992 if (mch_getperm(name) < 0 | |
4993 #ifdef HAVE_LSTAT | |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
4994 // Don't accept a symbolic link, it's a security risk. |
7 | 4995 && mch_lstat((char *)name, &sb) < 0 |
4996 #endif | |
4997 ) | |
4998 break; | |
4999 vim_free(name); | |
5000 } | |
5001 return name; | |
5002 } | |
5003 | |
5004 /* | |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5005 * Form the complete command line to invoke 'make'/'grep'. Quote the command |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5006 * using 'shellquote' and append 'shellpipe'. Echo the fully formed command. |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5007 */ |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5008 static char_u * |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5009 make_get_fullcmd(char_u *makecmd, char_u *fname) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5010 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5011 char_u *cmd; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5012 unsigned len; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5013 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5014 len = (unsigned)STRLEN(p_shq) * 2 + (unsigned)STRLEN(makecmd) + 1; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5015 if (*p_sp != NUL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5016 len += (unsigned)STRLEN(p_sp) + (unsigned)STRLEN(fname) + 3; |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
5017 cmd = alloc_id(len, aid_qf_makecmd); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5018 if (cmd == NULL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5019 return NULL; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5020 sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)makecmd, |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5021 (char *)p_shq); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5022 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5023 // If 'shellpipe' empty: don't redirect to 'errorfile'. |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5024 if (*p_sp != NUL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5025 append_redir(cmd, len, p_sp, fname); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5026 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5027 // Display the fully formed command. Output a newline if there's something |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5028 // else than the :make command that was typed (in which case the cursor is |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5029 // in column 0). |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5030 if (msg_col == 0) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5031 msg_didout = FALSE; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5032 msg_start(); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15490
diff
changeset
|
5033 msg_puts(":!"); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5034 msg_outtrans(cmd); // show what we are doing |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5035 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5036 return cmd; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5037 } |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5038 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5039 /* |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5040 * Used for ":make", ":lmake", ":grep", ":lgrep", ":grepadd", and ":lgrepadd" |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5041 */ |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5042 void |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5043 ex_make(exarg_T *eap) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5044 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5045 char_u *fname; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5046 char_u *cmd; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5047 char_u *enc = NULL; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5048 win_T *wp = NULL; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5049 qf_info_T *qi = &ql_info; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5050 int res; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5051 char_u *au_name = NULL; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5052 int_u save_qfid; |
27938
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5053 char_u *errorformat = p_efm; |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5054 int newlist = TRUE; |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5055 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5056 // Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5057 if (grep_internal(eap->cmdidx)) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5058 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5059 ex_vimgrep(eap); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5060 return; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5061 } |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5062 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5063 au_name = make_get_auname(eap->cmdidx); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5064 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5065 curbuf->b_fname, TRUE, curbuf)) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5066 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5067 #ifdef FEAT_EVAL |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5068 if (aborting()) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5069 return; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5070 #endif |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5071 } |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5072 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5073 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5074 if (is_loclist_cmd(eap->cmdidx)) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5075 wp = curwin; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5076 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5077 autowrite_all(); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5078 fname = get_mef_name(); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5079 if (fname == NULL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5080 return; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5081 mch_remove(fname); // in case it's not unique |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5082 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5083 cmd = make_get_fullcmd(eap->arg, fname); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5084 if (cmd == NULL) |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
5085 { |
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
5086 vim_free(fname); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5087 return; |
27897
2a2c0958a913
patch 8.2.4474: memory allocation failures not tested in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27873
diff
changeset
|
5088 } |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5089 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5090 // let the shell know if we are redirecting output or not |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5091 do_shell(cmd, *p_sp != NUL ? SHELL_DOOUT : 0); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5092 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5093 #ifdef AMIGA |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5094 out_flush(); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5095 // read window status report and redraw before message |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5096 (void)char_avail(); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5097 #endif |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5098 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5099 incr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5100 |
27938
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5101 if (eap->cmdidx != CMD_make && eap->cmdidx != CMD_lmake) |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5102 errorformat = p_gefm; |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5103 if (eap->cmdidx == CMD_grepadd || eap->cmdidx == CMD_lgrepadd) |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5104 newlist = FALSE; |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5105 |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5106 res = qf_init(wp, fname, errorformat, newlist, qf_cmdtitle(*eap->cmdlinep), |
b65a50d2fa4f
patch 8.2.4494: the find_tags() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27897
diff
changeset
|
5107 enc); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5108 if (wp != NULL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5109 { |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5110 qi = GET_LOC_LIST(wp); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5111 if (qi == NULL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5112 goto cleanup; |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5113 } |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5114 if (res >= 0) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5115 qf_list_changed(qf_get_curlist(qi)); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5116 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5117 // Remember the current quickfix list identifier, so that we can |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5118 // check for autocommands changing the current quickfix list. |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5119 save_qfid = qf_get_curlist(qi)->qf_id; |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5120 if (au_name != NULL) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5121 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5122 curbuf->b_fname, TRUE, curbuf); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5123 if (res > 0 && !eap->forceit && qflist_valid(wp, save_qfid)) |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5124 // display the first error |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5125 qf_jump_first(qi, save_qfid, FALSE); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5126 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5127 cleanup: |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5128 decr_quickfix_busy(); |
14852
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5129 mch_remove(fname); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5130 vim_free(fname); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5131 vim_free(cmd); |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5132 } |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5133 |
3c8a4b25427c
patch 8.1.0438: the ex_make() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14844
diff
changeset
|
5134 /* |
16515
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5135 * Returns the number of entries in the current quickfix/location list. |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5136 */ |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5137 int |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5138 qf_get_size(exarg_T *eap) |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5139 { |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5140 qf_info_T *qi; |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5141 |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5142 if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL) |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5143 return 0; |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5144 return qf_get_curlist(qi)->qf_count; |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5145 } |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5146 |
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5147 /* |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5148 * 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
|
5149 */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5150 int |
16515
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16505
diff
changeset
|
5151 qf_get_valid_size(exarg_T *eap) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5152 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5153 qf_info_T *qi; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
5154 qf_list_T *qfl; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5155 qfline_T *qfp; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5156 int i, sz = 0; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5157 int prev_fnum = 0; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5158 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5159 if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5160 return 0; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5161 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5162 qfl = qf_get_curlist(qi); |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5163 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5164 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5165 if (qfp->qf_valid) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5166 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5167 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5168 sz++; // Count all valid entries |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5169 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
|
5170 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5171 // Count the number of files |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5172 sz++; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5173 prev_fnum = qfp->qf_fnum; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5174 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5175 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5176 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5177 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5178 return sz; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5179 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5180 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5181 /* |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5182 * 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
|
5183 * 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
|
5184 */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5185 int |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
5186 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
|
5187 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5188 qf_info_T *qi; |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5189 |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5190 if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5191 return 0; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5192 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5193 return qf_get_curlist(qi)->qf_index; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5194 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5195 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5196 /* |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5197 * 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
|
5198 * 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
|
5199 */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5200 int |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
5201 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
|
5202 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5203 qf_info_T *qi; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5204 qf_list_T *qfl; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5205 qfline_T *qfp; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5206 int i, eidx = 0; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5207 int prev_fnum = 0; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5208 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5209 if ((qi = qf_cmd_get_stack(eap, FALSE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5210 return 1; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5211 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5212 qfl = qf_get_curlist(qi); |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5213 qfp = qfl->qf_start; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5214 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5215 // check if the list has valid errors |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5216 if (!qf_list_has_valid_entries(qfl)) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5217 return 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5218 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5219 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
|
5220 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5221 if (qfp->qf_valid) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5222 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5223 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
|
5224 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5225 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
|
5226 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5227 // Count the number of files |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5228 eidx++; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5229 prev_fnum = qfp->qf_fnum; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5230 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5231 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5232 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5233 eidx++; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5234 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5235 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5236 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5237 return eidx ? eidx : 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5238 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5239 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5240 /* |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5241 * 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
|
5242 * 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
|
5243 * 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
|
5244 * 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
|
5245 */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5246 static int |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
5247 qf_get_nth_valid_entry(qf_list_T *qfl, int n, int fdo) |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
5248 { |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
5249 qfline_T *qfp; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5250 int i, eidx; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5251 int prev_fnum = 0; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5252 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5253 // check if the list has valid errors |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5254 if (!qf_list_has_valid_entries(qfl)) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5255 return 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5256 |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
5257 eidx = 0; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
5258 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5259 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5260 if (qfp->qf_valid) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5261 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5262 if (fdo) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5263 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5264 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
|
5265 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5266 // Count the number of files |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5267 eidx++; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5268 prev_fnum = qfp->qf_fnum; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5269 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5270 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5271 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5272 eidx++; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5273 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5274 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5275 if (eidx == n) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5276 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5277 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5278 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5279 if (i <= qfl->qf_count) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5280 return i; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5281 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5282 return 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5283 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5284 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5285 /* |
7 | 5286 * ":cc", ":crewind", ":cfirst" and ":clast". |
644 | 5287 * ":ll", ":lrewind", ":lfirst" and ":llast". |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5288 * ":cdo", ":ldo", ":cfdo" and ":lfdo" |
7 | 5289 */ |
5290 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
5291 ex_cc(exarg_T *eap) |
7 | 5292 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5293 qf_info_T *qi; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5294 int errornr; |
659 | 5295 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5296 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5297 return; |
644 | 5298 |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5299 if (eap->addr_count > 0) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5300 errornr = (int)eap->line2; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5301 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5302 { |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5303 switch (eap->cmdidx) |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5304 { |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5305 case CMD_cc: case CMD_ll: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5306 errornr = 0; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5307 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5308 case CMD_crewind: case CMD_lrewind: case CMD_cfirst: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5309 case CMD_lfirst: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5310 errornr = 1; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5311 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5312 default: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5313 errornr = 32767; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5314 } |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5315 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5316 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5317 // For cdo and ldo commands, jump to the nth valid error. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5318 // For cfdo and lfdo commands, jump to the nth valid file entry. |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
5319 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
5320 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5321 errornr = qf_get_nth_valid_entry(qf_get_curlist(qi), |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5322 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
|
5323 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
|
5324 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5325 qf_jump(qi, 0, errornr, eap->forceit); |
7 | 5326 } |
5327 | |
5328 /* | |
5329 * ":cnext", ":cnfile", ":cNext" and ":cprevious". | |
644 | 5330 * ":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
|
5331 * Also, used by ":cdo", ":ldo", ":cfdo" and ":lfdo" commands. |
7 | 5332 */ |
5333 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
5334 ex_cnext(exarg_T *eap) |
7 | 5335 { |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5336 qf_info_T *qi; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5337 int errornr; |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5338 int dir; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5339 |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5340 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
5341 return; |
644 | 5342 |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
5343 if (eap->addr_count > 0 |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
5344 && (eap->cmdidx != CMD_cdo && eap->cmdidx != CMD_ldo |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
5345 && eap->cmdidx != CMD_cfdo && eap->cmdidx != CMD_lfdo)) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5346 errornr = (int)eap->line2; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5347 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5348 errornr = 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
6853
diff
changeset
|
5349 |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5350 // Depending on the command jump to either next or previous entry/file. |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5351 switch (eap->cmdidx) |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5352 { |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5353 case CMD_cnext: case CMD_lnext: case CMD_cdo: case CMD_ldo: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5354 dir = FORWARD; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5355 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5356 case CMD_cprevious: case CMD_lprevious: case CMD_cNext: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5357 case CMD_lNext: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5358 dir = BACKWARD; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5359 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5360 case CMD_cnfile: case CMD_lnfile: case CMD_cfdo: case CMD_lfdo: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5361 dir = FORWARD_FILE; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5362 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5363 case CMD_cpfile: case CMD_lpfile: case CMD_cNfile: case CMD_lNfile: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5364 dir = BACKWARD_FILE; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5365 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5366 default: |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5367 dir = FORWARD; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5368 break; |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5369 } |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5370 |
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5371 qf_jump(qi, dir, errornr, eap->forceit); |
7 | 5372 } |
5373 | |
5374 /* | |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5375 * Find the first entry in the quickfix list 'qfl' from buffer 'bnr'. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5376 * The index of the entry is stored in 'errornr'. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5377 * Returns NULL if an entry is not found. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5378 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5379 static qfline_T * |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5380 qf_find_first_entry_in_buf(qf_list_T *qfl, int bnr, int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5381 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5382 qfline_T *qfp = NULL; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5383 int idx = 0; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5384 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5385 // Find the first entry in this file |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5386 FOR_ALL_QFL_ITEMS(qfl, qfp, idx) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5387 if (qfp->qf_fnum == bnr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5388 break; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5389 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5390 *errornr = idx; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5391 return qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5392 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5393 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5394 /* |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5395 * Find the first quickfix entry on the same line as 'entry'. Updates 'errornr' |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5396 * with the error number for the first entry. Assumes the entries are sorted in |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5397 * the quickfix list by line number. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5398 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5399 static qfline_T * |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5400 qf_find_first_entry_on_line(qfline_T *entry, int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5401 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5402 while (!got_int |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5403 && entry->qf_prev != NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5404 && entry->qf_fnum == entry->qf_prev->qf_fnum |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5405 && entry->qf_lnum == entry->qf_prev->qf_lnum) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5406 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5407 entry = entry->qf_prev; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5408 --*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5409 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5410 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5411 return entry; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5412 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5413 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5414 /* |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5415 * Find the last quickfix entry on the same line as 'entry'. Updates 'errornr' |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5416 * with the error number for the last entry. Assumes the entries are sorted in |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5417 * the quickfix list by line number. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5418 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5419 static qfline_T * |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5420 qf_find_last_entry_on_line(qfline_T *entry, int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5421 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5422 while (!got_int && |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5423 entry->qf_next != NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5424 && entry->qf_fnum == entry->qf_next->qf_fnum |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5425 && entry->qf_lnum == entry->qf_next->qf_lnum) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5426 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5427 entry = entry->qf_next; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5428 ++*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5429 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5430 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5431 return entry; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5432 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5433 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5434 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5435 * Returns TRUE if the specified quickfix entry is |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5436 * after the given line (linewise is TRUE) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5437 * or after the line and column. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5438 */ |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5439 static int |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5440 qf_entry_after_pos(qfline_T *qfp, pos_T *pos, int linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5441 { |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5442 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5443 return qfp->qf_lnum > pos->lnum; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5444 else |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5445 return (qfp->qf_lnum > pos->lnum || |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5446 (qfp->qf_lnum == pos->lnum && qfp->qf_col > pos->col)); |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5447 } |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5448 |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5449 /* |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5450 * Returns TRUE if the specified quickfix entry is |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5451 * before the given line (linewise is TRUE) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5452 * or before the line and column. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5453 */ |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5454 static int |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5455 qf_entry_before_pos(qfline_T *qfp, pos_T *pos, int linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5456 { |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5457 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5458 return qfp->qf_lnum < pos->lnum; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5459 else |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5460 return (qfp->qf_lnum < pos->lnum || |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5461 (qfp->qf_lnum == pos->lnum && qfp->qf_col < pos->col)); |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5462 } |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5463 |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5464 /* |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5465 * Returns TRUE if the specified quickfix entry is |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5466 * on or after the given line (linewise is TRUE) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5467 * or on or after the line and column. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5468 */ |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5469 static int |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5470 qf_entry_on_or_after_pos(qfline_T *qfp, pos_T *pos, int linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5471 { |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5472 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5473 return qfp->qf_lnum >= pos->lnum; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5474 else |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5475 return (qfp->qf_lnum > pos->lnum || |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5476 (qfp->qf_lnum == pos->lnum && qfp->qf_col >= pos->col)); |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5477 } |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5478 |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5479 /* |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5480 * Returns TRUE if the specified quickfix entry is |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5481 * on or before the given line (linewise is TRUE) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5482 * or on or before the line and column. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5483 */ |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5484 static int |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5485 qf_entry_on_or_before_pos(qfline_T *qfp, pos_T *pos, int linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5486 { |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5487 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5488 return qfp->qf_lnum <= pos->lnum; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5489 else |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5490 return (qfp->qf_lnum < pos->lnum || |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5491 (qfp->qf_lnum == pos->lnum && qfp->qf_col <= pos->col)); |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5492 } |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5493 |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5494 /* |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5495 * Find the first quickfix entry after position 'pos' in buffer 'bnr'. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5496 * If 'linewise' is TRUE, returns the entry after the specified line and treats |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5497 * multiple entries on a single line as one. Otherwise returns the entry after |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5498 * the specified line and column. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5499 * 'qfp' points to the very first entry in the buffer and 'errornr' is the |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5500 * index of the very first entry in the quickfix list. |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5501 * Returns NULL if an entry is not found after 'pos'. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5502 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5503 static qfline_T * |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5504 qf_find_entry_after_pos( |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5505 int bnr, |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5506 pos_T *pos, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5507 int linewise, |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5508 qfline_T *qfp, |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5509 int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5510 { |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5511 if (qf_entry_after_pos(qfp, pos, linewise)) |
18498
9e6d5a4abb1c
patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents:
18452
diff
changeset
|
5512 // First entry is after position 'pos' |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5513 return qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5514 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5515 // Find the entry just before or at the position 'pos' |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5516 while (qfp->qf_next != NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5517 && qfp->qf_next->qf_fnum == bnr |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5518 && qf_entry_on_or_before_pos(qfp->qf_next, pos, linewise)) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5519 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5520 qfp = qfp->qf_next; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5521 ++*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5522 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5523 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5524 if (qfp->qf_next == NULL || qfp->qf_next->qf_fnum != bnr) |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5525 // No entries found after position 'pos' |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5526 return NULL; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5527 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5528 // Use the entry just after position 'pos' |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5529 qfp = qfp->qf_next; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5530 ++*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5531 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5532 return qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5533 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5534 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5535 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5536 * Find the first quickfix entry before position 'pos' in buffer 'bnr'. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5537 * If 'linewise' is TRUE, returns the entry before the specified line and |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5538 * treats multiple entries on a single line as one. Otherwise returns the entry |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5539 * before the specified line and column. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5540 * 'qfp' points to the very first entry in the buffer and 'errornr' is the |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5541 * index of the very first entry in the quickfix list. |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5542 * Returns NULL if an entry is not found before 'pos'. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5543 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5544 static qfline_T * |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5545 qf_find_entry_before_pos( |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5546 int bnr, |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5547 pos_T *pos, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5548 int linewise, |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5549 qfline_T *qfp, |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5550 int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5551 { |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5552 // Find the entry just before the position 'pos' |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5553 while (qfp->qf_next != NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5554 && qfp->qf_next->qf_fnum == bnr |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5555 && qf_entry_before_pos(qfp->qf_next, pos, linewise)) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5556 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5557 qfp = qfp->qf_next; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5558 ++*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5559 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5560 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5561 if (qf_entry_on_or_after_pos(qfp, pos, linewise)) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5562 return NULL; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5563 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5564 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5565 // If multiple entries are on the same line, then use the first entry |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5566 qfp = qf_find_first_entry_on_line(qfp, errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5567 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5568 return qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5569 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5570 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5571 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5572 * Find a quickfix entry in 'qfl' closest to position 'pos' in buffer 'bnr' in |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5573 * the direction 'dir'. |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5574 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5575 static qfline_T * |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5576 qf_find_closest_entry( |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5577 qf_list_T *qfl, |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5578 int bnr, |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5579 pos_T *pos, |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5580 int dir, |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5581 int linewise, |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5582 int *errornr) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5583 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5584 qfline_T *qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5585 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5586 *errornr = 0; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5587 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5588 // Find the first entry in this file |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5589 qfp = qf_find_first_entry_in_buf(qfl, bnr, errornr); |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5590 if (qfp == NULL) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5591 return NULL; // no entry in this file |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5592 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5593 if (dir == FORWARD) |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5594 qfp = qf_find_entry_after_pos(bnr, pos, linewise, qfp, errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5595 else |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5596 qfp = qf_find_entry_before_pos(bnr, pos, linewise, qfp, errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5597 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5598 return qfp; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5599 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5600 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5601 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5602 * Get the nth quickfix entry below the specified entry. Searches forward in |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5603 * the list. If linewise is TRUE, then treat multiple entries on a single line |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5604 * as one. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5605 */ |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
5606 static void |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
5607 qf_get_nth_below_entry(qfline_T *entry_arg, int n, int linewise, int *errornr) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
5608 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
5609 qfline_T *entry = entry_arg; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
5610 |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5611 while (n-- > 0 && !got_int) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5612 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5613 int first_errornr = *errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5614 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5615 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5616 // Treat all the entries on the same line in this file as one |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5617 entry = qf_find_last_entry_on_line(entry, errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5618 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5619 if (entry->qf_next == NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5620 || entry->qf_next->qf_fnum != entry->qf_fnum) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5621 { |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5622 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5623 *errornr = first_errornr; |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5624 break; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5625 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5626 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5627 entry = entry->qf_next; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5628 ++*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5629 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5630 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5631 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5632 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5633 * Get the nth quickfix entry above the specified entry. Searches backwards in |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5634 * the list. If linewise is TRUE, then treat multiple entries on a single line |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5635 * as one. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5636 */ |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
5637 static void |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5638 qf_get_nth_above_entry(qfline_T *entry, int n, int linewise, int *errornr) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5639 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5640 while (n-- > 0 && !got_int) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5641 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5642 if (entry->qf_prev == NULL |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5643 || entry->qf_prev->qf_fnum != entry->qf_fnum) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5644 break; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5645 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5646 entry = entry->qf_prev; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5647 --*errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5648 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5649 // If multiple entries are on the same line, then use the first entry |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5650 if (linewise) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5651 entry = qf_find_first_entry_on_line(entry, errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5652 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5653 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5654 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5655 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5656 * Find the n'th quickfix entry adjacent to position 'pos' in buffer 'bnr' in |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5657 * the specified direction. Returns the error number in the quickfix list or 0 |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5658 * if an entry is not found. |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5659 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5660 static int |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5661 qf_find_nth_adj_entry( |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5662 qf_list_T *qfl, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5663 int bnr, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5664 pos_T *pos, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5665 int n, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5666 int dir, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5667 int linewise) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5668 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5669 qfline_T *adj_entry; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5670 int errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5671 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5672 // Find an entry closest to the specified position |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5673 adj_entry = qf_find_closest_entry(qfl, bnr, pos, dir, linewise, &errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5674 if (adj_entry == NULL) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5675 return 0; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5676 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5677 if (--n > 0) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5678 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5679 // Go to the n'th entry in the current buffer |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5680 if (dir == FORWARD) |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
5681 qf_get_nth_below_entry(adj_entry, n, linewise, &errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5682 else |
16978
15bc5a64bd50
patch 8.1.1489: sign order wrong when priority was changed
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
5683 qf_get_nth_above_entry(adj_entry, n, linewise, &errornr); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5684 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5685 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5686 return errornr; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5687 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5688 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5689 /* |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5690 * Jump to a quickfix entry in the current file nearest to the current line or |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5691 * current line/col. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5692 * ":cabove", ":cbelow", ":labove", ":lbelow", ":cafter", ":cbefore", |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5693 * ":lafter" and ":lbefore" commands |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5694 */ |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5695 void |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5696 ex_cbelow(exarg_T *eap) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5697 { |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5698 qf_info_T *qi; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5699 qf_list_T *qfl; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5700 int dir; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5701 int buf_has_flag; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5702 int errornr = 0; |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5703 pos_T pos; |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5704 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5705 if (eap->addr_count > 0 && eap->line2 <= 0) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5706 { |
25064
8f2262c72178
patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
24964
diff
changeset
|
5707 emsg(_(e_invalid_range)); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5708 return; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5709 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5710 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5711 // Check whether the current buffer has any quickfix entries |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5712 if (eap->cmdidx == CMD_cabove || eap->cmdidx == CMD_cbelow |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5713 || eap->cmdidx == CMD_cbefore || eap->cmdidx == CMD_cafter) |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5714 buf_has_flag = BUF_HAS_QF_ENTRY; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5715 else |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5716 buf_has_flag = BUF_HAS_LL_ENTRY; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5717 if (!(curbuf->b_has_qf_entry & buf_has_flag)) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5718 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
5719 emsg(_(e_no_errors)); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5720 return; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5721 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5722 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5723 if ((qi = qf_cmd_get_stack(eap, TRUE)) == NULL) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5724 return; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5725 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5726 qfl = qf_get_curlist(qi); |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5727 // check if the list has valid errors |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5728 if (!qf_list_has_valid_entries(qfl)) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5729 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
5730 emsg(_(e_no_errors)); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5731 return; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5732 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5733 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5734 if (eap->cmdidx == CMD_cbelow |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5735 || eap->cmdidx == CMD_lbelow |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5736 || eap->cmdidx == CMD_cafter |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5737 || eap->cmdidx == CMD_lafter) |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5738 // Forward motion commands |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5739 dir = FORWARD; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5740 else |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5741 dir = BACKWARD; |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5742 |
16543
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5743 pos = curwin->w_cursor; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5744 // A quickfix entry column number is 1 based whereas cursor column |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5745 // number is 0 based. Adjust the column number. |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5746 pos.col++; |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5747 errornr = qf_find_nth_adj_entry(qfl, curbuf->b_fnum, &pos, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5748 eap->addr_count > 0 ? eap->line2 : 0, dir, |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5749 eap->cmdidx == CMD_cbelow |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5750 || eap->cmdidx == CMD_lbelow |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5751 || eap->cmdidx == CMD_cabove |
1d2b3bb35414
patch 8.1.1275: cannot navigate to errors before/after the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
5752 || eap->cmdidx == CMD_labove); |
16505
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5753 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5754 if (errornr > 0) |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5755 qf_jump(qi, 0, errornr, FALSE); |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5756 else |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5757 emsg(_(e_no_more_items)); |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5758 } |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5759 |
28e3ba82d8c8
patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents:
16483
diff
changeset
|
5760 /* |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5761 * Return the autocmd name for the :cfile Ex commands |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5762 */ |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5763 static char_u * |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5764 cfile_get_auname(cmdidx_T cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5765 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5766 switch (cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5767 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5768 case CMD_cfile: return (char_u *)"cfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5769 case CMD_cgetfile: return (char_u *)"cgetfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5770 case CMD_caddfile: return (char_u *)"caddfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5771 case CMD_lfile: return (char_u *)"lfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5772 case CMD_lgetfile: return (char_u *)"lgetfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5773 case CMD_laddfile: return (char_u *)"laddfile"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5774 default: return NULL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5775 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5776 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5777 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5778 /* |
446 | 5779 * ":cfile"/":cgetfile"/":caddfile" commands. |
644 | 5780 * ":lfile"/":lgetfile"/":laddfile" commands. |
7 | 5781 */ |
5782 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
5783 ex_cfile(exarg_T *eap) |
7 | 5784 { |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
5785 char_u *enc = NULL; |
644 | 5786 win_T *wp = NULL; |
659 | 5787 qf_info_T *qi = &ql_info; |
3404 | 5788 char_u *au_name = NULL; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5789 int_u save_qfid = 0; // init for gcc |
12954
49e136457c66
patch 8.0.1353: QuickFixCmdPost is not used consistently
Christian Brabandt <cb@256bit.org>
parents:
12912
diff
changeset
|
5790 int res; |
644 | 5791 |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5792 au_name = cfile_get_auname(eap->cmdidx); |
18452
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5793 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5794 NULL, FALSE, curbuf)) |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5795 { |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5796 #ifdef FEAT_EVAL |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5797 if (aborting()) |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5798 return; |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5799 #endif |
0ac9e720a56e
patch 8.1.2220: :cfile does not abort like other quickfix commands
Bram Moolenaar <Bram@vim.org>
parents:
18358
diff
changeset
|
5800 } |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
5801 |
11063
e71d3bdf3bc3
patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents:
10379
diff
changeset
|
5802 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; |
2296
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5803 #ifdef FEAT_BROWSE |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
5804 if (cmdmod.cmod_flags & CMOD_BROWSE) |
2296
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5805 { |
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5806 char_u *browse_file = do_browse(0, (char_u *)_("Error file"), eap->arg, |
13802
378f9f8e6d8f
patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents:
13800
diff
changeset
|
5807 NULL, NULL, |
378f9f8e6d8f
patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents:
13800
diff
changeset
|
5808 (char_u *)_(BROWSE_FILTER_ALL_FILES), NULL); |
2296
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5809 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
|
5810 return; |
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5811 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
|
5812 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
|
5813 } |
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5814 else |
eb7be7b075a6
Support :browse for commands that use an error file argument. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents:
2146
diff
changeset
|
5815 #endif |
7 | 5816 if (*eap->arg != NUL) |
694 | 5817 set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0); |
446 | 5818 |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
5819 if (is_loclist_cmd(eap->cmdidx)) |
13078
a1f8939a4644
patch 8.0.1414: accessing freed memory in :lfile.
Christian Brabandt <cb@256bit.org>
parents:
13076
diff
changeset
|
5820 wp = curwin; |
a1f8939a4644
patch 8.0.1414: accessing freed memory in :lfile.
Christian Brabandt <cb@256bit.org>
parents:
13076
diff
changeset
|
5821 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5822 incr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5823 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5824 // This function is used by the :cfile, :cgetfile and :caddfile |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5825 // commands. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5826 // :cfile always creates a new quickfix list and jumps to the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5827 // first error. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5828 // :cgetfile creates a new quickfix list but doesn't jump to the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5829 // first error. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5830 // :caddfile adds to an existing quickfix list. If there is no |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5831 // quickfix list then a new list is created. |
12954
49e136457c66
patch 8.0.1353: QuickFixCmdPost is not used consistently
Christian Brabandt <cb@256bit.org>
parents:
12912
diff
changeset
|
5832 res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile |
13921
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
5833 && eap->cmdidx != CMD_laddfile), |
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
5834 qf_cmdtitle(*eap->cmdlinep), enc); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
5835 if (wp != NULL) |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5836 { |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
5837 qi = GET_LOC_LIST(wp); |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5838 if (qi == NULL) |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5839 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5840 decr_quickfix_busy(); |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5841 return; |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5842 } |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5843 } |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5844 if (res >= 0) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5845 qf_list_changed(qf_get_curlist(qi)); |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5846 save_qfid = qf_get_curlist(qi)->qf_id; |
12954
49e136457c66
patch 8.0.1353: QuickFixCmdPost is not used consistently
Christian Brabandt <cb@256bit.org>
parents:
12912
diff
changeset
|
5847 if (au_name != NULL) |
49e136457c66
patch 8.0.1353: QuickFixCmdPost is not used consistently
Christian Brabandt <cb@256bit.org>
parents:
12912
diff
changeset
|
5848 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf); |
13252
66b8b29854d9
patch 8.0.1500: possible NULL pointer dereference
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
5849 |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5850 // Jump to the first error for a new list and if autocmds didn't |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5851 // free the list. |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5852 if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile) |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
5853 && qflist_valid(wp, save_qfid)) |
14469
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
5854 // display the first error |
0211e295835e
patch 8.1.0248: duplicated quickfix code
Christian Brabandt <cb@256bit.org>
parents:
14433
diff
changeset
|
5855 qf_jump_first(qi, save_qfid, eap->forceit); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5856 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
5857 decr_quickfix_busy(); |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5858 } |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5859 |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5860 /* |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5861 * Return the vimgrep autocmd name. |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5862 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5863 static char_u * |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5864 vgr_get_auname(cmdidx_T cmdidx) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5865 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5866 switch (cmdidx) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5867 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5868 case CMD_vimgrep: return (char_u *)"vimgrep"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5869 case CMD_lvimgrep: return (char_u *)"lvimgrep"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5870 case CMD_vimgrepadd: return (char_u *)"vimgrepadd"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5871 case CMD_lvimgrepadd: return (char_u *)"lvimgrepadd"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5872 case CMD_grep: return (char_u *)"grep"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5873 case CMD_lgrep: return (char_u *)"lgrep"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5874 case CMD_grepadd: return (char_u *)"grepadd"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5875 case CMD_lgrepadd: return (char_u *)"lgrepadd"; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5876 default: return NULL; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5877 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5878 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5879 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5880 /* |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5881 * Initialize the regmatch used by vimgrep for pattern "s". |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5882 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5883 static void |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5884 vgr_init_regmatch(regmmatch_T *regmatch, char_u *s) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5885 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5886 // Get the search pattern: either white-separated or enclosed in // |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5887 regmatch->regprog = NULL; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5888 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5889 if (s == NULL || *s == NUL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5890 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5891 // Pattern is empty, use last search pattern. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5892 if (last_search_pat() == NULL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5893 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
5894 emsg(_(e_no_previous_regular_expression)); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5895 return; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5896 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5897 regmatch->regprog = vim_regcomp(last_search_pat(), RE_MAGIC); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5898 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5899 else |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5900 regmatch->regprog = vim_regcomp(s, RE_MAGIC); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5901 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5902 regmatch->rmm_ic = p_ic; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5903 regmatch->rmm_maxcol = 0; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5904 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5905 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5906 /* |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5907 * Display a file name when vimgrep is running. |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5908 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5909 static void |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5910 vgr_display_fname(char_u *fname) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5911 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5912 char_u *p; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5913 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5914 msg_start(); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5915 p = msg_strtrunc(fname, TRUE); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5916 if (p == NULL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5917 msg_outtrans(fname); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5918 else |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5919 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5920 msg_outtrans(p); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5921 vim_free(p); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5922 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5923 msg_clr_eos(); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5924 msg_didout = FALSE; // overwrite this message |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5925 msg_nowait = TRUE; // don't wait for this message |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5926 msg_col = 0; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5927 out_flush(); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5928 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5929 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5930 /* |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5931 * Load a dummy buffer to search for a pattern using vimgrep. |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5932 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5933 static buf_T * |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5934 vgr_load_dummy_buf( |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5935 char_u *fname, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5936 char_u *dirname_start, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5937 char_u *dirname_now) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5938 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5939 int save_mls; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5940 #if defined(FEAT_SYN_HL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5941 char_u *save_ei = NULL; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5942 #endif |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5943 buf_T *buf; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5944 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5945 #if defined(FEAT_SYN_HL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5946 // Don't do Filetype autocommands to avoid loading syntax and |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5947 // indent scripts, a great speed improvement. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5948 save_ei = au_event_disable(",Filetype"); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5949 #endif |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5950 // Don't use modelines here, it's useless. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5951 save_mls = p_mls; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5952 p_mls = 0; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5953 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5954 // Load file into a buffer, so that 'fileencoding' is detected, |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5955 // autocommands applied, etc. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5956 buf = load_dummy_buffer(fname, dirname_start, dirname_now); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5957 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5958 p_mls = save_mls; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5959 #if defined(FEAT_SYN_HL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5960 au_event_restore(save_ei); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5961 #endif |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5962 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5963 return buf; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5964 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5965 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5966 /* |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5967 * Check whether a quickfix/location list is valid. Autocmds may remove or |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5968 * change a quickfix list when vimgrep is running. If the list is not found, |
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
5969 * create a new list. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5970 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5971 static int |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5972 vgr_qflist_valid( |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5973 win_T *wp, |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5974 qf_info_T *qi, |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5975 int_u qfid, |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5976 char_u *title) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5977 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5978 // Verify that the quickfix/location list was not freed by an autocmd |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5979 if (!qflist_valid(wp, qfid)) |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5980 { |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5981 if (wp != NULL) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5982 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5983 // An autocmd has freed the location list. |
22256
c3c9830c7cdc
patch 8.2.1677: memory access errors when calling setloclist() in autocommand
Bram Moolenaar <Bram@vim.org>
parents:
22137
diff
changeset
|
5984 emsg(_(e_current_location_list_was_changed)); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5985 return FALSE; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5986 } |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5987 else |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5988 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
5989 // Quickfix list is not found, create a new one. |
13594
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5990 qf_new_list(qi, title); |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5991 return TRUE; |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5992 } |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5993 } |
4d55eb79178b
patch 8.0.1669: :vimgrep may add entries to the wrong quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13521
diff
changeset
|
5994 |
14507
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
5995 if (qf_restore_list(qi, qfid) == FAIL) |
5a10a0020c3e
patch 8.1.0267: no good check if restoring quickfix list worked
Christian Brabandt <cb@256bit.org>
parents:
14495
diff
changeset
|
5996 return FALSE; |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5997 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5998 return TRUE; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
5999 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6000 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6001 /* |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6002 * Search for a pattern in all the lines in a buffer and add the matching lines |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6003 * to a quickfix list. |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6004 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6005 static int |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6006 vgr_match_buflines( |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
6007 qf_list_T *qfl, |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6008 char_u *fname, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6009 buf_T *buf, |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6010 char_u *spat, |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6011 regmmatch_T *regmatch, |
14976
676db1b7fc35
patch 8.1.0499: :2vimgrep causes an ml_get error
Bram Moolenaar <Bram@vim.org>
parents:
14956
diff
changeset
|
6012 long *tomatch, |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6013 int duplicate_name, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6014 int flags) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6015 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6016 int found_match = FALSE; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6017 long lnum; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6018 colnr_T col; |
24574
3a3d5ee00574
patch 8.2.2826: compiler warnings for int to size_t conversion
Bram Moolenaar <Bram@vim.org>
parents:
24547
diff
changeset
|
6019 int pat_len = (int)STRLEN(spat); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6020 |
14976
676db1b7fc35
patch 8.1.0499: :2vimgrep causes an ml_get error
Bram Moolenaar <Bram@vim.org>
parents:
14956
diff
changeset
|
6021 for (lnum = 1; lnum <= buf->b_ml.ml_line_count && *tomatch > 0; ++lnum) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6022 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6023 col = 0; |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6024 if (!(flags & VGR_FUZZY)) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6025 { |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6026 // Regular expression match |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6027 while (vim_regexec_multi(regmatch, curwin, buf, lnum, |
29071
b90bca860b5a
patch 8.2.5057: using gettimeofday() for timeout is very inefficient
Bram Moolenaar <Bram@vim.org>
parents:
28871
diff
changeset
|
6028 col, NULL) > 0) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6029 { |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6030 // Pass the buffer number so that it gets used even for a |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6031 // dummy buffer, unless duplicate_name is set, then the |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6032 // buffer will be wiped out below. |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6033 if (qf_add_entry(qfl, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6034 NULL, // dir |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6035 fname, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6036 NULL, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6037 duplicate_name ? 0 : buf->b_fnum, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6038 ml_get_buf(buf, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6039 regmatch->startpos[0].lnum + lnum, FALSE), |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6040 regmatch->startpos[0].lnum + lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6041 regmatch->endpos[0].lnum + lnum, |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6042 regmatch->startpos[0].col + 1, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6043 regmatch->endpos[0].col + 1, |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6044 FALSE, // vis_col |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6045 NULL, // search pattern |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6046 0, // nr |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6047 0, // type |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6048 TRUE // valid |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6049 ) == QF_FAIL) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6050 { |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6051 got_int = TRUE; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6052 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6053 } |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6054 found_match = TRUE; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6055 if (--*tomatch == 0) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6056 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6057 if ((flags & VGR_GLOBAL) == 0 |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6058 || regmatch->endpos[0].lnum > 0) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6059 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6060 col = regmatch->endpos[0].col |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6061 + (col == regmatch->endpos[0].col); |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6062 if (col > (colnr_T)STRLEN(ml_get_buf(buf, lnum, FALSE))) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6063 break; |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6064 } |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6065 } |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6066 else |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6067 { |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6068 char_u *str = ml_get_buf(buf, lnum, FALSE); |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6069 int score; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6070 int_u matches[MAX_FUZZY_MATCHES]; |
24768
7334bf933510
patch 8.2.2922: computing array length is done in various ways
Bram Moolenaar <Bram@vim.org>
parents:
24590
diff
changeset
|
6071 int_u sz = ARRAY_LENGTH(matches); |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6072 |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6073 // Fuzzy string match |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6074 while (fuzzy_match(str + col, spat, FALSE, &score, matches, sz) > 0) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6075 { |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6076 // Pass the buffer number so that it gets used even for a |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6077 // dummy buffer, unless duplicate_name is set, then the |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6078 // buffer will be wiped out below. |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6079 if (qf_add_entry(qfl, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6080 NULL, // dir |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6081 fname, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6082 NULL, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6083 duplicate_name ? 0 : buf->b_fnum, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6084 str, |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6085 lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6086 0, |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6087 matches[0] + col + 1, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6088 0, |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6089 FALSE, // vis_col |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6090 NULL, // search pattern |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6091 0, // nr |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6092 0, // type |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6093 TRUE // valid |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6094 ) == QF_FAIL) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6095 { |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6096 got_int = TRUE; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6097 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6098 } |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6099 found_match = TRUE; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6100 if (--*tomatch == 0) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6101 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6102 if ((flags & VGR_GLOBAL) == 0) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6103 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6104 col = matches[pat_len - 1] + col + 1; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6105 if (col > (colnr_T)STRLEN(str)) |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6106 break; |
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6107 } |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6108 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6109 line_breakcheck(); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6110 if (got_int) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6111 break; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6112 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6113 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6114 return found_match; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6115 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6116 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6117 /* |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6118 * Jump to the first match and update the directory. |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6119 */ |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6120 static void |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6121 vgr_jump_to_match( |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6122 qf_info_T *qi, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6123 int forceit, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6124 int *redraw_for_dummy, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6125 buf_T *first_match_buf, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6126 char_u *target_dir) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6127 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6128 buf_T *buf; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6129 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6130 buf = curbuf; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6131 qf_jump(qi, 0, 0, forceit); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6132 if (buf != curbuf) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6133 // If we jumped to another buffer redrawing will already be |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6134 // taken care of. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6135 *redraw_for_dummy = FALSE; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6136 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6137 // Jump to the directory used after loading the buffer. |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6138 if (curbuf == first_match_buf && target_dir != NULL) |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6139 { |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6140 exarg_T ea; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6141 |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
6142 CLEAR_FIELD(ea); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6143 ea.arg = target_dir; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6144 ea.cmdidx = CMD_lcd; |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6145 ex_cd(&ea); |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6146 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6147 } |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6148 |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6149 /* |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6150 * :vimgrep command arguments |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6151 */ |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6152 typedef struct |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6153 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6154 long tomatch; // maximum number of matches to find |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6155 char_u *spat; // search pattern |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6156 int flags; // search modifier |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6157 char_u **fnames; // list of files to search |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6158 int fcount; // number of files |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6159 regmmatch_T regmatch; // compiled search pattern |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6160 char_u *qf_title; // quickfix list title |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6161 } vgr_args_T; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6162 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6163 /* |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6164 * Process :vimgrep command arguments. The command syntax is: |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6165 * |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6166 * :{count}vimgrep /{pattern}/[g][j] {file} ... |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6167 */ |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6168 static int |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6169 vgr_process_args( |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6170 exarg_T *eap, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6171 vgr_args_T *args) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6172 { |
153 | 6173 char_u *p; |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6174 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6175 vim_memset(args, 0, sizeof(*args)); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6176 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6177 args->regmatch.regprog = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6178 args->qf_title = vim_strsave(qf_cmdtitle(*eap->cmdlinep)); |
657 | 6179 |
716 | 6180 if (eap->addr_count > 0) |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6181 args->tomatch = eap->line2; |
716 | 6182 else |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6183 args->tomatch = MAXLNUM; |
716 | 6184 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6185 // Get the search pattern: either white-separated or enclosed in // |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6186 p = skip_vimgrep_pat(eap->arg, &args->spat, &args->flags); |
153 | 6187 if (p == NULL) |
41 | 6188 { |
26883
7f150a4936f2
patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
6189 emsg(_(e_invalid_search_pattern_or_delimiter)); |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6190 return FAIL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6191 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6192 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6193 vgr_init_regmatch(&args->regmatch, args->spat); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6194 if (args->regmatch.regprog == NULL) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6195 return FAIL; |
41 | 6196 |
6197 p = skipwhite(p); | |
6198 if (*p == NUL) | |
6199 { | |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26917
diff
changeset
|
6200 emsg(_(e_file_name_missing_or_invalid_pattern)); |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6201 return FAIL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6202 } |
41 | 6203 |
23778
8b682f6f3709
patch 8.2.2430: :vimgrep expands wildcards twice
Bram Moolenaar <Bram@vim.org>
parents:
23493
diff
changeset
|
6204 // Parse the list of arguments, wildcards have already been expanded. |
26364
baf0d27eb024
patch 8.2.3713: MS-Windows: no error if vimgrep pattern is not matching
Bram Moolenaar <Bram@vim.org>
parents:
26175
diff
changeset
|
6205 if ((get_arglist_exp(p, &args->fcount, &args->fnames, TRUE) == FAIL) || |
baf0d27eb024
patch 8.2.3713: MS-Windows: no error if vimgrep pattern is not matching
Bram Moolenaar <Bram@vim.org>
parents:
26175
diff
changeset
|
6206 args->fcount == 0) |
41 | 6207 { |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
6208 emsg(_(e_no_match)); |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6209 return FAIL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6210 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6211 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6212 return OK; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6213 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6214 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6215 /* |
21668
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6216 * Return TRUE if "buf" had an existing swap file, the current swap file does |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6217 * not end in ".swp". |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6218 */ |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6219 static int |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6220 existing_swapfile(buf_T *buf) |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6221 { |
22015
d8065205ea82
patch 8.2.1557: crash in :vimgrep when started as "vim -n"
Bram Moolenaar <Bram@vim.org>
parents:
21668
diff
changeset
|
6222 if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL) |
21668
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6223 { |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6224 char_u *fname = buf->b_ml.ml_mfp->mf_fname; |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6225 size_t len = STRLEN(fname); |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6226 |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6227 return fname[len - 1] != 'p' || fname[len - 2] != 'w'; |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6228 } |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6229 return FALSE; |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6230 } |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6231 |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6232 /* |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6233 * Search for a pattern in a list of files and populate the quickfix list with |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6234 * the matches. |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6235 */ |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6236 static int |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6237 vgr_process_files( |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6238 win_T *wp, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6239 qf_info_T *qi, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6240 vgr_args_T *cmd_args, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6241 int *redraw_for_dummy, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6242 buf_T **first_match_buf, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6243 char_u **target_dir) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6244 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6245 int status = FAIL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6246 int_u save_qfid = qf_get_curlist(qi)->qf_id; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6247 time_t seconds = 0; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6248 char_u *fname; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6249 int fi; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6250 buf_T *buf; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6251 int duplicate_name = FALSE; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6252 int using_dummy; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6253 char_u *dirname_start = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6254 char_u *dirname_now = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6255 int found_match; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6256 aco_save_T aco; |
41 | 6257 |
7558
9a4c9dccd603
commit https://github.com/vim/vim/commit/b86a343280b08d6701da68ee0651e960a0a7a61c
Christian Brabandt <cb@256bit.org>
parents:
7515
diff
changeset
|
6258 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
|
6259 dirname_now = alloc_id(MAXPATHL, aid_qf_dirname_now); |
2770 | 6260 if (dirname_start == NULL || dirname_now == NULL) |
6261 goto theend; | |
6262 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6263 // Remember the current directory, because a BufRead autocommand that does |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6264 // ":lcd %:p:h" changes the meaning of short path names. |
1411 | 6265 mch_dirname(dirname_start, MAXPATHL); |
6266 | |
123 | 6267 seconds = (time_t)0; |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6268 for (fi = 0; fi < cmd_args->fcount && !got_int && cmd_args->tomatch > 0; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6269 ++fi) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6270 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6271 fname = shorten_fname1(cmd_args->fnames[fi]); |
123 | 6272 if (time(NULL) > seconds) |
6273 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6274 // Display the file name every second or so, show the user we are |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6275 // working on it. |
123 | 6276 seconds = time(NULL); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6277 vgr_display_fname(fname); |
123 | 6278 } |
6279 | |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6280 buf = buflist_findname_exp(cmd_args->fnames[fi]); |
42 | 6281 if (buf == NULL || buf->b_ml.ml_mfp == NULL) |
6282 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6283 // Remember that a buffer with this name already exists. |
42 | 6284 duplicate_name = (buf != NULL); |
123 | 6285 using_dummy = TRUE; |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6286 *redraw_for_dummy = TRUE; |
123 | 6287 |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6288 buf = vgr_load_dummy_buf(fname, dirname_start, dirname_now); |
42 | 6289 } |
6290 else | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6291 // Use existing, loaded buffer. |
42 | 6292 using_dummy = FALSE; |
123 | 6293 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6294 // Check whether the quickfix list is still valid. When loading a |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6295 // buffer above, autocommands might have changed the quickfix list. |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6296 if (!vgr_qflist_valid(wp, qi, save_qfid, cmd_args->qf_title)) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6297 goto theend; |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6298 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
6299 save_qfid = qf_get_curlist(qi)->qf_id; |
4003 | 6300 |
42 | 6301 if (buf == NULL) |
123 | 6302 { |
6303 if (!got_int) | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15424
diff
changeset
|
6304 smsg(_("Cannot open file \"%s\""), fname); |
123 | 6305 } |
41 | 6306 else |
6307 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6308 // Try for a match in all lines of the buffer. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6309 // For ":1vimgrep" look for first match only. |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
6310 found_match = vgr_match_buflines(qf_get_curlist(qi), |
24547
192058cad081
patch 8.2.2813: cannot grep using fuzzy matching
Bram Moolenaar <Bram@vim.org>
parents:
23865
diff
changeset
|
6311 fname, buf, cmd_args->spat, &cmd_args->regmatch, |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6312 &cmd_args->tomatch, duplicate_name, cmd_args->flags); |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6313 |
42 | 6314 if (using_dummy) |
6315 { | |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6316 if (found_match && *first_match_buf == NULL) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6317 *first_match_buf = buf; |
42 | 6318 if (duplicate_name) |
123 | 6319 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6320 // Never keep a dummy buffer if there is another buffer |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6321 // with the same name. |
3490 | 6322 wipe_dummy_buffer(buf, dirname_start); |
123 | 6323 buf = NULL; |
6324 } | |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22645
diff
changeset
|
6325 else if ((cmdmod.cmod_flags & CMOD_HIDE) == 0 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6326 || buf->b_p_bh[0] == 'u' // "unload" |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6327 || buf->b_p_bh[0] == 'w' // "wipe" |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6328 || buf->b_p_bh[0] == 'd') // "delete" |
42 | 6329 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6330 // When no match was found we don't need to remember the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6331 // buffer, wipe it out. If there was a match and it |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6332 // wasn't the first one or we won't jump there: only |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6333 // unload the buffer. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6334 // Ignore 'hidden' here, because it may lead to having too |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6335 // many swap files. |
42 | 6336 if (!found_match) |
123 | 6337 { |
3490 | 6338 wipe_dummy_buffer(buf, dirname_start); |
123 | 6339 buf = NULL; |
6340 } | |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6341 else if (buf != *first_match_buf |
21668
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6342 || (cmd_args->flags & VGR_NOJUMP) |
0843f244e547
patch 8.2.1384: no ATTENTION prompt for :vimgrep first match file
Bram Moolenaar <Bram@vim.org>
parents:
21461
diff
changeset
|
6343 || existing_swapfile(buf)) |
123 | 6344 { |
3490 | 6345 unload_dummy_buffer(buf, dirname_start); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6346 // Keeping the buffer, remove the dummy flag. |
9540
64a791c53418
commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents:
9538
diff
changeset
|
6347 buf->b_flags &= ~BF_DUMMY; |
123 | 6348 buf = NULL; |
6349 } | |
42 | 6350 } |
123 | 6351 |
6352 if (buf != NULL) | |
6353 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6354 // Keeping the buffer, remove the dummy flag. |
9540
64a791c53418
commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents:
9538
diff
changeset
|
6355 buf->b_flags &= ~BF_DUMMY; |
64a791c53418
commit https://github.com/vim/vim/commit/015102e91e978a0bb42a14461c132a85e8f7e1ea
Christian Brabandt <cb@256bit.org>
parents:
9538
diff
changeset
|
6356 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6357 // If the buffer is still loaded we need to use the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6358 // directory we jumped to below. |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6359 if (buf == *first_match_buf |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6360 && *target_dir == NULL |
1411 | 6361 && STRCMP(dirname_start, dirname_now) != 0) |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6362 *target_dir = vim_strsave(dirname_now); |
1411 | 6363 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6364 // The buffer is still loaded, the Filetype autocommands |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6365 // need to be done now, in that buffer. And the modelines |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6366 // need to be done (again). But not the window-local |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6367 // options! |
123 | 6368 aucmd_prepbuf(&aco, buf); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
6369 #if defined(FEAT_SYN_HL) |
123 | 6370 apply_autocmds(EVENT_FILETYPE, buf->b_p_ft, |
6371 buf->b_fname, TRUE, buf); | |
677 | 6372 #endif |
717 | 6373 do_modelines(OPT_NOWIN); |
123 | 6374 aucmd_restbuf(&aco); |
6375 } | |
42 | 6376 } |
41 | 6377 } |
6378 } | |
6379 | |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6380 status = OK; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6381 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6382 theend: |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6383 vim_free(dirname_now); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6384 vim_free(dirname_start); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6385 return status; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6386 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6387 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6388 /* |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6389 * ":vimgrep {pattern} file(s)" |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6390 * ":vimgrepadd {pattern} file(s)" |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6391 * ":lvimgrep {pattern} file(s)" |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6392 * ":lvimgrepadd {pattern} file(s)" |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6393 */ |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6394 void |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6395 ex_vimgrep(exarg_T *eap) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6396 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6397 vgr_args_T args; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6398 qf_info_T *qi; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6399 qf_list_T *qfl; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6400 int_u save_qfid; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6401 win_T *wp = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6402 int redraw_for_dummy = FALSE; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6403 buf_T *first_match_buf = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6404 char_u *target_dir = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6405 char_u *au_name = NULL; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6406 int status; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6407 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6408 au_name = vgr_get_auname(eap->cmdidx); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6409 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6410 curbuf->b_fname, TRUE, curbuf)) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6411 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6412 #ifdef FEAT_EVAL |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6413 if (aborting()) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6414 return; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6415 #endif |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6416 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6417 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6418 qi = qf_cmd_get_or_alloc_stack(eap, &wp); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6419 if (qi == NULL) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6420 return; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6421 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6422 if (vgr_process_args(eap, &args) == FAIL) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6423 goto theend; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6424 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6425 if ((eap->cmdidx != CMD_grepadd && eap->cmdidx != CMD_lgrepadd |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6426 && eap->cmdidx != CMD_vimgrepadd |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6427 && eap->cmdidx != CMD_lvimgrepadd) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6428 || qf_stack_empty(qi)) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6429 // make place for a new list |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6430 qf_new_list(qi, args.qf_title); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6431 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6432 incr_quickfix_busy(); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6433 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6434 status = vgr_process_files(wp, qi, &args, &redraw_for_dummy, |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6435 &first_match_buf, &target_dir); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6436 if (status != OK) |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6437 { |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6438 FreeWild(args.fcount, args.fnames); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6439 decr_quickfix_busy(); |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6440 goto theend; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6441 } |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6442 |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6443 FreeWild(args.fcount, args.fnames); |
41 | 6444 |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
6445 qfl = qf_get_curlist(qi); |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
6446 qfl->qf_nonevalid = FALSE; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
6447 qfl->qf_ptr = qfl->qf_start; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
6448 qfl->qf_index = 1; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
6449 qf_list_changed(qfl); |
41 | 6450 |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
6451 qf_update_buffer(qi, NULL); |
41 | 6452 |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6453 // Remember the current quickfix list identifier, so that we can check for |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6454 // autocommands changing the current quickfix list. |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6455 save_qfid = qf_get_curlist(qi)->qf_id; |
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6456 |
842 | 6457 if (au_name != NULL) |
6458 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, | |
6459 curbuf->b_fname, TRUE, curbuf); | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6460 // The QuickFixCmdPost autocmd may free the quickfix list. Check the list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6461 // is still valid. |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6462 if (!qflist_valid(wp, save_qfid) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6463 || qf_restore_list(qi, save_qfid) == FAIL) |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6464 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6465 decr_quickfix_busy(); |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
6466 goto theend; |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6467 } |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
6468 |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
6469 // Jump to first match. |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6470 if (!qf_list_empty(qf_get_curlist(qi))) |
170 | 6471 { |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6472 if ((args.flags & VGR_NOJUMP) == 0) |
13521
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6473 vgr_jump_to_match(qi, eap->forceit, &redraw_for_dummy, |
15c856a1617b
patch 8.0.1634: the ex_vimgrep() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13497
diff
changeset
|
6474 first_match_buf, target_dir); |
170 | 6475 } |
42 | 6476 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
6477 semsg(_(e_no_match_str_2), args.spat); |
41 | 6478 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6479 decr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
6480 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6481 // If we loaded a dummy buffer into the current window, the autocommands |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6482 // may have messed up things, need to redraw and recompute folds. |
1396 | 6483 if (redraw_for_dummy) |
6484 { | |
6485 #ifdef FEAT_FOLDING | |
6486 foldUpdateAll(curwin); | |
6487 #else | |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29576
diff
changeset
|
6488 redraw_later(UPD_NOT_VALID); |
1396 | 6489 #endif |
6490 } | |
6491 | |
41 | 6492 theend: |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6493 vim_free(args.qf_title); |
1411 | 6494 vim_free(target_dir); |
18607
fbeb1bf0cea8
patch 8.1.2297: the ex_vimgrep() function is too long
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
6495 vim_regfree(args.regmatch.regprog); |
41 | 6496 } |
6497 | |
6498 /* | |
3490 | 6499 * Restore current working directory to "dirname_start" if they differ, taking |
6500 * into account whether it is set locally or globally. | |
6501 */ | |
6502 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
6503 restore_start_dir(char_u *dirname_start) |
3490 | 6504 { |
6505 char_u *dirname_now = alloc(MAXPATHL); | |
6506 | |
6507 if (NULL != dirname_now) | |
6508 { | |
6509 mch_dirname(dirname_now, MAXPATHL); | |
6510 if (STRCMP(dirname_start, dirname_now) != 0) | |
6511 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6512 // If the directory has changed, change it back by building up an |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6513 // appropriate ex command and executing it. |
3490 | 6514 exarg_T ea; |
6515 | |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
6516 CLEAR_FIELD(ea); |
3490 | 6517 ea.arg = dirname_start; |
6518 ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd; | |
6519 ex_cd(&ea); | |
6520 } | |
3974 | 6521 vim_free(dirname_now); |
3490 | 6522 } |
6523 } | |
6524 | |
6525 /* | |
6526 * Load file "fname" into a dummy buffer and return the buffer pointer, | |
6527 * placing the directory resulting from the buffer load into the | |
6528 * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller | |
6529 * prior to calling this function. Restores directory to "dirname_start" prior | |
6530 * to returning, if autocmds or the 'autochdir' option have changed it. | |
6531 * | |
6532 * If creating the dummy buffer does not fail, must call unload_dummy_buffer() | |
6533 * or wipe_dummy_buffer() later! | |
6534 * | |
42 | 6535 * Returns NULL if it fails. |
6536 */ | |
6537 static buf_T * | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
6538 load_dummy_buffer( |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
6539 char_u *fname, |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6540 char_u *dirname_start, // in: old directory |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6541 char_u *resulting_dir) // out: new directory |
42 | 6542 { |
6543 buf_T *newbuf; | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6544 bufref_T newbufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6545 bufref_T newbuf_to_wipe; |
42 | 6546 int failed = TRUE; |
6547 aco_save_T aco; | |
13056
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6548 int readfile_result; |
42 | 6549 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6550 // Allocate a buffer without putting it in the buffer list. |
42 | 6551 newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY); |
6552 if (newbuf == NULL) | |
6553 return NULL; | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6554 set_bufref(&newbufref, newbuf); |
42 | 6555 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6556 // Init the options. |
177 | 6557 buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); |
6558 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6559 // need to open the memfile before putting the buffer in a window |
1918 | 6560 if (ml_open(newbuf) == OK) |
42 | 6561 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6562 // Make sure this buffer isn't wiped out by autocommands. |
13056
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6563 ++newbuf->b_locked; |
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6564 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6565 // set curwin/curbuf to buf and save a few things |
1918 | 6566 aucmd_prepbuf(&aco, newbuf); |
6567 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6568 // Need to set the filename for autocommands. |
1918 | 6569 (void)setfname(curbuf, fname, NULL, FALSE); |
6570 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6571 // Create swap file now to avoid the ATTENTION message. |
42 | 6572 check_need_swap(TRUE); |
6573 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6574 // Remove the "dummy" flag, otherwise autocommands may not |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6575 // work. |
42 | 6576 curbuf->b_flags &= ~BF_DUMMY; |
6577 | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6578 newbuf_to_wipe.br_buf = NULL; |
13056
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6579 readfile_result = readfile(fname, NULL, |
42 | 6580 (linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM, |
13056
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6581 NULL, READ_NEW | READ_DUMMY); |
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6582 --newbuf->b_locked; |
b931b2751650
patch 8.0.1403: using freed buffer in grep command
Christian Brabandt <cb@256bit.org>
parents:
13026
diff
changeset
|
6583 if (readfile_result == OK |
857 | 6584 && !got_int |
42 | 6585 && !(curbuf->b_flags & BF_NEW)) |
6586 { | |
6587 failed = FALSE; | |
6588 if (curbuf != newbuf) | |
6589 { | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6590 // Bloody autocommands changed the buffer! Can happen when |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6591 // using netrw and editing a remote file. Use the current |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6592 // buffer instead, delete the dummy one after restoring the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6593 // window stuff. |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6594 set_bufref(&newbuf_to_wipe, newbuf); |
42 | 6595 newbuf = curbuf; |
6596 } | |
6597 } | |
1918 | 6598 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6599 // restore curwin/curbuf and a few other things |
1918 | 6600 aucmd_restbuf(&aco); |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6601 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
|
6602 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
|
6603 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6604 // Add back the "dummy" flag, otherwise buflist_findname_stat() won't |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6605 // skip it. |
9485
c16e207dc465
commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents:
9475
diff
changeset
|
6606 newbuf->b_flags |= BF_DUMMY; |
42 | 6607 } |
6608 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6609 // When autocommands/'autochdir' option changed directory: go back. |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6610 // Let the caller know what the resulting dir was first, in case it is |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6611 // important. |
3490 | 6612 mch_dirname(resulting_dir, MAXPATHL); |
6613 restore_start_dir(dirname_start); | |
6614 | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9485
diff
changeset
|
6615 if (!bufref_valid(&newbufref)) |
42 | 6616 return NULL; |
6617 if (failed) | |
6618 { | |
3490 | 6619 wipe_dummy_buffer(newbuf, dirname_start); |
42 | 6620 return NULL; |
6621 } | |
6622 return newbuf; | |
6623 } | |
6624 | |
6625 /* | |
3490 | 6626 * Wipe out the dummy buffer that load_dummy_buffer() created. Restores |
6627 * directory to "dirname_start" prior to returning, if autocmds or the | |
6628 * 'autochdir' option have changed it. | |
42 | 6629 */ |
6630 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
6631 wipe_dummy_buffer(buf_T *buf, char_u *dirname_start) |
42 | 6632 { |
19649
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6633 // If any autocommand opened a window on the dummy buffer, close that |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6634 // window. If we can't close them all then give up. |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6635 while (buf->b_nwindows > 0) |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6636 { |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6637 int did_one = FALSE; |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6638 win_T *wp; |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6639 |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6640 if (firstwin->w_next != NULL) |
19934
3ff714d765ba
patch 8.2.0523: loops are repeated
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
6641 FOR_ALL_WINDOWS(wp) |
19649
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6642 if (wp->w_buffer == buf) |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6643 { |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6644 if (win_close(wp, FALSE) == OK) |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6645 did_one = TRUE; |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6646 break; |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6647 } |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6648 if (!did_one) |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6649 return; |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6650 } |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6651 |
d4baa35fea5d
patch 8.2.0381: using freed memory with :lvimgrep and autocommand
Bram Moolenaar <Bram@vim.org>
parents:
19475
diff
changeset
|
6652 if (curbuf != buf && buf->b_nwindows == 0) // safety check |
857 | 6653 { |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
6654 #if defined(FEAT_EVAL) |
857 | 6655 cleanup_T cs; |
6656 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6657 // Reset the error/interrupt/exception state here so that aborting() |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6658 // returns FALSE when wiping out the buffer. Otherwise it doesn't |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6659 // work when got_int is set. |
857 | 6660 enter_cleanup(&cs); |
6661 #endif | |
6662 | |
23278
51b1a7e3e4ab
patch 8.2.2185: BufUnload is not triggered for the quickfix dummy buffer
Bram Moolenaar <Bram@vim.org>
parents:
23203
diff
changeset
|
6663 wipe_buffer(buf, TRUE); |
857 | 6664 |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
6665 #if defined(FEAT_EVAL) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6666 // Restore the error/interrupt/exception state if not discarded by a |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6667 // new aborting error, interrupt, or uncaught exception. |
857 | 6668 leave_cleanup(&cs); |
6669 #endif | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6670 // When autocommands/'autochdir' option changed directory: go back. |
3490 | 6671 restore_start_dir(dirname_start); |
857 | 6672 } |
42 | 6673 } |
6674 | |
6675 /* | |
3490 | 6676 * Unload the dummy buffer that load_dummy_buffer() created. Restores |
6677 * directory to "dirname_start" prior to returning, if autocmds or the | |
6678 * 'autochdir' option have changed it. | |
42 | 6679 */ |
6680 static void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
6681 unload_dummy_buffer(buf_T *buf, char_u *dirname_start) |
42 | 6682 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6683 if (curbuf != buf) // safety check |
3490 | 6684 { |
18886
050f5eaa9e50
patch 8.2.0004: get E685 and E931 if buffer reload is interrupted
Bram Moolenaar <Bram@vim.org>
parents:
18827
diff
changeset
|
6685 close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE, TRUE); |
3490 | 6686 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6687 // When autocommands/'autochdir' option changed directory: go back. |
3490 | 6688 restore_start_dir(dirname_start); |
6689 } | |
42 | 6690 } |
6691 | |
170 | 6692 #if defined(FEAT_EVAL) || defined(PROTO) |
6693 /* | |
19195
2ef19eed524a
patch 8.2.0156: various typos in source files and tests
Bram Moolenaar <Bram@vim.org>
parents:
18886
diff
changeset
|
6694 * Copy the specified quickfix entry items into a new dict and append the dict |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6695 * to 'list'. Returns OK on success. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6696 */ |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6697 static int |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6698 get_qfline_items(qfline_T *qfp, list_T *list) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6699 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6700 int bufnum; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6701 dict_T *dict; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6702 char_u buf[2]; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6703 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6704 // Handle entries with a non-existing buffer number. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6705 bufnum = qfp->qf_fnum; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6706 if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6707 bufnum = 0; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6708 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6709 if ((dict = dict_alloc()) == NULL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6710 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6711 if (list_append_dict(list, dict) == FAIL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6712 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6713 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6714 buf[0] = qfp->qf_type; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6715 buf[1] = NUL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6716 if (dict_add_number(dict, "bufnr", (long)bufnum) == FAIL |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6717 || dict_add_number(dict, "lnum", (long)qfp->qf_lnum) == FAIL |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6718 || dict_add_number(dict, "end_lnum", (long)qfp->qf_end_lnum) == FAIL |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6719 || dict_add_number(dict, "col", (long)qfp->qf_col) == FAIL |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6720 || dict_add_number(dict, "end_col", (long)qfp->qf_end_col) == FAIL |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6721 || dict_add_number(dict, "vcol", (long)qfp->qf_viscol) == FAIL |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
6722 || dict_add_number(dict, "nr", (long)qfp->qf_nr) == FAIL |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6723 || dict_add_string(dict, "module", qfp->qf_module) == FAIL |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6724 || dict_add_string(dict, "pattern", qfp->qf_pattern) == FAIL |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6725 || dict_add_string(dict, "text", qfp->qf_text) == FAIL |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6726 || dict_add_string(dict, "type", buf) == FAIL |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6727 || dict_add_number(dict, "valid", (long)qfp->qf_valid) == FAIL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6728 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6729 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6730 return OK; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6731 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6732 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6733 /* |
170 | 6734 * 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
|
6735 * If qf_idx is -1, use the current list. Otherwise, use the specified list. |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6736 * If eidx is not 0, then return only the specified entry. Otherwise return |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6737 * all the entries. |
170 | 6738 */ |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
6739 static int |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6740 get_errorlist( |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6741 qf_info_T *qi_arg, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6742 win_T *wp, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6743 int qf_idx, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6744 int eidx, |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6745 list_T *list) |
170 | 6746 { |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6747 qf_info_T *qi = qi_arg; |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6748 qf_list_T *qfl; |
230 | 6749 qfline_T *qfp; |
6750 int i; | |
170 | 6751 |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6752 if (qi == NULL) |
647 | 6753 { |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6754 qi = &ql_info; |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6755 if (wp != NULL) |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6756 { |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6757 qi = GET_LOC_LIST(wp); |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6758 if (qi == NULL) |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6759 return FAIL; |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6760 } |
647 | 6761 } |
6762 | |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6763 if (eidx < 0) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6764 return OK; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6765 |
13800
e4dc4ede9ef8
patch 8.0.1772: quickfix: mixup of FALSE and FAIL, returning -1
Christian Brabandt <cb@256bit.org>
parents:
13764
diff
changeset
|
6766 if (qf_idx == INVALID_QFIDX) |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6767 qf_idx = qi->qf_curlist; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6768 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6769 if (qf_idx >= qi->qf_listcount) |
170 | 6770 return FAIL; |
6771 | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6772 qfl = qf_get_list(qi, qf_idx); |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6773 if (qf_list_empty(qfl)) |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6774 return FAIL; |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
6775 |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6776 FOR_ALL_QFL_ITEMS(qfl, qfp, i) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6777 { |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6778 if (eidx > 0) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6779 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6780 if (eidx == i) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6781 return get_qfline_items(qfp, list); |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6782 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6783 else if (get_qfline_items(qfp, list) == FAIL) |
170 | 6784 return FAIL; |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6785 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
6786 |
170 | 6787 return OK; |
6788 } | |
230 | 6789 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6790 // Flags used by getqflist()/getloclist() to determine which fields to return. |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6791 enum { |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6792 QF_GETLIST_NONE = 0x0, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6793 QF_GETLIST_TITLE = 0x1, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6794 QF_GETLIST_ITEMS = 0x2, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6795 QF_GETLIST_NR = 0x4, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6796 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
|
6797 QF_GETLIST_CONTEXT = 0x10, |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6798 QF_GETLIST_ID = 0x20, |
12465
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6799 QF_GETLIST_IDX = 0x40, |
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6800 QF_GETLIST_SIZE = 0x80, |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
6801 QF_GETLIST_TICK = 0x100, |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6802 QF_GETLIST_FILEWINID = 0x200, |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6803 QF_GETLIST_QFBUFNR = 0x400, |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
6804 QF_GETLIST_QFTF = 0x800, |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
6805 QF_GETLIST_ALL = 0xFFF, |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6806 }; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6807 |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6808 /* |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6809 * Parse text from 'di' and return the quickfix list items. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6810 * Existing quickfix lists are not modified. |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6811 */ |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6812 static int |
12321
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6813 qf_get_list_from_lines(dict_T *what, dictitem_T *di, dict_T *retdict) |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6814 { |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6815 int status = FAIL; |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6816 qf_info_T *qi; |
12321
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6817 char_u *errorformat = p_efm; |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6818 dictitem_T *efm_di; |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6819 list_T *l; |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6820 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6821 // Only a List value is supported |
12303
ec7a4fd21dd5
patch 8.0.1031: "text" argument for getqflist() is confusing
Christian Brabandt <cb@256bit.org>
parents:
12299
diff
changeset
|
6822 if (di->di_tv.v_type == VAR_LIST && di->di_tv.vval.v_list != NULL) |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6823 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6824 // If errorformat is supplied then use it, otherwise use the 'efm' |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6825 // option setting |
12321
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6826 if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6827 { |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6828 if (efm_di->di_tv.v_type != VAR_STRING || |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6829 efm_di->di_tv.vval.v_string == NULL) |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6830 return FAIL; |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6831 errorformat = efm_di->di_tv.vval.v_string; |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6832 } |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6833 |
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6834 l = list_alloc(); |
12299
f4d00472e617
patch 8.0.1029: return value of getqflist() is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
12287
diff
changeset
|
6835 if (l == NULL) |
f4d00472e617
patch 8.0.1029: return value of getqflist() is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
12287
diff
changeset
|
6836 return FAIL; |
f4d00472e617
patch 8.0.1029: return value of getqflist() is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
12287
diff
changeset
|
6837 |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
6838 qi = qf_alloc_stack(QFLT_INTERNAL); |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6839 if (qi != NULL) |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6840 { |
12321
2779d593a706
patch 8.0.1040: cannot use another error format in getqflist()
Christian Brabandt <cb@256bit.org>
parents:
12303
diff
changeset
|
6841 if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat, |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6842 TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0) |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6843 { |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
6844 (void)get_errorlist(qi, NULL, 0, 0, l); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
6845 qf_free(&qi->qf_lists[0]); |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6846 } |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6847 free(qi); |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6848 } |
12299
f4d00472e617
patch 8.0.1029: return value of getqflist() is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
12287
diff
changeset
|
6849 dict_add_list(retdict, "items", l); |
f4d00472e617
patch 8.0.1029: return value of getqflist() is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
12287
diff
changeset
|
6850 status = OK; |
12252
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6851 } |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6852 |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6853 return status; |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6854 } |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6855 |
3d0e042ec13c
patch 8.0.1006: quickfix list changes when parsing text with 'erroformat'
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
6856 /* |
13115
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6857 * Return the quickfix/location list window identifier in the current tabpage. |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6858 */ |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6859 static int |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6860 qf_winid(qf_info_T *qi) |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6861 { |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6862 win_T *win; |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6863 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6864 // The quickfix window can be opened even if the quickfix list is not set |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6865 // using ":copen". This is not true for location lists. |
13115
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6866 if (qi == NULL) |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6867 return 0; |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6868 win = qf_find_win(qi); |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6869 if (win != NULL) |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6870 return win->w_id; |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6871 return 0; |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6872 } |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6873 |
9812a9ca3ab2
patch 8.0.1432: after ":copen" can't get the window-ID of the quickfix window
Christian Brabandt <cb@256bit.org>
parents:
13105
diff
changeset
|
6874 /* |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6875 * Returns the number of the buffer displayed in the quickfix/location list |
26464
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6876 * window. If there is no buffer associated with the list or the buffer is |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6877 * wiped out, then returns 0. |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6878 */ |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6879 static int |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6880 qf_getprop_qfbufnr(qf_info_T *qi, dict_T *retdict) |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6881 { |
26464
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6882 int bufnum = 0; |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6883 |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6884 if (qi != NULL && buflist_findnr(qi->qf_bufnr) != NULL) |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6885 bufnum = qi->qf_bufnr; |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6886 |
c0cb28384dc2
patch 8.2.3762: if quickfix buffer is wiped out getqflist() still returns it
Bram Moolenaar <Bram@vim.org>
parents:
26458
diff
changeset
|
6887 return dict_add_number(retdict, "qfbufnr", bufnum); |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6888 } |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6889 |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6890 /* |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6891 * Convert the keys in 'what' to quickfix list property flags. |
230 | 6892 */ |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6893 static int |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6894 qf_getprop_keys2flags(dict_T *what, int loclist) |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6895 { |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6896 int flags = QF_GETLIST_NONE; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
6897 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6898 if (dict_has_key(what, "all")) |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6899 { |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6900 flags |= QF_GETLIST_ALL; |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6901 if (!loclist) |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6902 // File window ID is applicable only to location list windows |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6903 flags &= ~ QF_GETLIST_FILEWINID; |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6904 } |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6905 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6906 if (dict_has_key(what, "title")) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6907 flags |= QF_GETLIST_TITLE; |
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6908 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6909 if (dict_has_key(what, "nr")) |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6910 flags |= QF_GETLIST_NR; |
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6911 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6912 if (dict_has_key(what, "winid")) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6913 flags |= QF_GETLIST_WINID; |
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6914 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6915 if (dict_has_key(what, "context")) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6916 flags |= QF_GETLIST_CONTEXT; |
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6917 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6918 if (dict_has_key(what, "id")) |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6919 flags |= QF_GETLIST_ID; |
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6920 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6921 if (dict_has_key(what, "items")) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
6922 flags |= QF_GETLIST_ITEMS; |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
6923 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6924 if (dict_has_key(what, "idx")) |
12465
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6925 flags |= QF_GETLIST_IDX; |
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6926 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6927 if (dict_has_key(what, "size")) |
12465
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6928 flags |= QF_GETLIST_SIZE; |
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
6929 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6930 if (dict_has_key(what, "changedtick")) |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
6931 flags |= QF_GETLIST_TICK; |
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
6932 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6933 if (loclist && dict_has_key(what, "filewinid")) |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6934 flags |= QF_GETLIST_FILEWINID; |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
6935 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6936 if (dict_has_key(what, "qfbufnr")) |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6937 flags |= QF_GETLIST_QFBUFNR; |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
6938 |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
6939 if (dict_has_key(what, "quickfixtextfunc")) |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
6940 flags |= QF_GETLIST_QFTF; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
6941 |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6942 return flags; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6943 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6944 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6945 /* |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6946 * Return the quickfix list index based on 'nr' or 'id' in 'what'. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6947 * If 'nr' and 'id' are not present in 'what' then return the current |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6948 * quickfix list index. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6949 * If 'nr' is zero then return the current quickfix list index. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6950 * If 'nr' is '$' then return the last quickfix list index. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6951 * If 'id' is present then return the index of the quickfix list with that id. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6952 * If 'id' is zero then return the quickfix list index specified by 'nr'. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6953 * Return -1, if quickfix list is not present or if the stack is empty. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6954 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6955 static int |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6956 qf_getprop_qfidx(qf_info_T *qi, dict_T *what) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6957 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6958 int qf_idx; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6959 dictitem_T *di; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6960 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6961 qf_idx = qi->qf_curlist; // default is the current list |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6962 if ((di = dict_find(what, (char_u *)"nr", -1)) != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6963 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6964 // Use the specified quickfix/location list |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6965 if (di->di_tv.v_type == VAR_NUMBER) |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6966 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6967 // for zero use the current list |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6968 if (di->di_tv.vval.v_number != 0) |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6969 { |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6970 qf_idx = di->di_tv.vval.v_number - 1; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6971 if (qf_idx < 0 || qf_idx >= qi->qf_listcount) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
6972 qf_idx = INVALID_QFIDX; |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6973 } |
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6974 } |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6975 else if (di->di_tv.v_type == VAR_STRING |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6976 && di->di_tv.vval.v_string != NULL |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6977 && STRCMP(di->di_tv.vval.v_string, "$") == 0) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6978 // Get the last quickfix list number |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6979 qf_idx = qi->qf_listcount - 1; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6980 else |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
6981 qf_idx = INVALID_QFIDX; |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6982 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6983 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6984 if ((di = dict_find(what, (char_u *)"id", -1)) != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6985 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6986 // Look for a list with the specified id |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6987 if (di->di_tv.v_type == VAR_NUMBER) |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6988 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
6989 // For zero, use the current list or the list specified by 'nr' |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6990 if (di->di_tv.vval.v_number != 0) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6991 qf_idx = qf_id2nr(qi, di->di_tv.vval.v_number); |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
6992 } |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6993 else |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
6994 qf_idx = INVALID_QFIDX; |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6995 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6996 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6997 return qf_idx; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6998 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
6999 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7000 /* |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7001 * Return default values for quickfix list properties in retdict. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7002 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7003 static int |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
7004 qf_getprop_defaults(qf_info_T *qi, int flags, int locstack, dict_T *retdict) |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7005 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7006 int status = OK; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7007 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7008 if (flags & QF_GETLIST_TITLE) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7009 status = dict_add_string(retdict, "title", (char_u *)""); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7010 if ((status == OK) && (flags & QF_GETLIST_ITEMS)) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7011 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7012 list_T *l = list_alloc(); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7013 if (l != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7014 status = dict_add_list(retdict, "items", l); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7015 else |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7016 status = FAIL; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7017 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7018 if ((status == OK) && (flags & QF_GETLIST_NR)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7019 status = dict_add_number(retdict, "nr", 0); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7020 if ((status == OK) && (flags & QF_GETLIST_WINID)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7021 status = dict_add_number(retdict, "winid", qf_winid(qi)); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7022 if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7023 status = dict_add_string(retdict, "context", (char_u *)""); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7024 if ((status == OK) && (flags & QF_GETLIST_ID)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7025 status = dict_add_number(retdict, "id", 0); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7026 if ((status == OK) && (flags & QF_GETLIST_IDX)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7027 status = dict_add_number(retdict, "idx", 0); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7028 if ((status == OK) && (flags & QF_GETLIST_SIZE)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7029 status = dict_add_number(retdict, "size", 0); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7030 if ((status == OK) && (flags & QF_GETLIST_TICK)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7031 status = dict_add_number(retdict, "changedtick", 0); |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
7032 if ((status == OK) && locstack && (flags & QF_GETLIST_FILEWINID)) |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7033 status = dict_add_number(retdict, "filewinid", 0); |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
7034 if ((status == OK) && (flags & QF_GETLIST_QFBUFNR)) |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
7035 status = qf_getprop_qfbufnr(qi, retdict); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7036 if ((status == OK) && (flags & QF_GETLIST_QFTF)) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7037 status = dict_add_string(retdict, "quickfixtextfunc", (char_u *)""); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7038 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7039 return status; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7040 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7041 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7042 /* |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7043 * Return the quickfix list title as 'title' in retdict |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7044 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7045 static int |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7046 qf_getprop_title(qf_list_T *qfl, dict_T *retdict) |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7047 { |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7048 return dict_add_string(retdict, "title", qfl->qf_title); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7049 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7050 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7051 /* |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7052 * Returns the identifier of the window used to display files from a location |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7053 * list. If there is no associated window, then returns 0. Useful only when |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7054 * called from a location list window. |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7055 */ |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7056 static int |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7057 qf_getprop_filewinid(win_T *wp, qf_info_T *qi, dict_T *retdict) |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7058 { |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7059 int winid = 0; |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7060 |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7061 if (wp != NULL && IS_LL_WINDOW(wp)) |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7062 { |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7063 win_T *ll_wp = qf_find_win_with_loclist(qi); |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7064 if (ll_wp != NULL) |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7065 winid = ll_wp->w_id; |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7066 } |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7067 |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7068 return dict_add_number(retdict, "filewinid", winid); |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7069 } |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7070 |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7071 /* |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7072 * Return the quickfix list items/entries as 'items' in retdict. |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7073 * If eidx is not 0, then return the item at the specified index. |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7074 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7075 static int |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7076 qf_getprop_items(qf_info_T *qi, int qf_idx, int eidx, dict_T *retdict) |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7077 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7078 int status = OK; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7079 list_T *l = list_alloc(); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7080 if (l != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7081 { |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7082 (void)get_errorlist(qi, NULL, qf_idx, eidx, l); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7083 dict_add_list(retdict, "items", l); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7084 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7085 else |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7086 status = FAIL; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7087 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7088 return status; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7089 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7090 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7091 /* |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7092 * Return the quickfix list context (if any) as 'context' in retdict. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7093 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7094 static int |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7095 qf_getprop_ctx(qf_list_T *qfl, dict_T *retdict) |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7096 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7097 int status; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7098 dictitem_T *di; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7099 |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7100 if (qfl->qf_ctx != NULL) |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7101 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7102 di = dictitem_alloc((char_u *)"context"); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7103 if (di != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7104 { |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7105 copy_tv(qfl->qf_ctx, &di->di_tv); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7106 status = dict_add(retdict, di); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7107 if (status == FAIL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7108 dictitem_free(di); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7109 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7110 else |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7111 status = FAIL; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7112 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7113 else |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7114 status = dict_add_string(retdict, "context", (char_u *)""); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7115 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7116 return status; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7117 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7118 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7119 /* |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7120 * Return the current quickfix list index as 'idx' in retdict. |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7121 * If a specific entry index (eidx) is supplied, then use that. |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7122 */ |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7123 static int |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7124 qf_getprop_idx(qf_list_T *qfl, int eidx, dict_T *retdict) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7125 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7126 if (eidx == 0) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7127 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7128 eidx = qfl->qf_index; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7129 if (qf_list_empty(qfl)) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7130 // For empty lists, current index is set to 0 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7131 eidx = 0; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7132 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7133 return dict_add_number(retdict, "idx", eidx); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7134 } |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7135 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7136 /* |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7137 * Return the 'quickfixtextfunc' function of a quickfix/location list |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7138 */ |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7139 static int |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7140 qf_getprop_qftf(qf_list_T *qfl, dict_T *retdict) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7141 { |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7142 int status; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7143 |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
7144 if (qfl->qf_qftf_cb.cb_name != NULL) |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7145 { |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7146 typval_T tv; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7147 |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
7148 put_callback(&qfl->qf_qftf_cb, &tv); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7149 status = dict_add_tv(retdict, "quickfixtextfunc", &tv); |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7150 clear_tv(&tv); |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7151 } |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7152 else |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7153 status = dict_add_string(retdict, "quickfixtextfunc", (char_u *)""); |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7154 |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7155 return status; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7156 } |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7157 |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7158 /* |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7159 * Return quickfix/location list details (title) as a |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7160 * dictionary. 'what' contains the details to return. If 'list_idx' is -1, |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7161 * then current list is used. Otherwise the specified list is used. |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7162 */ |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
7163 static int |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7164 qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7165 { |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7166 qf_info_T *qi = &ql_info; |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7167 qf_list_T *qfl; |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7168 int status = OK; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7169 int qf_idx = INVALID_QFIDX; |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7170 int eidx = 0; |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7171 dictitem_T *di; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7172 int flags = QF_GETLIST_NONE; |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7173 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7174 if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7175 return qf_get_list_from_lines(what, di, retdict); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7176 |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7177 if (wp != NULL) |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7178 qi = GET_LOC_LIST(wp); |
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7179 |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7180 flags = qf_getprop_keys2flags(what, (wp != NULL)); |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7181 |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
7182 if (!qf_stack_empty(qi)) |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7183 qf_idx = qf_getprop_qfidx(qi, what); |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
7184 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7185 // List is not present or is empty |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
7186 if (qf_stack_empty(qi) || qf_idx == INVALID_QFIDX) |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
7187 return qf_getprop_defaults(qi, flags, wp != NULL, retdict); |
13026
7c0e0e923537
patch 8.0.1389: getqflist() items are missing if not set
Christian Brabandt <cb@256bit.org>
parents:
13016
diff
changeset
|
7188 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7189 qfl = qf_get_list(qi, qf_idx); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7190 |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7191 // If an entry index is specified, use that |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7192 if ((di = dict_find(what, (char_u *)"idx", -1)) != NULL) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7193 { |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7194 if (di->di_tv.v_type != VAR_NUMBER) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7195 return FAIL; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7196 eidx = di->di_tv.vval.v_number; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7197 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7198 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7199 if (flags & QF_GETLIST_TITLE) |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7200 status = qf_getprop_title(qfl, retdict); |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7201 if ((status == OK) && (flags & QF_GETLIST_NR)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7202 status = dict_add_number(retdict, "nr", qf_idx + 1); |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7203 if ((status == OK) && (flags & QF_GETLIST_WINID)) |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14299
diff
changeset
|
7204 status = dict_add_number(retdict, "winid", qf_winid(qi)); |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
7205 if ((status == OK) && (flags & QF_GETLIST_ITEMS)) |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7206 status = qf_getprop_items(qi, qf_idx, eidx, retdict); |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7207 if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7208 status = qf_getprop_ctx(qfl, retdict); |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
7209 if ((status == OK) && (flags & QF_GETLIST_ID)) |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7210 status = dict_add_number(retdict, "id", qfl->qf_id); |
12465
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
7211 if ((status == OK) && (flags & QF_GETLIST_IDX)) |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7212 status = qf_getprop_idx(qfl, eidx, retdict); |
12465
805f7fd40e0d
patch 8.0.1112: can't get size or current index from quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12449
diff
changeset
|
7213 if ((status == OK) && (flags & QF_GETLIST_SIZE)) |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7214 status = dict_add_number(retdict, "size", qfl->qf_count); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7215 if ((status == OK) && (flags & QF_GETLIST_TICK)) |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7216 status = dict_add_number(retdict, "changedtick", qfl->qf_changedtick); |
14664
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7217 if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID)) |
8770189c3e22
patch 8.1.0345: cannot get the window id associated with the location list
Christian Brabandt <cb@256bit.org>
parents:
14633
diff
changeset
|
7218 status = qf_getprop_filewinid(wp, qi, retdict); |
16019
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
7219 if ((status == OK) && (flags & QF_GETLIST_QFBUFNR)) |
096b8ccd855e
patch 8.1.1015: quickfix buffer shows up in list, can't get buffer number
Bram Moolenaar <Bram@vim.org>
parents:
16001
diff
changeset
|
7220 status = qf_getprop_qfbufnr(qi, retdict); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7221 if ((status == OK) && (flags & QF_GETLIST_QFTF)) |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7222 status = qf_getprop_qftf(qfl, retdict); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7223 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7224 return status; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7225 } |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7226 |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7227 /* |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7228 * Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7229 * items in the dict 'd'. If it is a valid error entry, then set 'valid_entry' |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7230 * to TRUE. |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7231 */ |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7232 static int |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7233 qf_add_entry_from_dict( |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7234 qf_list_T *qfl, |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7235 dict_T *d, |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7236 int first_entry, |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7237 int *valid_entry) |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7238 { |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7239 static int did_bufnr_emsg; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7240 char_u *filename, *module, *pattern, *text, *type; |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
7241 int bufnum, valid, status, col, end_col, vcol, nr; |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
7242 long lnum, end_lnum; |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7243 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7244 if (first_entry) |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7245 did_bufnr_emsg = FALSE; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7246 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7247 filename = dict_get_string(d, "filename", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7248 module = dict_get_string(d, "module", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7249 bufnum = (int)dict_get_number(d, "bufnr"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7250 lnum = (int)dict_get_number(d, "lnum"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7251 end_lnum = (int)dict_get_number(d, "end_lnum"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7252 col = (int)dict_get_number(d, "col"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7253 end_col = (int)dict_get_number(d, "end_col"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7254 vcol = (int)dict_get_number(d, "vcol"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7255 nr = (int)dict_get_number(d, "nr"); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7256 type = dict_get_string(d, "type", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7257 pattern = dict_get_string(d, "pattern", TRUE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7258 text = dict_get_string(d, "text", TRUE); |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7259 if (text == NULL) |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7260 text = vim_strsave((char_u *)""); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7261 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7262 valid = TRUE; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7263 if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL)) |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7264 valid = FALSE; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7265 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7266 // Mark entries with non-existing buffer number as not valid. Give the |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7267 // error message only once. |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7268 if (bufnum != 0 && (buflist_findnr(bufnum) == NULL)) |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7269 { |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7270 if (!did_bufnr_emsg) |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7271 { |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7272 did_bufnr_emsg = TRUE; |
26602
fac6673086df
patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26518
diff
changeset
|
7273 semsg(_(e_buffer_nr_not_found), bufnum); |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7274 } |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7275 valid = FALSE; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7276 bufnum = 0; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7277 } |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7278 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7279 // If the 'valid' field is present it overrules the detected value. |
28315
62cc3b60493b
patch 8.2.4683: verbose check with dict_find() to see if a key is present
Bram Moolenaar <Bram@vim.org>
parents:
28247
diff
changeset
|
7280 if (dict_has_key(d, "valid")) |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7281 valid = (int)dict_get_bool(d, "valid", FALSE); |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7282 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7283 status = qf_add_entry(qfl, |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7284 NULL, // dir |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7285 filename, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7286 module, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7287 bufnum, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7288 text, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7289 lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
7290 end_lnum, |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7291 col, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
7292 end_col, |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7293 vcol, // vis_col |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7294 pattern, // search pattern |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7295 nr, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7296 type == NULL ? NUL : *type, |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7297 valid); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7298 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7299 vim_free(filename); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7300 vim_free(module); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7301 vim_free(pattern); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7302 vim_free(text); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7303 vim_free(type); |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7304 |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7305 if (valid) |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7306 *valid_entry = TRUE; |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7307 |
14633
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7308 return status; |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7309 } |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7310 |
462087b5c415
patch 8.1.0330: the qf_add_entries() function is too long
Christian Brabandt <cb@256bit.org>
parents:
14603
diff
changeset
|
7311 /* |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7312 * 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
|
7313 * a dictionary with item information. |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7314 */ |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7315 static int |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7316 qf_add_entries( |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7317 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
|
7318 int qf_idx, |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7319 list_T *list, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7320 char_u *title, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7321 int action) |
230 | 7322 { |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7323 qf_list_T *qfl = qf_get_list(qi, qf_idx); |
230 | 7324 listitem_T *li; |
7325 dict_T *d; | |
9175
d415c079f84e
commit https://github.com/vim/vim/commit/864293abb72d62604d8d6b458addfb43c14230c3
Christian Brabandt <cb@256bit.org>
parents:
9114
diff
changeset
|
7326 qfline_T *old_last = NULL; |
230 | 7327 int retval = OK; |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7328 int valid_entry = FALSE; |
644 | 7329 |
11449
d2f00eb352b9
patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents:
11447
diff
changeset
|
7330 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
|
7331 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7332 // make place for a new list |
3965 | 7333 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
|
7334 qf_idx = qi->qf_curlist; |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7335 qfl = qf_get_list(qi, qf_idx); |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7336 } |
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7337 else if (action == 'a' && !qf_list_empty(qfl)) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7338 // Adding to existing list, use last entry. |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7339 old_last = qfl->qf_last; |
277 | 7340 else if (action == 'r') |
6079 | 7341 { |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7342 qf_free_items(qfl); |
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7343 qf_store_title(qfl, title); |
6079 | 7344 } |
230 | 7345 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19649
diff
changeset
|
7346 FOR_ALL_LIST_ITEMS(list, li) |
230 | 7347 { |
7348 if (li->li_tv.v_type != VAR_DICT) | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7349 continue; // Skip non-dict items |
230 | 7350 |
7351 d = li->li_tv.vval.v_dict; | |
7352 if (d == NULL) | |
7353 continue; | |
7354 | |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7355 retval = qf_add_entry_from_dict(qfl, d, li == list->lv_first, |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7356 &valid_entry); |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7357 if (retval == QF_FAIL) |
230 | 7358 break; |
7359 } | |
7360 | |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7361 // Check if any valid error entries are added to the list. |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7362 if (valid_entry) |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7363 qfl->qf_nonevalid = FALSE; |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7364 else if (qfl->qf_index == 0) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7365 // no valid entry |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7366 qfl->qf_nonevalid = TRUE; |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7367 |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7368 // If not appending to the list, set the current error to the first entry |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7369 if (action != 'a') |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7370 qfl->qf_ptr = qfl->qf_start; |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7371 |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7372 // Update the current error index if not appending to the list or if the |
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7373 // list was empty before and it is not empty now. |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7374 if ((action != 'a' || qfl->qf_index == 0) && !qf_list_empty(qfl)) |
15225
a413374825dd
patch 8.1.0622: adding quickfix items marks items as valid errors
Bram Moolenaar <Bram@vim.org>
parents:
15146
diff
changeset
|
7375 qfl->qf_index = 1; |
230 | 7376 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7377 // 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
|
7378 qf_update_buffer(qi, old_last); |
230 | 7379 |
7380 return retval; | |
7381 } | |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7382 |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7383 /* |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7384 * Get the quickfix list index from 'nr' or 'id' |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7385 */ |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7386 static int |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7387 qf_setprop_get_qfidx( |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7388 qf_info_T *qi, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7389 dict_T *what, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7390 int action, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7391 int *newlist) |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7392 { |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7393 dictitem_T *di; |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7394 int qf_idx = qi->qf_curlist; // default is the current list |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7395 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7396 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
|
7397 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7398 // Use the specified quickfix/location list |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7399 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
|
7400 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7401 // for zero use the current list |
11445
461ac47c3793
patch 8.0.0606: cannot set the context for a specified quickfix list
Christian Brabandt <cb@256bit.org>
parents:
11443
diff
changeset
|
7402 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
|
7403 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
|
7404 |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7405 if ((action == ' ' || action == 'a') && qf_idx == qi->qf_listcount) |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7406 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7407 // When creating a new list, accept qf_idx pointing to the next |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7408 // non-available list and add the new list at the end of the |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7409 // stack. |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7410 *newlist = TRUE; |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
7411 qf_idx = qf_stack_empty(qi) ? 0 : qi->qf_listcount - 1; |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7412 } |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
7413 else if (qf_idx < 0 || qf_idx >= qi->qf_listcount) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7414 return INVALID_QFIDX; |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7415 else if (action != ' ') |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7416 *newlist = FALSE; // use the specified list |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7417 } |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7418 else if (di->di_tv.v_type == VAR_STRING |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7419 && di->di_tv.vval.v_string != NULL |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7420 && STRCMP(di->di_tv.vval.v_string, "$") == 0) |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
7421 { |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
7422 if (!qf_stack_empty(qi)) |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7423 qf_idx = qi->qf_listcount - 1; |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7424 else if (*newlist) |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7425 qf_idx = 0; |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7426 else |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7427 return INVALID_QFIDX; |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
7428 } |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7429 else |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7430 return INVALID_QFIDX; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7431 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7432 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7433 if (!*newlist && (di = dict_find(what, (char_u *)"id", -1)) != NULL) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
7434 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7435 // Use the quickfix/location list with the specified id |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7436 if (di->di_tv.v_type != VAR_NUMBER) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7437 return INVALID_QFIDX; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7438 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7439 return qf_id2nr(qi, di->di_tv.vval.v_number); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7440 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7441 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7442 return qf_idx; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7443 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7444 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7445 /* |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7446 * Set the quickfix list title. |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7447 */ |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7448 static int |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7449 qf_setprop_title(qf_info_T *qi, int qf_idx, dict_T *what, dictitem_T *di) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7450 { |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7451 qf_list_T *qfl = qf_get_list(qi, qf_idx); |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7452 |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7453 if (di->di_tv.v_type != VAR_STRING) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7454 return FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7455 |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7456 vim_free(qfl->qf_title); |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29071
diff
changeset
|
7457 qfl->qf_title = dict_get_string(what, "title", TRUE); |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7458 if (qf_idx == qi->qf_curlist) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7459 qf_update_win_titlevar(qi); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7460 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7461 return OK; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7462 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7463 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7464 /* |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7465 * Set quickfix list items/entries. |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7466 */ |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7467 static int |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7468 qf_setprop_items(qf_info_T *qi, int qf_idx, dictitem_T *di, int action) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7469 { |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7470 int retval = FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7471 char_u *title_save; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7472 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7473 if (di->di_tv.v_type != VAR_LIST) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7474 return FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7475 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7476 title_save = vim_strsave(qi->qf_lists[qf_idx].qf_title); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7477 retval = qf_add_entries(qi, qf_idx, di->di_tv.vval.v_list, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7478 title_save, action == ' ' ? 'a' : action); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7479 vim_free(title_save); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7480 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7481 return retval; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7482 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7483 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7484 /* |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7485 * Set quickfix list items/entries from a list of lines. |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7486 */ |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7487 static int |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7488 qf_setprop_items_from_lines( |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7489 qf_info_T *qi, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7490 int qf_idx, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7491 dict_T *what, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7492 dictitem_T *di, |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7493 int action) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7494 { |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7495 char_u *errorformat = p_efm; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7496 dictitem_T *efm_di; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7497 int retval = FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7498 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7499 // Use the user supplied errorformat settings (if present) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7500 if ((efm_di = dict_find(what, (char_u *)"efm", -1)) != NULL) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7501 { |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7502 if (efm_di->di_tv.v_type != VAR_STRING || |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7503 efm_di->di_tv.vval.v_string == NULL) |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
7504 return FAIL; |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7505 errorformat = efm_di->di_tv.vval.v_string; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7506 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7507 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7508 // Only a List value is supported |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7509 if (di->di_tv.v_type != VAR_LIST || di->di_tv.vval.v_list == NULL) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7510 return FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7511 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7512 if (action == 'r') |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7513 qf_free_items(&qi->qf_lists[qf_idx]); |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7514 if (qf_init_ext(qi, qf_idx, NULL, NULL, &di->di_tv, errorformat, |
23045
450d6e4992e1
patch 8.2.2069: the quickfix window is not updated after setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
22979
diff
changeset
|
7515 FALSE, (linenr_T)0, (linenr_T)0, NULL, NULL) >= 0) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7516 retval = OK; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7517 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7518 return retval; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7519 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7520 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7521 /* |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7522 * Set quickfix list context. |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7523 */ |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7524 static int |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7525 qf_setprop_context(qf_list_T *qfl, dictitem_T *di) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7526 { |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7527 typval_T *ctx; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7528 |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7529 free_tv(qfl->qf_ctx); |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7530 ctx = alloc_tv(); |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7531 if (ctx != NULL) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7532 copy_tv(&di->di_tv, ctx); |
14790
3ca7aba1116e
patch 8.1.0407: quickfix code mixes using the stack and a list pointer
Christian Brabandt <cb@256bit.org>
parents:
14664
diff
changeset
|
7533 qfl->qf_ctx = ctx; |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7534 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7535 return OK; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7536 } |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7537 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7538 /* |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7539 * Set the current index in the specified quickfix list |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7540 */ |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7541 static int |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7542 qf_setprop_curidx(qf_info_T *qi, qf_list_T *qfl, dictitem_T *di) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7543 { |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7544 int denote = FALSE; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7545 int newidx; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7546 int old_qfidx; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7547 qfline_T *qf_ptr; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7548 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7549 // If the specified index is '$', then use the last entry |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7550 if (di->di_tv.v_type == VAR_STRING |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7551 && di->di_tv.vval.v_string != NULL |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7552 && STRCMP(di->di_tv.vval.v_string, "$") == 0) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7553 newidx = qfl->qf_count; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7554 else |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7555 { |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7556 // Otherwise use the specified index |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7557 newidx = tv_get_number_chk(&di->di_tv, &denote); |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7558 if (denote) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7559 return FAIL; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7560 } |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7561 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7562 if (newidx < 1) // sanity check |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7563 return FAIL; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7564 if (newidx > qfl->qf_count) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7565 newidx = qfl->qf_count; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7566 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7567 old_qfidx = qfl->qf_index; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7568 qf_ptr = get_nth_entry(qfl, newidx, &newidx); |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7569 if (qf_ptr == NULL) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7570 return FAIL; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7571 qfl->qf_ptr = qf_ptr; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7572 qfl->qf_index = newidx; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7573 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7574 // If the current list is modified and it is displayed in the quickfix |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7575 // window, then Update it. |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
7576 if (qf_get_curlist(qi)->qf_id == qfl->qf_id) |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7577 qf_win_pos_update(qi, old_qfidx); |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7578 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7579 return OK; |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7580 } |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7581 |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7582 /* |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7583 * Set the current index in the specified quickfix list |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7584 */ |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7585 static int |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7586 qf_setprop_qftf(qf_info_T *qi UNUSED, qf_list_T *qfl, dictitem_T *di) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7587 { |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7588 callback_T cb; |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7589 |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
7590 free_callback(&qfl->qf_qftf_cb); |
21409
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7591 cb = get_callback(&di->di_tv); |
2c40e60017a8
patch 8.2.1255: cannot use a lambda with quickfix functions
Bram Moolenaar <Bram@vim.org>
parents:
21102
diff
changeset
|
7592 if (cb.cb_name != NULL && *cb.cb_name != NUL) |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
7593 set_callback(&qfl->qf_qftf_cb, &cb); |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7594 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7595 return OK; |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7596 } |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7597 |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7598 /* |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7599 * Set quickfix/location list properties (title, items, context). |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7600 * Also used to add items from parsing a list of lines. |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
7601 * Used by the setqflist() and setloclist() Vim script functions. |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7602 */ |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7603 static int |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7604 qf_set_properties(qf_info_T *qi, dict_T *what, int action, char_u *title) |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7605 { |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7606 dictitem_T *di; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7607 int retval = FAIL; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7608 int qf_idx; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7609 int newlist = FALSE; |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7610 qf_list_T *qfl; |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7611 |
14887
863bdbc8465b
patch 8.1.0455: checking for empty quickfix stack is not consistent
Bram Moolenaar <Bram@vim.org>
parents:
14852
diff
changeset
|
7612 if (action == ' ' || qf_stack_empty(qi)) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7613 newlist = TRUE; |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7614 |
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7615 qf_idx = qf_setprop_get_qfidx(qi, what, action, &newlist); |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7616 if (qf_idx == INVALID_QFIDX) // List not found |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7617 return FAIL; |
12287
20641a7e1fc9
patch 8.0.1023: it is not easy to identify a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
12252
diff
changeset
|
7618 |
9982
e24aa20d815c
commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents:
9931
diff
changeset
|
7619 if (newlist) |
e24aa20d815c
commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents:
9931
diff
changeset
|
7620 { |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7621 qi->qf_curlist = qf_idx; |
12048
ebd313aa5a6c
patch 8.0.0904: cannot set a location list from text
Christian Brabandt <cb@256bit.org>
parents:
11800
diff
changeset
|
7622 qf_new_list(qi, title); |
9982
e24aa20d815c
commit https://github.com/vim/vim/commit/2b529bb6260b52246e92429375d995b9b5ce76b6
Christian Brabandt <cb@256bit.org>
parents:
9931
diff
changeset
|
7623 qf_idx = qi->qf_curlist; |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7624 } |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7625 |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
7626 qfl = qf_get_list(qi, qf_idx); |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7627 if ((di = dict_find(what, (char_u *)"title", -1)) != NULL) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7628 retval = qf_setprop_title(qi, qf_idx, what, di); |
11549
f5add45f9848
patch 8.0.0657: cannot get and set quickfix list items
Christian Brabandt <cb@256bit.org>
parents:
11521
diff
changeset
|
7629 if ((di = dict_find(what, (char_u *)"items", -1)) != NULL) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7630 retval = qf_setprop_items(qi, qf_idx, di, action); |
12303
ec7a4fd21dd5
patch 8.0.1031: "text" argument for getqflist() is confusing
Christian Brabandt <cb@256bit.org>
parents:
12299
diff
changeset
|
7631 if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL) |
13760
aef8ba129a4f
patch 8.0.1752: qf_set_properties() is to long
Christian Brabandt <cb@256bit.org>
parents:
13756
diff
changeset
|
7632 retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action); |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7633 if ((di = dict_find(what, (char_u *)"context", -1)) != NULL) |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7634 retval = qf_setprop_context(qfl, di); |
15424
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7635 if ((di = dict_find(what, (char_u *)"idx", -1)) != NULL) |
90c8ff9c19ee
patch 8.1.0720: cannot easily change the current quickfx list index
Bram Moolenaar <Bram@vim.org>
parents:
15225
diff
changeset
|
7636 retval = qf_setprop_curidx(qi, qfl, di); |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7637 if ((di = dict_find(what, (char_u *)"quickfixtextfunc", -1)) != NULL) |
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
7638 retval = qf_setprop_qftf(qi, qfl, di); |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7639 |
23045
450d6e4992e1
patch 8.2.2069: the quickfix window is not updated after setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
22979
diff
changeset
|
7640 if (newlist || retval == OK) |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
7641 qf_list_changed(qfl); |
23045
450d6e4992e1
patch 8.2.2069: the quickfix window is not updated after setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
22979
diff
changeset
|
7642 if (newlist) |
450d6e4992e1
patch 8.2.2069: the quickfix window is not updated after setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
22979
diff
changeset
|
7643 qf_update_buffer(qi, NULL); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7644 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7645 return retval; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7646 } |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7647 |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7648 /* |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7649 * 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
|
7650 * 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
|
7651 */ |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7652 static void |
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7653 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
|
7654 { |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7655 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
|
7656 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
|
7657 |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7658 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
|
7659 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7660 // If the quickfix/location list window is open, then clear it |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7661 if (qi->qf_curlist < qi->qf_listcount) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
7662 qf_free(qf_get_curlist(qi)); |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7663 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
|
7664 } |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7665 |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7666 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
|
7667 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7668 // If in the location list window, then use the non-location list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7669 // window with this location list (if present) |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
7670 llwin = qf_find_win_with_loclist(qi); |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7671 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
|
7672 wp = llwin; |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7673 } |
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7674 |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7675 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
|
7676 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
|
7677 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7678 // quickfix list |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7679 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
|
7680 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
|
7681 } |
15740
2fe4a503c5ad
patch 8.1.0877: new buffer used every time the quickfix window is opened
Bram Moolenaar <Bram@vim.org>
parents:
15703
diff
changeset
|
7682 else if (qfwin != NULL) |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7683 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7684 // If the location list window is open, then create a new empty |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7685 // location list |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
7686 qf_info_T *new_ll = qf_alloc_stack(QFLT_LOCATION); |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7687 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7688 if (new_ll != NULL) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7689 { |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7690 new_ll->qf_bufnr = qfwin->w_buffer->b_fnum; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7691 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7692 // first free the list reference in the location list window |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7693 ll_free_all(&qfwin->w_llist_ref); |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7694 |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7695 qfwin->w_llist_ref = new_ll; |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7696 if (wp != qfwin) |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7697 win_set_loclist(wp, new_ll); |
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
7698 } |
11301
cc8ece2aa389
patch 8.0.0536: quickfix window not updated when freeing quickfix stack
Christian Brabandt <cb@256bit.org>
parents:
11263
diff
changeset
|
7699 } |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7700 } |
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7701 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7702 /* |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7703 * 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
|
7704 * 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
|
7705 * "action" is 'a' for add, 'r' for replace. Otherwise create a new list. |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
7706 * When "what" is not NULL then only set some properties. |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7707 */ |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7708 int |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7709 set_errorlist( |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7710 win_T *wp, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7711 list_T *list, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7712 int action, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7713 char_u *title, |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7714 dict_T *what) |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7715 { |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7716 qf_info_T *qi = &ql_info; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7717 int retval = OK; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7718 |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7719 if (wp != NULL) |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7720 { |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7721 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
|
7722 if (qi == NULL) |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7723 return FAIL; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7724 } |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7725 |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7726 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
|
7727 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7728 // Free the entire quickfix or location list stack |
11263
ae5f9f26f81c
patch 8.0.0517: there is no way to remove quickfix lists
Christian Brabandt <cb@256bit.org>
parents:
11195
diff
changeset
|
7729 qf_free_stack(wp, qi); |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7730 return OK; |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7731 } |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7732 |
21100
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7733 // A dict argument cannot be specified with a non-empty list argument |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
7734 if (list->lv_len != 0 && what != NULL) |
21100
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7735 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
7736 semsg(_(e_invalid_argument_str), |
21100
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7737 _("cannot have both a list and a \"what\" argument")); |
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7738 return FAIL; |
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7739 } |
acfda84f5661
patch 8.2.1101: no error when using wrong arguments for setqflist()
Bram Moolenaar <Bram@vim.org>
parents:
20996
diff
changeset
|
7740 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7741 incr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7742 |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7743 if (what != NULL) |
12048
ebd313aa5a6c
patch 8.0.0904: cannot set a location list from text
Christian Brabandt <cb@256bit.org>
parents:
11800
diff
changeset
|
7744 retval = qf_set_properties(qi, what, action, title); |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7745 else |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7746 { |
11449
d2f00eb352b9
patch 8.0.0608: cannot manipulate other than the current quickfix list
Christian Brabandt <cb@256bit.org>
parents:
11447
diff
changeset
|
7747 retval = qf_add_entries(qi, qi->qf_curlist, list, title, action); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7748 if (retval == OK) |
16001
416e067411ab
patch 8.1.1006: repeated code in quickfix support
Bram Moolenaar <Bram@vim.org>
parents:
15965
diff
changeset
|
7749 qf_list_changed(qf_get_curlist(qi)); |
13062
6479dadcf214
patch 8.0.1406: difficult to track changes to a quickfix list
Christian Brabandt <cb@256bit.org>
parents:
13056
diff
changeset
|
7750 } |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7751 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7752 decr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
7753 |
9850
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7754 return retval; |
67781bb0a61a
commit https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
Christian Brabandt <cb@256bit.org>
parents:
9738
diff
changeset
|
7755 } |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7756 |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
7757 /* |
26518
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7758 * Mark the quickfix context and callback function as in use for all the lists |
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7759 * in a quickfix stack. |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
7760 */ |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7761 static int |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7762 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
|
7763 { |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7764 int i; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7765 int abort = FALSE; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7766 typval_T *ctx; |
26518
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7767 callback_T *cb; |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7768 |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7769 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
|
7770 { |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7771 ctx = qi->qf_lists[i].qf_ctx; |
12084
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7772 if (ctx != NULL && ctx->v_type != VAR_NUMBER |
69ce6b3f0834
patch 8.0.0922: quickfix list always added after current one
Christian Brabandt <cb@256bit.org>
parents:
12048
diff
changeset
|
7773 && ctx->v_type != VAR_STRING && ctx->v_type != VAR_FLOAT) |
26518
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7774 abort = abort || set_ref_in_item(ctx, copyID, NULL, NULL); |
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7775 |
28451
e015d650ea9f
patch 8.2.4750: small pieces of dead code
Bram Moolenaar <Bram@vim.org>
parents:
28315
diff
changeset
|
7776 cb = &qi->qf_lists[i].qf_qftf_cb; |
26518
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7777 abort = abort || set_ref_in_callback(cb, copyID); |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7778 } |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7779 |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7780 return abort; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7781 } |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7782 |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7783 /* |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7784 * Mark the context of the quickfix list and the location lists (if present) as |
13710
b33f04873475
patch 8.0.1727: qf_get_properties() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13660
diff
changeset
|
7785 * "in use". So that garbage collection doesn't free the context. |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7786 */ |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7787 int |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7788 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
|
7789 { |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7790 int abort = FALSE; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7791 tabpage_T *tp; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7792 win_T *win; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7793 |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7794 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
|
7795 if (abort) |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7796 return abort; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7797 |
26518
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7798 abort = set_ref_in_callback(&qftf_cb, copyID); |
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7799 if (abort) |
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7800 return abort; |
13ba00ef7687
patch 8.2.3788: lambda for option that is a function may be freed
Bram Moolenaar <Bram@vim.org>
parents:
26464
diff
changeset
|
7801 |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7802 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
|
7803 { |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7804 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
|
7805 { |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7806 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
|
7807 if (abort) |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7808 return abort; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7809 } |
13074
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7810 if (IS_LL_WINDOW(win) && (win->w_llist_ref->qf_refcount == 1)) |
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7811 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7812 // In a location list window and none of the other windows is |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7813 // referring to this location list. Mark the location list |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7814 // context as still in use. |
13074
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7815 abort = mark_quickfix_ctx(win->w_llist_ref, copyID); |
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7816 if (abort) |
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7817 return abort; |
66c014c71dad
patch 8.0.1412: using free memory using setloclist()
Christian Brabandt <cb@256bit.org>
parents:
13066
diff
changeset
|
7818 } |
11412
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7819 } |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7820 |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7821 return abort; |
84baca75b7f2
patch 8.0.0590: cannot add a context to locations
Christian Brabandt <cb@256bit.org>
parents:
11398
diff
changeset
|
7822 } |
170 | 7823 #endif |
7824 | |
42 | 7825 /* |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7826 * Return the autocmd name for the :cbuffer Ex commands |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7827 */ |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7828 static char_u * |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7829 cbuffer_get_auname(cmdidx_T cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7830 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7831 switch (cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7832 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7833 case CMD_cbuffer: return (char_u *)"cbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7834 case CMD_cgetbuffer: return (char_u *)"cgetbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7835 case CMD_caddbuffer: return (char_u *)"caddbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7836 case CMD_lbuffer: return (char_u *)"lbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7837 case CMD_lgetbuffer: return (char_u *)"lgetbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7838 case CMD_laddbuffer: return (char_u *)"laddbuffer"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7839 default: return NULL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7840 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7841 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7842 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7843 /* |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7844 * Process and validate the arguments passed to the :cbuffer, :caddbuffer, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7845 * :cgetbuffer, :lbuffer, :laddbuffer, :lgetbuffer Ex commands. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7846 */ |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7847 static int |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7848 cbuffer_process_args( |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7849 exarg_T *eap, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7850 buf_T **bufp, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7851 linenr_T *line1, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7852 linenr_T *line2) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7853 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7854 buf_T *buf = NULL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7855 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7856 if (*eap->arg == NUL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7857 buf = curbuf; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7858 else if (*skipwhite(skipdigits(eap->arg)) == NUL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7859 buf = buflist_findnr(atoi((char *)eap->arg)); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7860 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7861 if (buf == NULL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7862 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26771
diff
changeset
|
7863 emsg(_(e_invalid_argument)); |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7864 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7865 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7866 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7867 if (buf->b_ml.ml_mfp == NULL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7868 { |
26952
b34ddbca305c
patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26917
diff
changeset
|
7869 emsg(_(e_buffer_is_not_loaded)); |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7870 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7871 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7872 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7873 if (eap->addr_count == 0) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7874 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7875 eap->line1 = 1; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7876 eap->line2 = buf->b_ml.ml_line_count; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7877 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7878 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7879 if (eap->line1 < 1 || eap->line1 > buf->b_ml.ml_line_count |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7880 || eap->line2 < 1 || eap->line2 > buf->b_ml.ml_line_count) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7881 { |
25064
8f2262c72178
patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
24964
diff
changeset
|
7882 emsg(_(e_invalid_range)); |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7883 return FAIL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7884 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7885 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7886 *line1 = eap->line1; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7887 *line2 = eap->line2; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7888 *bufp = buf; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7889 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7890 return OK; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7891 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7892 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7893 /* |
41 | 7894 * ":[range]cbuffer [bufnr]" command. |
657 | 7895 * ":[range]caddbuffer [bufnr]" command. |
798 | 7896 * ":[range]cgetbuffer [bufnr]" command. |
644 | 7897 * ":[range]lbuffer [bufnr]" command. |
657 | 7898 * ":[range]laddbuffer [bufnr]" command. |
798 | 7899 * ":[range]lgetbuffer [bufnr]" command. |
41 | 7900 */ |
7901 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
7902 ex_cbuffer(exarg_T *eap) |
41 | 7903 { |
7904 buf_T *buf = NULL; | |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
7905 qf_info_T *qi; |
10056
21f685af3fc1
commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
7906 char_u *au_name = NULL; |
12954
49e136457c66
patch 8.0.1353: QuickFixCmdPost is not used consistently
Christian Brabandt <cb@256bit.org>
parents:
12912
diff
changeset
|
7907 int res; |
14250
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
7908 int_u save_qfid; |
ca6ccee4823f
patch 8.1.0141: :cexpr no longer jumps to the first error
Christian Brabandt <cb@256bit.org>
parents:
14113
diff
changeset
|
7909 win_T *wp = NULL; |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7910 char_u *qf_title; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7911 linenr_T line1; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7912 linenr_T line2; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7913 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7914 au_name = cbuffer_get_auname(eap->cmdidx); |
10346
d52d97bf675e
commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents:
10281
diff
changeset
|
7915 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7916 curbuf->b_fname, TRUE, curbuf)) |
10056
21f685af3fc1
commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
7917 { |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
7918 #ifdef FEAT_EVAL |
10346
d52d97bf675e
commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents:
10281
diff
changeset
|
7919 if (aborting()) |
10056
21f685af3fc1
commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
7920 return; |
21f685af3fc1
commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
7921 #endif |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
7922 } |
10056
21f685af3fc1
commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
7923 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
7924 // Must come after autocommands. |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
7925 qi = qf_cmd_get_or_alloc_stack(eap, &wp); |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
7926 if (qi == NULL) |
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
7927 return; |
13076
7c071a3f7f8e
patch 8.0.1413: accessing freed memory in :cbuffer
Christian Brabandt <cb@256bit.org>
parents:
13074
diff
changeset
|
7928 |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7929 if (cbuffer_process_args(eap, &buf, &line1, &line2) == FAIL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7930 return; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7931 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7932 qf_title = qf_cmdtitle(*eap->cmdlinep); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7933 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7934 if (buf->b_sfname) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7935 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7936 vim_snprintf((char *)IObuff, IOSIZE, "%s (%s)", |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7937 (char *)qf_title, (char *)buf->b_sfname); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7938 qf_title = IObuff; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7939 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7940 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7941 incr_quickfix_busy(); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7942 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7943 res = qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7944 (eap->cmdidx != CMD_caddbuffer |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7945 && eap->cmdidx != CMD_laddbuffer), |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7946 line1, line2, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7947 qf_title, NULL); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7948 if (qf_stack_empty(qi)) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7949 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7950 decr_quickfix_busy(); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7951 return; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7952 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7953 if (res >= 0) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7954 qf_list_changed(qf_get_curlist(qi)); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7955 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7956 // Remember the current quickfix list identifier, so that we can |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7957 // check for autocommands changing the current quickfix list. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7958 save_qfid = qf_get_curlist(qi)->qf_id; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7959 if (au_name != NULL) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7960 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7961 buf_T *curbuf_old = curbuf; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7962 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7963 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, curbuf->b_fname, |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7964 TRUE, curbuf); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7965 if (curbuf != curbuf_old) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7966 // Autocommands changed buffer, don't jump now, "qi" may |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7967 // be invalid. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7968 res = 0; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7969 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7970 // Jump to the first error for a new list and if autocmds didn't |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7971 // free the list. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7972 if (res > 0 && (eap->cmdidx == CMD_cbuffer || |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7973 eap->cmdidx == CMD_lbuffer) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7974 && qflist_valid(wp, save_qfid)) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7975 // display the first error |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7976 qf_jump_first(qi, save_qfid, eap->forceit); |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7977 |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7978 decr_quickfix_busy(); |
41 | 7979 } |
7980 | |
532 | 7981 #if defined(FEAT_EVAL) || defined(PROTO) |
41 | 7982 /* |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7983 * Return the autocmd name for the :cexpr Ex commands. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7984 */ |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
7985 char_u * |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7986 cexpr_get_auname(cmdidx_T cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7987 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7988 switch (cmdidx) |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7989 { |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7990 case CMD_cexpr: return (char_u *)"cexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7991 case CMD_cgetexpr: return (char_u *)"cgetexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7992 case CMD_caddexpr: return (char_u *)"caddexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7993 case CMD_lexpr: return (char_u *)"lexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7994 case CMD_lgetexpr: return (char_u *)"lgetexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7995 case CMD_laddexpr: return (char_u *)"laddexpr"; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7996 default: return NULL; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7997 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7998 } |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
7999 |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8000 int |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8001 trigger_cexpr_autocmd(int cmdidx) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8002 { |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8003 char_u *au_name = cexpr_get_auname(cmdidx); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8004 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8005 if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8006 curbuf->b_fname, TRUE, curbuf)) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8007 { |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8008 if (aborting()) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8009 return FAIL; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8010 } |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8011 return OK; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8012 } |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8013 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8014 int |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8015 cexpr_core(exarg_T *eap, typval_T *tv) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8016 { |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8017 qf_info_T *qi; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8018 win_T *wp = NULL; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8019 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8020 qi = qf_cmd_get_or_alloc_stack(eap, &wp); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8021 if (qi == NULL) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8022 return FAIL; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8023 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8024 if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8025 || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL)) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8026 { |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8027 int res; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8028 int_u save_qfid; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8029 char_u *au_name = cexpr_get_auname(eap->cmdidx); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8030 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8031 incr_quickfix_busy(); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8032 res = qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm, |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8033 (eap->cmdidx != CMD_caddexpr |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8034 && eap->cmdidx != CMD_laddexpr), |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8035 (linenr_T)0, (linenr_T)0, |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8036 qf_cmdtitle(*eap->cmdlinep), NULL); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8037 if (qf_stack_empty(qi)) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8038 { |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8039 decr_quickfix_busy(); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8040 return FAIL; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8041 } |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8042 if (res >= 0) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8043 qf_list_changed(qf_get_curlist(qi)); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8044 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8045 // Remember the current quickfix list identifier, so that we can |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8046 // check for autocommands changing the current quickfix list. |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8047 save_qfid = qf_get_curlist(qi)->qf_id; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8048 if (au_name != NULL) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8049 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8050 curbuf->b_fname, TRUE, curbuf); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8051 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8052 // Jump to the first error for a new list and if autocmds didn't |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8053 // free the list. |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8054 if (res > 0 && (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8055 && qflist_valid(wp, save_qfid)) |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8056 // display the first error |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8057 qf_jump_first(qi, save_qfid, eap->forceit); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8058 decr_quickfix_busy(); |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8059 return OK; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8060 } |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8061 |
26958
d92e0d85923f
patch 8.2.4008: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26952
diff
changeset
|
8062 emsg(_(e_string_or_list_expected)); |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8063 return FAIL; |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8064 } |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8065 |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
8066 /* |
798 | 8067 * ":cexpr {expr}", ":cgetexpr {expr}", ":caddexpr {expr}" command. |
8068 * ":lexpr {expr}", ":lgetexpr {expr}", ":laddexpr {expr}" command. | |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8069 * Also: ":caddexpr", ":cgetexpr", "laddexpr" and "laddexpr". |
446 | 8070 */ |
8071 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
8072 ex_cexpr(exarg_T *eap) |
446 | 8073 { |
8074 typval_T *tv; | |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8075 |
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8076 if (trigger_cexpr_autocmd(eap->cmdidx) == FAIL) |
16215
4202f556aefe
patch 8.1.1112: duplicate code in quickfix file
Bram Moolenaar <Bram@vim.org>
parents:
16186
diff
changeset
|
8077 return; |
13090
a0c6910e7fa4
patch 8.0.1420: accessing freed memory in vimgrep
Christian Brabandt <cb@256bit.org>
parents:
13078
diff
changeset
|
8078 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8079 // Evaluate the expression. When the result is a string or a list we can |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8080 // use it to fill the errorlist. |
20996
3af71cbcfdbe
patch 8.2.1049: Vim9: leaking memory when using continuation line
Bram Moolenaar <Bram@vim.org>
parents:
20814
diff
changeset
|
8081 tv = eval_expr(eap->arg, eap); |
625 | 8082 if (tv != NULL) |
8083 { | |
24590
2818f846f099
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Bram Moolenaar <Bram@vim.org>
parents:
24574
diff
changeset
|
8084 (void)cexpr_core(eap, tv); |
625 | 8085 free_tv(tv); |
8086 } | |
446 | 8087 } |
532 | 8088 #endif |
446 | 8089 |
8090 /* | |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8091 * Get the location list for ":lhelpgrep" |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8092 */ |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8093 static qf_info_T * |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8094 hgr_get_ll(int *new_ll) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8095 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8096 win_T *wp; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8097 qf_info_T *qi; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8098 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8099 // If the current window is a help window, then use it |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8100 if (bt_help(curwin->w_buffer)) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8101 wp = curwin; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8102 else |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8103 // Find an existing help window |
13882
f48fcaa196a9
patch 8.0.1812: the qf_jump_to_usable_window() function is too long
Christian Brabandt <cb@256bit.org>
parents:
13868
diff
changeset
|
8104 wp = qf_find_help_win(); |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8105 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8106 if (wp == NULL) // Help window not found |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8107 qi = NULL; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8108 else |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8109 qi = wp->w_llist; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8110 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8111 if (qi == NULL) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8112 { |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8113 // Allocate a new location list for help text matches |
15042
e95e8b356a65
patch 8.1.0532: cannot distinguish between quickfix and location list
Bram Moolenaar <Bram@vim.org>
parents:
15024
diff
changeset
|
8114 if ((qi = qf_alloc_stack(QFLT_LOCATION)) == NULL) |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8115 return NULL; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8116 *new_ll = TRUE; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8117 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8118 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8119 return qi; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8120 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8121 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8122 /* |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8123 * Search for a pattern in a help file. |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8124 */ |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8125 static void |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8126 hgr_search_file( |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8127 qf_list_T *qfl, |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8128 char_u *fname, |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8129 vimconv_T *p_vc, |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8130 regmatch_T *p_regmatch) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8131 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8132 FILE *fd; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8133 long lnum; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8134 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8135 fd = mch_fopen((char *)fname, "r"); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8136 if (fd == NULL) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8137 return; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8138 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8139 lnum = 1; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8140 while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8141 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8142 char_u *line = IObuff; |
15603
639b8318472c
patch 8.1.0809: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
15543
diff
changeset
|
8143 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8144 // Convert a line if 'encoding' is not utf-8 and |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8145 // the line contains a non-ASCII character. |
27974
495418c6cac8
patch 8.2.4512: the find_tags_in_file() function is much too long
Bram Moolenaar <Bram@vim.org>
parents:
27938
diff
changeset
|
8146 if (p_vc->vc_type != CONV_NONE && has_non_ascii(IObuff)) |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8147 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8148 line = string_convert(p_vc, IObuff, NULL); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8149 if (line == NULL) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8150 line = IObuff; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8151 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8152 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8153 if (vim_regexec(p_regmatch, line, (colnr_T)0)) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8154 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8155 int l = (int)STRLEN(line); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8156 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8157 // remove trailing CR, LF, spaces, etc. |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8158 while (l > 0 && line[l - 1] <= ' ') |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8159 line[--l] = NUL; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8160 |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8161 if (qf_add_entry(qfl, |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8162 NULL, // dir |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8163 fname, |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
8164 NULL, |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8165 0, |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8166 line, |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8167 lnum, |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
8168 0, |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8169 (int)(p_regmatch->startp[0] - line) |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8170 + 1, // col |
24964
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
8171 (int)(p_regmatch->endp[0] - line) |
f4aa891a5ab8
patch 8.2.3019: location list only has the start position.
Bram Moolenaar <Bram@vim.org>
parents:
24962
diff
changeset
|
8172 + 1, // end_col |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8173 FALSE, // vis_col |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8174 NULL, // search pattern |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8175 0, // nr |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8176 1, // type |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8177 TRUE // valid |
16186
e12336bb8ced
patch 8.1.1098: quickfix code duplication
Bram Moolenaar <Bram@vim.org>
parents:
16115
diff
changeset
|
8178 ) == QF_FAIL) |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8179 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8180 got_int = TRUE; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8181 if (line != IObuff) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8182 vim_free(line); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8183 break; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8184 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8185 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8186 if (line != IObuff) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8187 vim_free(line); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8188 ++lnum; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8189 line_breakcheck(); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8190 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8191 fclose(fd); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8192 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8193 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8194 /* |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8195 * Search for a pattern in all the help files in the doc directory under |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8196 * the given directory. |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8197 */ |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8198 static void |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8199 hgr_search_files_in_dir( |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8200 qf_list_T *qfl, |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8201 char_u *dirname, |
15603
639b8318472c
patch 8.1.0809: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
15543
diff
changeset
|
8202 regmatch_T *p_regmatch, |
639b8318472c
patch 8.1.0809: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
15543
diff
changeset
|
8203 vimconv_T *p_vc |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8204 #ifdef FEAT_MULTI_LANG |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8205 , char_u *lang |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8206 #endif |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8207 ) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8208 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8209 int fcount; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8210 char_u **fnames; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8211 int fi; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8212 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8213 // Find all "*.txt" and "*.??x" files in the "doc" directory. |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8214 add_pathsep(dirname); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8215 STRCAT(dirname, "doc/*.\\(txt\\|??x\\)"); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8216 if (gen_expand_wildcards(1, &dirname, &fcount, |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8217 &fnames, EW_FILE|EW_SILENT) == OK |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8218 && fcount > 0) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8219 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8220 for (fi = 0; fi < fcount && !got_int; ++fi) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8221 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8222 #ifdef FEAT_MULTI_LANG |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8223 // Skip files for a different language. |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8224 if (lang != NULL |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8225 && STRNICMP(lang, fnames[fi] |
13821
98274127d675
patch 8.0.1782: no simple way to label quickfix entries
Christian Brabandt <cb@256bit.org>
parents:
13819
diff
changeset
|
8226 + STRLEN(fnames[fi]) - 3, 2) != 0 |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8227 && !(STRNICMP(lang, "en", 2) == 0 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8228 && STRNICMP("txt", fnames[fi] |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8229 + STRLEN(fnames[fi]) - 3, 3) == 0)) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8230 continue; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8231 #endif |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8232 |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8233 hgr_search_file(qfl, fnames[fi], p_vc, p_regmatch); |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8234 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8235 FreeWild(fcount, fnames); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8236 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8237 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8238 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8239 /* |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
8240 * Search for a pattern in all the help files in the 'runtimepath' |
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
8241 * and add the matches to a quickfix list. |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8242 * 'lang' is the language specifier. If supplied, then only matches in the |
13868
1282a54c1f5a
patch 8.0.1805: qf_parse_line() is too long
Christian Brabandt <cb@256bit.org>
parents:
13821
diff
changeset
|
8243 * specified language are found. |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8244 */ |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8245 static void |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8246 hgr_search_in_rtp(qf_list_T *qfl, regmatch_T *p_regmatch, char_u *lang) |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8247 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8248 char_u *p; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8249 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8250 vimconv_T vc; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8251 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8252 // Help files are in utf-8 or latin1, convert lines when 'encoding' |
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8253 // differs. |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8254 vc.vc_type = CONV_NONE; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8255 if (!enc_utf8) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8256 convert_setup(&vc, (char_u *)"utf-8", p_enc); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8257 |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8258 // Go through all the directories in 'runtimepath' |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8259 p = p_rtp; |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8260 while (*p != NUL && !got_int) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8261 { |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8262 copy_option_part(&p, NameBuff, MAXPATHL, ","); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8263 |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8264 hgr_search_files_in_dir(qfl, NameBuff, p_regmatch, &vc |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8265 #ifdef FEAT_MULTI_LANG |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8266 , lang |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8267 #endif |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8268 ); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8269 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8270 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8271 if (vc.vc_type != CONV_NONE) |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8272 convert_setup(&vc, NULL, NULL); |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8273 } |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8274 |
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8275 /* |
7 | 8276 * ":helpgrep {pattern}" |
8277 */ | |
8278 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
8279 ex_helpgrep(exarg_T *eap) |
7 | 8280 { |
8281 regmatch_T regmatch; | |
8282 char_u *save_cpo; | |
27855
44a552776007
patch 8.2.4453: :helpgrep may free an option that was not allocated
Bram Moolenaar <Bram@vim.org>
parents:
27752
diff
changeset
|
8283 int save_cpo_allocated; |
644 | 8284 qf_info_T *qi = &ql_info; |
659 | 8285 int new_qi = FALSE; |
3269 | 8286 char_u *au_name = NULL; |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8287 char_u *lang = NULL; |
23493
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8288 int updated = FALSE; |
7 | 8289 |
3269 | 8290 switch (eap->cmdidx) |
8291 { | |
8292 case CMD_helpgrep: au_name = (char_u *)"helpgrep"; break; | |
8293 case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break; | |
8294 default: break; | |
8295 } | |
10346
d52d97bf675e
commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents:
10281
diff
changeset
|
8296 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
|
8297 curbuf->b_fname, TRUE, curbuf)) |
3269 | 8298 { |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
8299 #ifdef FEAT_EVAL |
10346
d52d97bf675e
commit https://github.com/vim/vim/commit/21662be2211675824df1771c7f169948ede40c41
Christian Brabandt <cb@256bit.org>
parents:
10281
diff
changeset
|
8300 if (aborting()) |
3269 | 8301 return; |
8302 #endif | |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13252
diff
changeset
|
8303 } |
3269 | 8304 |
14550
60b9b6196644
patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents:
14507
diff
changeset
|
8305 if (is_loclist_cmd(eap->cmdidx)) |
659 | 8306 { |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8307 qi = hgr_get_ll(&new_qi); |
659 | 8308 if (qi == NULL) |
13764
7bba231fdddc
patch 8.0.1754: ex_helpgrep() is too long
Christian Brabandt <cb@256bit.org>
parents:
13760
diff
changeset
|
8309 return; |
659 | 8310 } |
8311 | |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
8312 // Make 'cpoptions' empty, the 'l' flag should not be used here. |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
8313 save_cpo = p_cpo; |
27855
44a552776007
patch 8.2.4453: :helpgrep may free an option that was not allocated
Bram Moolenaar <Bram@vim.org>
parents:
27752
diff
changeset
|
8314 save_cpo_allocated = is_option_allocated("cpo"); |
16115
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
8315 p_cpo = empty_option; |
91da8cd462ef
patch 8.1.1062: quickfix code is repeated
Bram Moolenaar <Bram@vim.org>
parents:
16062
diff
changeset
|
8316 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8317 incr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8318 |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8319 #ifdef FEAT_MULTI_LANG |
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8320 // Check for a specified language |
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8321 lang = check_help_lang(eap->arg); |
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8322 #endif |
7 | 8323 regmatch.regprog = vim_regcomp(eap->arg, RE_MAGIC + RE_STRING); |
8324 regmatch.rm_ic = FALSE; | |
8325 if (regmatch.regprog != NULL) | |
8326 { | |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8327 qf_list_T *qfl; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8328 |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8329 // create a new quickfix list |
13921
3b6c29f8c1a2
patch 8.0.1831: sometimes the quickfix title is incorrectly prefixed with ':'
Christian Brabandt <cb@256bit.org>
parents:
13882
diff
changeset
|
8330 qf_new_list(qi, qf_cmdtitle(*eap->cmdlinep)); |
16062
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8331 qfl = qf_get_curlist(qi); |
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8332 |
d1efe0dbe6b0
patch 8.1.1036: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16050
diff
changeset
|
8333 hgr_search_in_rtp(qfl, ®match, lang); |
3257 | 8334 |
4805
66803af09906
updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents:
4371
diff
changeset
|
8335 vim_regfree(regmatch.regprog); |
7 | 8336 |
14915
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8337 qfl->qf_nonevalid = FALSE; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8338 qfl->qf_ptr = qfl->qf_start; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8339 qfl->qf_index = 1; |
f508bb2fb808
patch 8.1.0469: too often indexing in qf_lists[]
Bram Moolenaar <Bram@vim.org>
parents:
14899
diff
changeset
|
8340 qf_list_changed(qfl); |
23493
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8341 updated = TRUE; |
7 | 8342 } |
8343 | |
1672 | 8344 if (p_cpo == empty_option) |
8345 p_cpo = save_cpo; | |
8346 else | |
23493
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8347 { |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8348 // Darn, some plugin changed the value. If it's still empty it was |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8349 // changed and restored, need to restore in the complicated way. |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8350 if (*p_cpo == NUL) |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28451
diff
changeset
|
8351 set_option_value_give_err((char_u *)"cpo", 0L, save_cpo, 0); |
27855
44a552776007
patch 8.2.4453: :helpgrep may free an option that was not allocated
Bram Moolenaar <Bram@vim.org>
parents:
27752
diff
changeset
|
8352 if (save_cpo_allocated) |
44a552776007
patch 8.2.4453: :helpgrep may free an option that was not allocated
Bram Moolenaar <Bram@vim.org>
parents:
27752
diff
changeset
|
8353 free_string_option(save_cpo); |
23493
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8354 } |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8355 |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8356 if (updated) |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8357 // This may open a window and source scripts, do this after 'cpo' was |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8358 // restored. |
f8382c4e6551
patch 8.2.2289: Vim9: 'cpo' can become empty
Bram Moolenaar <Bram@vim.org>
parents:
23278
diff
changeset
|
8359 qf_update_buffer(qi, NULL); |
7 | 8360 |
3269 | 8361 if (au_name != NULL) |
8362 { | |
8363 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, | |
8364 curbuf->b_fname, TRUE, curbuf); | |
20764
3c61d8ec36af
patch 8.2.0934: lhelpgrep twice in help window doesn't jump to the help topic
Bram Moolenaar <Bram@vim.org>
parents:
20762
diff
changeset
|
8365 // When adding a location list to an existing location list stack, |
3c61d8ec36af
patch 8.2.0934: lhelpgrep twice in help window doesn't jump to the help topic
Bram Moolenaar <Bram@vim.org>
parents:
20762
diff
changeset
|
8366 // if the autocmd made the stack invalid, then just return. |
3c61d8ec36af
patch 8.2.0934: lhelpgrep twice in help window doesn't jump to the help topic
Bram Moolenaar <Bram@vim.org>
parents:
20762
diff
changeset
|
8367 if (!new_qi && IS_LL_STACK(qi) && qf_find_win_with_loclist(qi) == NULL) |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8368 { |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8369 decr_quickfix_busy(); |
3269 | 8370 return; |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8371 } |
3269 | 8372 } |
8373 | |
14899
e35d98651e56
patch 8.1.0461: quickfix code uses too many /* */ comments
Bram Moolenaar <Bram@vim.org>
parents:
14887
diff
changeset
|
8374 // Jump to first match. |
16050
c19853508d3e
patch 8.1.1030: quickfix function arguments are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
16019
diff
changeset
|
8375 if (!qf_list_empty(qf_get_curlist(qi))) |
659 | 8376 qf_jump(qi, 0, 0, FALSE); |
9 | 8377 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
8378 semsg(_(e_no_match_str_2), eap->arg); |
659 | 8379 |
14954
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8380 decr_quickfix_busy(); |
69d2749a6a2f
patch 8.1.0488: using freed memory in quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
14915
diff
changeset
|
8381 |
659 | 8382 if (eap->cmdidx == CMD_lhelpgrep) |
8383 { | |
14603
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8384 // If the help window is not opened or if it already points to the |
d1b69129db99
patch 8.1.0315: helpgrep with language doesn't work properly
Christian Brabandt <cb@256bit.org>
parents:
14560
diff
changeset
|
8385 // correct location list, then free the new location list. |
11800
5ceaecedbad2
patch 8.0.0782: using freed memory in quickfix code
Christian Brabandt <cb@256bit.org>
parents:
11788
diff
changeset
|
8386 if (!bt_help(curwin->w_buffer) || curwin->w_llist == qi) |
659 | 8387 { |
8388 if (new_qi) | |
8389 ll_free_all(&qi); | |
8390 } | |
27873
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
8391 else if (curwin->w_llist == NULL && new_qi) |
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
8392 // current window didn't have a location list associated with it |
d1af65b322d0
patch 8.2.4462: not enough testing for quickfix code
Bram Moolenaar <Bram@vim.org>
parents:
27855
diff
changeset
|
8393 // before. Associate the new location list now. |
659 | 8394 curwin->w_llist = qi; |
8395 } | |
7 | 8396 } |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18697
diff
changeset
|
8397 #endif // FEAT_QUICKFIX |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8398 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8399 #if defined(FEAT_EVAL) || defined(PROTO) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8400 # ifdef FEAT_QUICKFIX |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8401 static void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8402 get_qf_loc_list(int is_qf, win_T *wp, typval_T *what_arg, typval_T *rettv) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8403 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8404 if (what_arg->v_type == VAR_UNKNOWN) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8405 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8406 if (rettv_list_alloc(rettv) == OK) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8407 if (is_qf || wp != NULL) |
20631
d6827bd31d1d
patch 8.2.0869: it is not possible to customize the quickfix window contents
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
8408 (void)get_errorlist(NULL, wp, -1, 0, rettv->vval.v_list); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8409 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8410 else |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8411 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8412 if (rettv_dict_alloc(rettv) == OK) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8413 if (is_qf || (wp != NULL)) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8414 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8415 if (what_arg->v_type == VAR_DICT) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8416 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8417 dict_T *d = what_arg->vval.v_dict; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8418 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8419 if (d != NULL) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8420 qf_get_properties(wp, d, rettv->vval.v_dict); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8421 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8422 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
8423 emsg(_(e_dictionary_required)); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8424 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8425 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8426 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8427 # endif |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8428 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8429 /* |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8430 * "getloclist()" function |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8431 */ |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8432 void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8433 f_getloclist(typval_T *argvars UNUSED, typval_T *rettv UNUSED) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8434 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8435 # ifdef FEAT_QUICKFIX |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8436 win_T *wp; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8437 |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8438 if (in_vim9script() |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8439 && (check_for_number_arg(argvars, 0) == FAIL |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8440 || check_for_opt_dict_arg(argvars, 1) == FAIL)) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8441 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8442 |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8443 wp = find_win_by_nr_or_id(&argvars[0]); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8444 get_qf_loc_list(FALSE, wp, &argvars[1], rettv); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8445 # endif |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8446 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8447 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8448 /* |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8449 * "getqflist()" function |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8450 */ |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8451 void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8452 f_getqflist(typval_T *argvars UNUSED, typval_T *rettv UNUSED) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8453 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8454 # ifdef FEAT_QUICKFIX |
25384
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8455 if (in_vim9script() && check_for_opt_dict_arg(argvars, 0) == FAIL) |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8456 return; |
e8e2c4d33b9b
patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents:
25320
diff
changeset
|
8457 |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8458 get_qf_loc_list(TRUE, NULL, &argvars[0], rettv); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8459 # endif |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8460 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8461 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8462 /* |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8463 * Used by "setqflist()" and "setloclist()" functions |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8464 */ |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8465 static void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8466 set_qf_ll_list( |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8467 win_T *wp UNUSED, |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8468 typval_T *list_arg UNUSED, |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8469 typval_T *action_arg UNUSED, |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8470 typval_T *what_arg UNUSED, |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8471 typval_T *rettv) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8472 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8473 # ifdef FEAT_QUICKFIX |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8474 char_u *act; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8475 int action = 0; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8476 static int recursive = 0; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8477 # endif |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8478 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8479 rettv->vval.v_number = -1; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8480 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8481 # ifdef FEAT_QUICKFIX |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8482 if (list_arg->v_type != VAR_LIST) |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
8483 emsg(_(e_list_required)); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8484 else if (recursive != 0) |
26883
7f150a4936f2
patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
8485 emsg(_(e_autocommand_caused_recursive_behavior)); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8486 else |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8487 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8488 list_T *l = list_arg->vval.v_list; |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8489 dict_T *what = NULL; |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8490 int valid_dict = TRUE; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8491 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8492 if (action_arg->v_type == VAR_STRING) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8493 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8494 act = tv_get_string_chk(action_arg); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8495 if (act == NULL) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8496 return; // type error; errmsg already given |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8497 if ((*act == 'a' || *act == 'r' || *act == ' ' || *act == 'f') && |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8498 act[1] == NUL) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8499 action = *act; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8500 else |
26966
ac75c145f0a9
patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26958
diff
changeset
|
8501 semsg(_(e_invalid_action_str_1), act); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8502 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8503 else if (action_arg->v_type == VAR_UNKNOWN) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8504 action = ' '; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8505 else |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
8506 emsg(_(e_string_required)); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8507 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8508 if (action_arg->v_type != VAR_UNKNOWN |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8509 && what_arg->v_type != VAR_UNKNOWN) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8510 { |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8511 if (what_arg->v_type == VAR_DICT && what_arg->vval.v_dict != NULL) |
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8512 what = what_arg->vval.v_dict; |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8513 else |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8514 { |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26865
diff
changeset
|
8515 emsg(_(e_dictionary_required)); |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8516 valid_dict = FALSE; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8517 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8518 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8519 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8520 ++recursive; |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8521 if (l != NULL && action && valid_dict |
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8522 && set_errorlist(wp, l, action, |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8523 (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), |
21102
ebacf460b1b3
patch 8.2.1102: Coverity gets confused by an unnecessary NULL check
Bram Moolenaar <Bram@vim.org>
parents:
21100
diff
changeset
|
8524 what) == OK) |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8525 rettv->vval.v_number = 0; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8526 --recursive; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8527 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8528 # endif |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8529 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8530 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8531 /* |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8532 * "setloclist()" function |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8533 */ |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8534 void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8535 f_setloclist(typval_T *argvars, typval_T *rettv) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8536 { |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8537 win_T *win; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8538 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8539 rettv->vval.v_number = -1; |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8540 |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8541 if (in_vim9script() |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8542 && (check_for_number_arg(argvars, 0) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8543 || check_for_list_arg(argvars, 1) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8544 || check_for_opt_string_arg(argvars, 2) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8545 || (argvars[2].v_type != VAR_UNKNOWN |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8546 && check_for_opt_dict_arg(argvars, 3) == FAIL))) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8547 return; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8548 |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8549 win = find_win_by_nr_or_id(&argvars[0]); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8550 if (win != NULL) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8551 set_qf_ll_list(win, &argvars[1], &argvars[2], &argvars[3], rettv); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8552 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8553 |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8554 /* |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8555 * "setqflist()" function |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8556 */ |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8557 void |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8558 f_setqflist(typval_T *argvars, typval_T *rettv) |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8559 { |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8560 if (in_vim9script() |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8561 && (check_for_list_arg(argvars, 0) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8562 || check_for_opt_string_arg(argvars, 1) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8563 || (argvars[1].v_type != VAR_UNKNOWN |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8564 && check_for_opt_dict_arg(argvars, 2) == FAIL))) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8565 return; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
25254
diff
changeset
|
8566 |
17940
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8567 set_qf_ll_list(NULL, &argvars[0], &argvars[1], &argvars[2], rettv); |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8568 } |
079e10a49ea1
patch 8.1.1966: some code in options.c fits better elsewhere
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
8569 #endif |