Mercurial > vim
annotate src/ex_cmds2.c @ 21059:90872dbd2bfe
Added tag v8.2.1080 for changeset 111f877e63d96a2d6e7efeaa7f7555506a99ac9a
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 28 Jun 2020 18:45:05 +0200 |
parents | 69055d27e85e |
children | b32b67a108f2 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
9812
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 * ex_cmds2.c: some more functions for command line commands | |
12 */ | |
13 | |
14 #include "vim.h" | |
15 #include "version.h" | |
16 | |
17 /* | |
18 * If 'autowrite' option set, try to write the file. | |
19 * Careful: autocommands may make "buf" invalid! | |
20 * | |
21 * return FAIL for failure, OK otherwise | |
22 */ | |
23 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
24 autowrite(buf_T *buf, int forceit) |
7 | 25 { |
1069 | 26 int r; |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
27 bufref_T bufref; |
1069 | 28 |
7 | 29 if (!(p_aw || p_awa) || !p_write |
30 #ifdef FEAT_QUICKFIX | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
31 // never autowrite a "nofile" or "nowrite" buffer |
1069 | 32 || bt_dontwrite(buf) |
7 | 33 #endif |
1069 | 34 || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL) |
7 | 35 return FAIL; |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
36 set_bufref(&bufref, buf); |
1069 | 37 r = buf_write_all(buf, forceit); |
38 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
39 // Writing may succeed but the buffer still changed, e.g., when there is a |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
40 // conversion error. We do want to return FAIL then. |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
41 if (bufref_valid(&bufref) && bufIsChanged(buf)) |
1069 | 42 r = FAIL; |
43 return r; | |
7 | 44 } |
45 | |
46 /* | |
14642
96858d612aff
patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
47 * Flush all buffers, except the ones that are readonly or are never written. |
7 | 48 */ |
49 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
50 autowrite_all(void) |
7 | 51 { |
52 buf_T *buf; | |
53 | |
54 if (!(p_aw || p_awa) || !p_write) | |
55 return; | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
56 FOR_ALL_BUFFERS(buf) |
14642
96858d612aff
patch 8.1.0334: 'autowrite' takes effect when buffer is not to be written
Christian Brabandt <cb@256bit.org>
parents:
14303
diff
changeset
|
57 if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf)) |
7 | 58 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
59 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
60 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
61 set_bufref(&bufref, buf); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
62 |
7 | 63 (void)buf_write_all(buf, FALSE); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
64 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
65 // an autocommand may have deleted the buffer |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
66 if (!bufref_valid(&bufref)) |
7 | 67 buf = firstbuf; |
68 } | |
69 } | |
70 | |
71 /* | |
5464 | 72 * Return TRUE if buffer was changed and cannot be abandoned. |
73 * For flags use the CCGD_ values. | |
7 | 74 */ |
75 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
76 check_changed(buf_T *buf, int flags) |
7 | 77 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
78 int forceit = (flags & CCGD_FORCEIT); |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
79 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
80 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
81 set_bufref(&bufref, buf); |
5464 | 82 |
7 | 83 if ( !forceit |
84 && bufIsChanged(buf) | |
5464 | 85 && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1) |
86 && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL)) | |
7 | 87 { |
88 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) | |
89 if ((p_confirm || cmdmod.confirm) && p_write) | |
90 { | |
91 buf_T *buf2; | |
92 int count = 0; | |
93 | |
5464 | 94 if (flags & CCGD_ALLBUF) |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
95 FOR_ALL_BUFFERS(buf2) |
7 | 96 if (bufIsChanged(buf2) |
97 && (buf2->b_ffname != NULL | |
98 # ifdef FEAT_BROWSE | |
99 || cmdmod.browse | |
100 # endif | |
101 )) | |
102 ++count; | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
103 if (!bufref_valid(&bufref)) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
104 // Autocommand deleted buffer, oops! It's not changed now. |
7 | 105 return FALSE; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
106 |
7 | 107 dialog_changed(buf, count > 1); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
108 |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
109 if (!bufref_valid(&bufref)) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
110 // Autocommand deleted buffer, oops! It's not changed now. |
7 | 111 return FALSE; |
112 return bufIsChanged(buf); | |
113 } | |
114 #endif | |
5464 | 115 if (flags & CCGD_EXCMD) |
12146
59c1e09cf1a9
patch 8.0.0953: get "no write since last change" error in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12039
diff
changeset
|
116 no_write_message(); |
5464 | 117 else |
13302
b5806be0b36d
patch 8.0.1525: using :wqa exits even if a job runs in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
13274
diff
changeset
|
118 no_write_message_nobang(curbuf); |
7 | 119 return TRUE; |
120 } | |
121 return FALSE; | |
122 } | |
123 | |
124 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO) | |
125 | |
126 #if defined(FEAT_BROWSE) || defined(PROTO) | |
127 /* | |
128 * When wanting to write a file without a file name, ask the user for a name. | |
129 */ | |
130 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
131 browse_save_fname(buf_T *buf) |
7 | 132 { |
133 if (buf->b_fname == NULL) | |
134 { | |
135 char_u *fname; | |
136 | |
29 | 137 fname = do_browse(BROWSE_SAVE, (char_u *)_("Save As"), |
138 NULL, NULL, NULL, NULL, buf); | |
7 | 139 if (fname != NULL) |
140 { | |
141 if (setfname(buf, fname, NULL, TRUE) == OK) | |
142 buf->b_flags |= BF_NOTEDITED; | |
143 vim_free(fname); | |
144 } | |
145 } | |
146 } | |
147 #endif | |
148 | |
149 /* | |
2849 | 150 * Ask the user what to do when abandoning a changed buffer. |
7 | 151 * Must check 'write' option first! |
152 */ | |
153 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
154 dialog_changed( |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
155 buf_T *buf, |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
156 int checkall) // may abandon all changed buffers |
7 | 157 { |
2770 | 158 char_u buff[DIALOG_MSG_SIZE]; |
7 | 159 int ret; |
160 buf_T *buf2; | |
3486 | 161 exarg_T ea; |
7 | 162 |
12206
bd8d767fb36f
patch 8.0.0983: unnecessary check for NULL pointer
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
163 dialog_msg(buff, _("Save changes to \"%s\"?"), buf->b_fname); |
7 | 164 if (checkall) |
165 ret = vim_dialog_yesnoallcancel(VIM_QUESTION, NULL, buff, 1); | |
166 else | |
167 ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1); | |
168 | |
16619
8f0ea605ec96
patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
16594
diff
changeset
|
169 // Init ea pseudo-structure, this is needed for the check_overwrite() |
8f0ea605ec96
patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
16594
diff
changeset
|
170 // function. |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
171 CLEAR_FIELD(ea); |
3486 | 172 |
7 | 173 if (ret == VIM_YES) |
174 { | |
175 #ifdef FEAT_BROWSE | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
176 // May get file name, when there is none |
7 | 177 browse_save_fname(buf); |
178 #endif | |
3486 | 179 if (buf->b_fname != NULL && check_overwrite(&ea, buf, |
180 buf->b_fname, buf->b_ffname, FALSE) == OK) | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
181 // didn't hit Cancel |
7 | 182 (void)buf_write_all(buf, FALSE); |
183 } | |
184 else if (ret == VIM_NO) | |
185 { | |
16996
d5e1e09a829f
patch 8.1.1498: ":write" increments b:changedtick even though nothing changed
Bram Moolenaar <Bram@vim.org>
parents:
16874
diff
changeset
|
186 unchanged(buf, TRUE, FALSE); |
7 | 187 } |
188 else if (ret == VIM_ALL) | |
189 { | |
190 /* | |
191 * Write all modified files that can be written. | |
192 * Skip readonly buffers, these need to be confirmed | |
193 * individually. | |
194 */ | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
195 FOR_ALL_BUFFERS(buf2) |
7 | 196 { |
197 if (bufIsChanged(buf2) | |
198 && (buf2->b_ffname != NULL | |
199 #ifdef FEAT_BROWSE | |
200 || cmdmod.browse | |
201 #endif | |
202 ) | |
203 && !buf2->b_p_ro) | |
204 { | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
205 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
206 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
207 set_bufref(&bufref, buf2); |
7 | 208 #ifdef FEAT_BROWSE |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
209 // May get file name, when there is none |
7 | 210 browse_save_fname(buf2); |
211 #endif | |
3486 | 212 if (buf2->b_fname != NULL && check_overwrite(&ea, buf2, |
213 buf2->b_fname, buf2->b_ffname, FALSE) == OK) | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
214 // didn't hit Cancel |
7 | 215 (void)buf_write_all(buf2, FALSE); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
216 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
217 // an autocommand may have deleted the buffer |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
218 if (!bufref_valid(&bufref)) |
7 | 219 buf2 = firstbuf; |
220 } | |
221 } | |
222 } | |
223 else if (ret == VIM_DISCARDALL) | |
224 { | |
225 /* | |
226 * mark all buffers as unchanged | |
227 */ | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
228 FOR_ALL_BUFFERS(buf2) |
16996
d5e1e09a829f
patch 8.1.1498: ":write" increments b:changedtick even though nothing changed
Bram Moolenaar <Bram@vim.org>
parents:
16874
diff
changeset
|
229 unchanged(buf2, TRUE, FALSE); |
7 | 230 } |
231 } | |
232 #endif | |
233 | |
234 /* | |
235 * Return TRUE if the buffer "buf" can be abandoned, either by making it | |
236 * hidden, autowriting it or unloading it. | |
237 */ | |
238 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
239 can_abandon(buf_T *buf, int forceit) |
7 | 240 { |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
241 return ( buf_hide(buf) |
7 | 242 || !bufIsChanged(buf) |
243 || buf->b_nwindows > 1 | |
244 || autowrite(buf, forceit) == OK | |
245 || forceit); | |
246 } | |
247 | |
3429 | 248 /* |
249 * Add a buffer number to "bufnrs", unless it's already there. | |
250 */ | |
251 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
252 add_bufnum(int *bufnrs, int *bufnump, int nr) |
3429 | 253 { |
254 int i; | |
255 | |
256 for (i = 0; i < *bufnump; ++i) | |
257 if (bufnrs[i] == nr) | |
258 return; | |
259 bufnrs[*bufnump] = nr; | |
260 *bufnump = *bufnump + 1; | |
261 } | |
262 | |
7 | 263 /* |
264 * Return TRUE if any buffer was changed and cannot be abandoned. | |
265 * That changed buffer becomes the current buffer. | |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
266 * When "unload" is TRUE the current buffer is unloaded instead of making it |
7469
15eefe1b0dad
commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents:
7107
diff
changeset
|
267 * hidden. This is used for ":q!". |
7 | 268 */ |
269 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
270 check_changed_any( |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
271 int hidden, // Only check hidden buffers |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
272 int unload) |
7 | 273 { |
3429 | 274 int ret = FALSE; |
7 | 275 buf_T *buf; |
276 int save; | |
3429 | 277 int i; |
278 int bufnum = 0; | |
279 int bufcount = 0; | |
280 int *bufnrs; | |
281 tabpage_T *tp; | |
7 | 282 win_T *wp; |
283 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
284 // Make a list of all buffers, with the most important ones first. |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
285 FOR_ALL_BUFFERS(buf) |
3429 | 286 ++bufcount; |
287 | |
288 if (bufcount == 0) | |
289 return FALSE; | |
290 | |
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
|
291 bufnrs = ALLOC_MULT(int, bufcount); |
3429 | 292 if (bufnrs == NULL) |
293 return FALSE; | |
294 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
295 // curbuf |
3429 | 296 bufnrs[bufnum++] = curbuf->b_fnum; |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
297 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
298 // buffers in current tab |
3429 | 299 FOR_ALL_WINDOWS(wp) |
300 if (wp->w_buffer != curbuf) | |
301 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); | |
302 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
303 // buffers in other tabs |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
304 FOR_ALL_TABPAGES(tp) |
3429 | 305 if (tp != curtab) |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19396
diff
changeset
|
306 FOR_ALL_WINDOWS_IN_TAB(tp, wp) |
3429 | 307 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
308 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
309 // any other buffer |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
310 FOR_ALL_BUFFERS(buf) |
3429 | 311 add_bufnum(bufnrs, &bufnum, buf->b_fnum); |
312 | |
313 for (i = 0; i < bufnum; ++i) | |
7 | 314 { |
3429 | 315 buf = buflist_findnr(bufnrs[i]); |
316 if (buf == NULL) | |
317 continue; | |
318 if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf)) | |
7 | 319 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
320 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
321 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
322 set_bufref(&bufref, buf); |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
323 #ifdef FEAT_TERMINAL |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
324 if (term_job_running(buf->b_term)) |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
325 { |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
326 if (term_try_stop_job(buf) == FAIL) |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
327 break; |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
328 } |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
329 else |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
330 #endif |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
331 // Try auto-writing the buffer. If this fails but the buffer no |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
332 // longer exists it's not changed, that's OK. |
5464 | 333 if (check_changed(buf, (p_awa ? CCGD_AW : 0) |
334 | CCGD_MULTWIN | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
335 | CCGD_ALLBUF) && bufref_valid(&bufref)) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
336 break; // didn't save - still changes |
7 | 337 } |
338 } | |
339 | |
3429 | 340 if (i >= bufnum) |
341 goto theend; | |
342 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
343 // Get here if "buf" cannot be abandoned. |
3429 | 344 ret = TRUE; |
7 | 345 exiting = FALSE; |
346 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) | |
347 /* | |
348 * When ":confirm" used, don't give an error message. | |
349 */ | |
350 if (!(p_confirm || cmdmod.confirm)) | |
351 #endif | |
352 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
353 // There must be a wait_return for this message, do_buffer() |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
354 // may cause a redraw. But wait_return() is a no-op when vgetc() |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
355 // is busy (Quit used from window menu), then make sure we don't |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
356 // cause a scroll up. |
823 | 357 if (vgetc_busy > 0) |
7 | 358 { |
359 msg_row = cmdline_row; | |
360 msg_col = 0; | |
361 msg_didout = FALSE; | |
362 } | |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
363 if ( |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
364 #ifdef FEAT_TERMINAL |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
365 term_job_running(buf->b_term) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
366 ? semsg(_("E947: Job still running in buffer \"%s\""), |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
367 buf->b_fname) |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
368 : |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
369 #endif |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
370 semsg(_("E162: No write since last change for buffer \"%s\""), |
3839 | 371 buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) |
7 | 372 { |
373 save = no_wait_return; | |
374 no_wait_return = FALSE; | |
375 wait_return(FALSE); | |
376 no_wait_return = save; | |
377 } | |
378 } | |
379 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
380 // Try to find a window that contains the buffer. |
7 | 381 if (buf != curbuf) |
3429 | 382 FOR_ALL_TAB_WINDOWS(tp, wp) |
7 | 383 if (wp->w_buffer == buf) |
384 { | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
385 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
386 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
387 set_bufref(&bufref, buf); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
388 |
3429 | 389 goto_tabpage_win(tp, wp); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
390 |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
391 // Paranoia: did autocmd wipe out the buffer with changes? |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
392 if (!bufref_valid(&bufref)) |
3429 | 393 goto theend; |
394 goto buf_found; | |
7 | 395 } |
3429 | 396 buf_found: |
7 | 397 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
398 // Open the changed buffer in the current window. |
7 | 399 if (buf != curbuf) |
7469
15eefe1b0dad
commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents:
7107
diff
changeset
|
400 set_curbuf(buf, unload ? DOBUF_UNLOAD : DOBUF_GOTO); |
7 | 401 |
3429 | 402 theend: |
403 vim_free(bufnrs); | |
404 return ret; | |
7 | 405 } |
406 | |
407 /* | |
408 * return FAIL if there is no file name, OK if there is one | |
409 * give error message for FAIL | |
410 */ | |
411 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
412 check_fname(void) |
7 | 413 { |
414 if (curbuf->b_ffname == NULL) | |
415 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
416 emsg(_(e_noname)); |
7 | 417 return FAIL; |
418 } | |
419 return OK; | |
420 } | |
421 | |
422 /* | |
423 * flush the contents of a buffer, unless it has no file name | |
424 * | |
425 * return FAIL for failure, OK otherwise | |
426 */ | |
427 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
428 buf_write_all(buf_T *buf, int forceit) |
7 | 429 { |
430 int retval; | |
431 buf_T *old_curbuf = curbuf; | |
432 | |
433 retval = (buf_write(buf, buf->b_ffname, buf->b_fname, | |
434 (linenr_T)1, buf->b_ml.ml_line_count, NULL, | |
435 FALSE, forceit, TRUE, FALSE)); | |
436 if (curbuf != old_curbuf) | |
16 | 437 { |
11158
501f46f7644c
patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents:
11129
diff
changeset
|
438 msg_source(HL_ATTR(HLF_W)); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
439 msg(_("Warning: Entered other buffer unexpectedly (check autocommands)")); |
16 | 440 } |
7 | 441 return retval; |
442 } | |
443 | |
444 /* | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
445 * ":argdo", ":windo", ":bufdo", ":tabdo", ":cdo", ":ldo", ":cfdo" and ":lfdo" |
7 | 446 */ |
447 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
448 ex_listdo(exarg_T *eap) |
7 | 449 { |
450 int i; | |
685 | 451 win_T *wp; |
452 tabpage_T *tp; | |
6641 | 453 buf_T *buf = curbuf; |
7 | 454 int next_fnum = 0; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
455 #if defined(FEAT_SYN_HL) |
7 | 456 char_u *save_ei = NULL; |
457 #endif | |
39 | 458 char_u *p_shm_save; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
459 #ifdef FEAT_QUICKFIX |
7107
84efaf06f195
commit https://github.com/vim/vim/commit/ed84b76021df763619cabaedddc44eb5ee849136
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
460 int qf_size = 0; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
461 int qf_idx; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
462 #endif |
7 | 463 |
8220
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
464 #ifndef FEAT_QUICKFIX |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
465 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo || |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
466 eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
467 { |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
468 ex_ni(eap); |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
469 return; |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
470 } |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
471 #endif |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
472 |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
473 #if defined(FEAT_SYN_HL) |
819 | 474 if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo) |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
475 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
476 // Don't do syntax HL autocommands. Skipping the syntax file is a |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
477 // great speed improvement. |
123 | 478 save_ei = au_event_disable(",Syntax"); |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
479 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19396
diff
changeset
|
480 FOR_ALL_BUFFERS(buf) |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
481 buf->b_flags &= ~BF_SYN_SET; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
482 buf = curbuf; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
483 } |
7 | 484 #endif |
6116 | 485 #ifdef FEAT_CLIPBOARD |
486 start_global_changes(); | |
487 #endif | |
7 | 488 |
489 if (eap->cmdidx == CMD_windo | |
685 | 490 || eap->cmdidx == CMD_tabdo |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
491 || buf_hide(curbuf) |
5464 | 492 || !check_changed(curbuf, CCGD_AW |
493 | (eap->forceit ? CCGD_FORCEIT : 0) | |
494 | CCGD_EXCMD)) | |
7 | 495 { |
496 i = 0; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
497 // start at the eap->line1 argument/window/buffer |
685 | 498 wp = firstwin; |
499 tp = first_tabpage; | |
6474 | 500 switch (eap->cmdidx) |
501 { | |
502 case CMD_windo: | |
503 for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next) | |
504 i++; | |
505 break; | |
506 case CMD_tabdo: | |
507 for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next) | |
508 i++; | |
509 break; | |
510 case CMD_argdo: | |
511 i = eap->line1 - 1; | |
512 break; | |
513 default: | |
514 break; | |
515 } | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
516 // set pcmark now |
7 | 517 if (eap->cmdidx == CMD_bufdo) |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
518 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
519 // Advance to the first listed buffer after "eap->line1". |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
520 for (buf = firstbuf; buf != NULL && (buf->b_fnum < eap->line1 |
6641 | 521 || !buf->b_p_bl); buf = buf->b_next) |
522 if (buf->b_fnum > eap->line2) | |
523 { | |
524 buf = NULL; | |
525 break; | |
526 } | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
527 if (buf != NULL) |
6641 | 528 goto_buffer(eap, DOBUF_FIRST, FORWARD, buf->b_fnum); |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
529 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
530 #ifdef FEAT_QUICKFIX |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
531 else if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
532 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
533 { |
16515
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16381
diff
changeset
|
534 qf_size = qf_get_valid_size(eap); |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
535 if (qf_size <= 0 || eap->line1 > qf_size) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
536 buf = NULL; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
537 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
538 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
539 ex_cc(eap); |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
540 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
541 buf = curbuf; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
542 i = eap->line1 - 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
543 if (eap->addr_count <= 0) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
544 // default is all the quickfix/location list entries |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
545 eap->line2 = qf_size; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
546 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
547 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
548 #endif |
7 | 549 else |
550 setpcmark(); | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
551 listcmd_busy = TRUE; // avoids setting pcmark below |
7 | 552 |
6641 | 553 while (!got_int && buf != NULL) |
7 | 554 { |
555 if (eap->cmdidx == CMD_argdo) | |
556 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
557 // go to argument "i" |
7 | 558 if (i == ARGCOUNT) |
559 break; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
560 // Don't call do_argfile() when already there, it will try |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
561 // reloading the file. |
22 | 562 if (curwin->w_arg_idx != i || !editing_arg_idx(curwin)) |
39 | 563 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
564 // Clear 'shm' to avoid that the file message overwrites |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
565 // any output from the command. |
39 | 566 p_shm_save = vim_strsave(p_shm); |
567 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); | |
7 | 568 do_argfile(eap, i); |
39 | 569 set_option_value((char_u *)"shm", 0L, p_shm_save, 0); |
570 vim_free(p_shm_save); | |
571 } | |
7 | 572 if (curwin->w_arg_idx != i) |
573 break; | |
574 } | |
575 else if (eap->cmdidx == CMD_windo) | |
576 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
577 // go to window "wp" |
685 | 578 if (!win_valid(wp)) |
7 | 579 break; |
685 | 580 win_goto(wp); |
1115 | 581 if (curwin != wp) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
582 break; // something must be wrong |
685 | 583 wp = curwin->w_next; |
584 } | |
585 else if (eap->cmdidx == CMD_tabdo) | |
586 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
587 // go to window "tp" |
685 | 588 if (!valid_tabpage(tp)) |
589 break; | |
4354 | 590 goto_tabpage_tp(tp, TRUE, TRUE); |
685 | 591 tp = tp->tp_next; |
7 | 592 } |
593 else if (eap->cmdidx == CMD_bufdo) | |
594 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
595 // Remember the number of the next listed buffer, in case |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
596 // ":bwipe" is used or autocommands do something strange. |
7 | 597 next_fnum = -1; |
598 for (buf = curbuf->b_next; buf != NULL; buf = buf->b_next) | |
599 if (buf->b_p_bl) | |
600 { | |
601 next_fnum = buf->b_fnum; | |
602 break; | |
603 } | |
604 } | |
605 | |
6474 | 606 ++i; |
607 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
608 // execute the command |
7 | 609 do_cmdline(eap->arg, eap->getline, eap->cookie, |
610 DOCMD_VERBOSE + DOCMD_NOWAIT); | |
611 | |
612 if (eap->cmdidx == CMD_bufdo) | |
613 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
614 // Done? |
6474 | 615 if (next_fnum < 0 || next_fnum > eap->line2) |
7 | 616 break; |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
617 // Check if the buffer still exists. |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
618 FOR_ALL_BUFFERS(buf) |
7 | 619 if (buf->b_fnum == next_fnum) |
620 break; | |
621 if (buf == NULL) | |
622 break; | |
39 | 623 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
624 // Go to the next buffer. Clear 'shm' to avoid that the file |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
625 // message overwrites any output from the command. |
39 | 626 p_shm_save = vim_strsave(p_shm); |
627 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); | |
7 | 628 goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum); |
39 | 629 set_option_value((char_u *)"shm", 0L, p_shm_save, 0); |
630 vim_free(p_shm_save); | |
631 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
632 // If autocommands took us elsewhere, quit here. |
7 | 633 if (curbuf->b_fnum != next_fnum) |
634 break; | |
635 } | |
636 | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
637 #ifdef FEAT_QUICKFIX |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
638 if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
639 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
640 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
641 if (i >= qf_size || i >= eap->line2) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
642 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
643 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
644 qf_idx = qf_get_cur_idx(eap); |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
645 |
20565
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
646 // Clear 'shm' to avoid that the file message overwrites |
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
647 // any output from the command. |
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
648 p_shm_save = vim_strsave(p_shm); |
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
649 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
650 ex_cnext(eap); |
20565
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
651 set_option_value((char_u *)"shm", 0L, p_shm_save, 0); |
5788b78a1af0
patch 8.2.0836: not all :cdo output is visible
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
652 vim_free(p_shm_save); |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
653 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
654 // If jumping to the next quickfix entry fails, quit here |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
655 if (qf_get_cur_idx(eap) == qf_idx) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
656 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
657 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
658 #endif |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
659 |
7 | 660 if (eap->cmdidx == CMD_windo) |
661 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
662 validate_cursor(); // cursor may have moved |
13384
6740c499de13
patch 8.0.1566: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13380
diff
changeset
|
663 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
664 // required when 'scrollbind' has been set |
7 | 665 if (curwin->w_p_scb) |
666 do_check_scrollbind(TRUE); | |
667 } | |
6474 | 668 |
669 if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo) | |
670 if (i+1 > eap->line2) | |
671 break; | |
672 if (eap->cmdidx == CMD_argdo && i >= eap->line2) | |
673 break; | |
7 | 674 } |
675 listcmd_busy = FALSE; | |
676 } | |
677 | |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
678 #if defined(FEAT_SYN_HL) |
154 | 679 if (save_ei != NULL) |
680 { | |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
681 buf_T *bnext; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
682 aco_save_T aco; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
683 |
154 | 684 au_event_restore(save_ei); |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
685 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
686 for (buf = firstbuf; buf != NULL; buf = bnext) |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
687 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
688 bnext = buf->b_next; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
689 if (buf->b_nwindows > 0 && (buf->b_flags & BF_SYN_SET)) |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
690 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
691 buf->b_flags &= ~BF_SYN_SET; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
692 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
693 // buffer was opened while Syntax autocommands were disabled, |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
694 // need to trigger them now. |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
695 if (buf == curbuf) |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
696 apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, |
154 | 697 curbuf->b_fname, TRUE, curbuf); |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
698 else |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
699 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
700 aucmd_prepbuf(&aco, buf); |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
701 apply_autocmds(EVENT_SYNTAX, buf->b_p_syn, |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
702 buf->b_fname, TRUE, buf); |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
703 aucmd_restbuf(&aco); |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
704 } |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
705 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
706 // start over, in case autocommands messed things up. |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
707 bnext = firstbuf; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
708 } |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
709 } |
154 | 710 } |
7 | 711 #endif |
6116 | 712 #ifdef FEAT_CLIPBOARD |
713 end_global_changes(); | |
714 #endif | |
7 | 715 } |
716 | |
717 #ifdef FEAT_EVAL | |
718 /* | |
719 * ":compiler[!] {name}" | |
720 */ | |
721 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
722 ex_compiler(exarg_T *eap) |
7 | 723 { |
724 char_u *buf; | |
725 char_u *old_cur_comp = NULL; | |
726 char_u *p; | |
727 | |
728 if (*eap->arg == NUL) | |
729 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
730 // List all compiler scripts. |
7 | 731 do_cmdline_cmd((char_u *)"echo globpath(&rtp, 'compiler/*.vim')"); |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
732 // ) keep the indenter happy... |
7 | 733 } |
734 else | |
735 { | |
16764
ef00b6bc186b
patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
16738
diff
changeset
|
736 buf = alloc(STRLEN(eap->arg) + 14); |
7 | 737 if (buf != NULL) |
738 { | |
739 if (eap->forceit) | |
740 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
741 // ":compiler! {name}" sets global options |
7 | 742 do_cmdline_cmd((char_u *) |
743 "command -nargs=* CompilerSet set <args>"); | |
744 } | |
745 else | |
746 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
747 // ":compiler! {name}" sets local options. |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
748 // To remain backwards compatible "current_compiler" is always |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
749 // used. A user's compiler plugin may set it, the distributed |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
750 // plugin will then skip the settings. Afterwards set |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
751 // "b:current_compiler" and restore "current_compiler". |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
752 // Explicitly prepend "g:" to make it work in a function. |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
753 old_cur_comp = get_var_value((char_u *)"g:current_compiler"); |
7 | 754 if (old_cur_comp != NULL) |
755 old_cur_comp = vim_strsave(old_cur_comp); | |
756 do_cmdline_cmd((char_u *) | |
757 "command -nargs=* CompilerSet setlocal <args>"); | |
758 } | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
759 do_unlet((char_u *)"g:current_compiler", TRUE); |
148 | 760 do_unlet((char_u *)"b:current_compiler", TRUE); |
7 | 761 |
762 sprintf((char *)buf, "compiler/%s.vim", eap->arg); | |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
763 if (source_runtime(buf, DIP_ALL) == FAIL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
764 semsg(_("E666: compiler not supported: %s"), eap->arg); |
7 | 765 vim_free(buf); |
766 | |
767 do_cmdline_cmd((char_u *)":delcommand CompilerSet"); | |
768 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
769 // Set "b:current_compiler" from "current_compiler". |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
770 p = get_var_value((char_u *)"g:current_compiler"); |
7 | 771 if (p != NULL) |
772 set_internal_string_var((char_u *)"b:current_compiler", p); | |
773 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
774 // Restore "current_compiler" for ":compiler {name}". |
7 | 775 if (!eap->forceit) |
776 { | |
777 if (old_cur_comp != NULL) | |
778 { | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
779 set_internal_string_var((char_u *)"g:current_compiler", |
7 | 780 old_cur_comp); |
781 vim_free(old_cur_comp); | |
782 } | |
783 else | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
784 do_unlet((char_u *)"g:current_compiler", TRUE); |
7 | 785 } |
786 } | |
787 } | |
788 } | |
789 #endif | |
790 | |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
791 #if defined(FEAT_PYTHON3) || defined(FEAT_PYTHON) || defined(PROTO) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
792 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
793 # if (defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)) || defined(PROTO) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
794 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
795 * Detect Python 3 or 2, and initialize 'pyxversion'. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
796 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
797 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
798 init_pyxversion(void) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
799 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
800 if (p_pyx == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
801 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
802 if (python3_enabled(FALSE)) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
803 p_pyx = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
804 else if (python_enabled(FALSE)) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
805 p_pyx = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
806 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
807 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
808 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
809 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
810 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
811 * Does a file contain one of the following strings at the beginning of any |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
812 * line? |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
813 * "#!(any string)python2" => returns 2 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
814 * "#!(any string)python3" => returns 3 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
815 * "# requires python 2.x" => returns 2 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
816 * "# requires python 3.x" => returns 3 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
817 * otherwise return 0. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
818 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
819 static int |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
820 requires_py_version(char_u *filename) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
821 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
822 FILE *file; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
823 int requires_py_version = 0; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
824 int i, lines; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
825 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
826 lines = (int)p_mls; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
827 if (lines < 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
828 lines = 5; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
829 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
830 file = mch_fopen((char *)filename, "r"); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
831 if (file != NULL) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
832 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
833 for (i = 0; i < lines; i++) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
834 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
835 if (vim_fgets(IObuff, IOSIZE, file)) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
836 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
837 if (i == 0 && IObuff[0] == '#' && IObuff[1] == '!') |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
838 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
839 // Check shebang. |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
840 if (strstr((char *)IObuff + 2, "python2") != NULL) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
841 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
842 requires_py_version = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
843 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
844 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
845 if (strstr((char *)IObuff + 2, "python3") != NULL) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
846 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
847 requires_py_version = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
848 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
849 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
850 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
851 IObuff[21] = '\0'; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
852 if (STRCMP("# requires python 2.x", IObuff) == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
853 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
854 requires_py_version = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
855 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
856 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
857 if (STRCMP("# requires python 3.x", IObuff) == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
858 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
859 requires_py_version = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
860 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
861 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
862 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
863 fclose(file); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
864 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
865 return requires_py_version; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
866 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
867 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
868 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
869 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
870 * Source a python file using the requested python version. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
871 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
872 static void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
873 source_pyx_file(exarg_T *eap, char_u *fname) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
874 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
875 exarg_T ex; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
876 int v = requires_py_version(fname); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
877 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
878 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
879 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
880 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
881 if (v == 0) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
882 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
883 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
884 // user didn't choose a preference, 'pyx' is used |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
885 v = p_pyx; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
886 # elif defined(FEAT_PYTHON) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
887 v = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
888 # elif defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
889 v = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
890 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
891 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
892 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
893 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
894 * now source, if required python version is not supported show |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
895 * unobtrusive message. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
896 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
897 if (eap == NULL) |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
898 CLEAR_FIELD(ex); |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
899 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
900 ex = *eap; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
901 ex.arg = fname; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
902 ex.cmd = (char_u *)(v == 2 ? "pyfile" : "pyfile3"); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
903 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
904 if (v == 2) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
905 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
906 # ifdef FEAT_PYTHON |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
907 ex_pyfile(&ex); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
908 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
909 vim_snprintf((char *)IObuff, IOSIZE, |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
910 _("W20: Required python version 2.x not supported, ignoring file: %s"), |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
911 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
912 msg((char *)IObuff); |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
913 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
914 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
915 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
916 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
917 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
918 # ifdef FEAT_PYTHON3 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
919 ex_py3file(&ex); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
920 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
921 vim_snprintf((char *)IObuff, IOSIZE, |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
922 _("W21: Required python version 3.x not supported, ignoring file: %s"), |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
923 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
924 msg((char *)IObuff); |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
925 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
926 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
927 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
928 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
929 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
930 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
931 * ":pyxfile {fname}" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
932 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
933 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
934 ex_pyxfile(exarg_T *eap) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
935 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
936 source_pyx_file(eap, eap->arg); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
937 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
938 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
939 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
940 * ":pyx" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
941 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
942 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
943 ex_pyx(exarg_T *eap) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
944 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
945 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
946 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
947 if (p_pyx == 2) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
948 ex_python(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
949 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
950 ex_py3(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
951 # elif defined(FEAT_PYTHON) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
952 ex_python(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
953 # elif defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
954 ex_py3(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
955 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
956 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
957 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
958 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
959 * ":pyxdo" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
960 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
961 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
962 ex_pyxdo(exarg_T *eap) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
963 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
964 # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
965 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
966 if (p_pyx == 2) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
967 ex_pydo(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
968 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
969 ex_py3do(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
970 # elif defined(FEAT_PYTHON) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
971 ex_pydo(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
972 # elif defined(FEAT_PYTHON3) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
973 ex_py3do(eap); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
974 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
975 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
976 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
977 #endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
978 |
7 | 979 /* |
980 * ":checktime [buffer]" | |
981 */ | |
982 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
983 ex_checktime(exarg_T *eap) |
7 | 984 { |
985 buf_T *buf; | |
986 int save_no_check_timestamps = no_check_timestamps; | |
987 | |
988 no_check_timestamps = 0; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
989 if (eap->addr_count == 0) // default is all buffers |
7 | 990 check_timestamps(FALSE); |
991 else | |
992 { | |
993 buf = buflist_findnr((int)eap->line2); | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
994 if (buf != NULL) // cannot happen? |
7 | 995 (void)buf_check_timestamp(buf, FALSE); |
996 } | |
997 no_check_timestamps = save_no_check_timestamps; | |
998 } | |
999 | |
1000 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
1001 && (defined(FEAT_EVAL) || defined(FEAT_MULTI_LANG)) | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1002 # define HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1003 static char_u * |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1004 get_locale_val(int what) |
7 | 1005 { |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1006 char_u *loc; |
7 | 1007 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1008 // Obtain the locale value from the libraries. |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1009 loc = (char_u *)setlocale(what, NULL); |
7 | 1010 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1011 # ifdef MSWIN |
7 | 1012 if (loc != NULL) |
1013 { | |
1014 char_u *p; | |
1015 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1016 // setocale() returns something like "LC_COLLATE=<name>;LC_..." when |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1017 // one of the values (e.g., LC_CTYPE) differs. |
7 | 1018 p = vim_strchr(loc, '='); |
1019 if (p != NULL) | |
1020 { | |
1021 loc = ++p; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1022 while (*p != NUL) // remove trailing newline |
7 | 1023 { |
823 | 1024 if (*p < ' ' || *p == ';') |
7 | 1025 { |
1026 *p = NUL; | |
1027 break; | |
1028 } | |
1029 ++p; | |
1030 } | |
1031 } | |
1032 } | |
1033 # endif | |
1034 | |
1035 return loc; | |
1036 } | |
1037 #endif | |
1038 | |
1039 | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1040 #ifdef MSWIN |
7 | 1041 /* |
1042 * On MS-Windows locale names are strings like "German_Germany.1252", but | |
1043 * gettext expects "de". Try to translate one into another here for a few | |
1044 * supported languages. | |
1045 */ | |
1046 static char_u * | |
1047 gettext_lang(char_u *name) | |
1048 { | |
1049 int i; | |
1050 static char *(mtable[]) = { | |
1051 "afrikaans", "af", | |
1052 "czech", "cs", | |
1053 "dutch", "nl", | |
1054 "german", "de", | |
1055 "english_united kingdom", "en_GB", | |
1056 "spanish", "es", | |
1057 "french", "fr", | |
1058 "italian", "it", | |
1059 "japanese", "ja", | |
1060 "korean", "ko", | |
1061 "norwegian", "no", | |
1062 "polish", "pl", | |
1063 "russian", "ru", | |
1064 "slovak", "sk", | |
1065 "swedish", "sv", | |
1066 "ukrainian", "uk", | |
1067 "chinese_china", "zh_CN", | |
1068 "chinese_taiwan", "zh_TW", | |
1069 NULL}; | |
1070 | |
1071 for (i = 0; mtable[i] != NULL; i += 2) | |
1072 if (STRNICMP(mtable[i], name, STRLEN(mtable[i])) == 0) | |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1073 return (char_u *)mtable[i + 1]; |
7 | 1074 return name; |
1075 } | |
1076 #endif | |
1077 | |
1078 #if defined(FEAT_MULTI_LANG) || defined(PROTO) | |
1079 /* | |
15002
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1080 * Return TRUE when "lang" starts with a valid language name. |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1081 * Rejects NULL, empty string, "C", "C.UTF-8" and others. |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1082 */ |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1083 static int |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1084 is_valid_mess_lang(char_u *lang) |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1085 { |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1086 return lang != NULL && ASCII_ISALPHA(lang[0]) && ASCII_ISALPHA(lang[1]); |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1087 } |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1088 |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1089 /* |
7 | 1090 * Obtain the current messages language. Used to set the default for |
1091 * 'helplang'. May return NULL or an empty string. | |
1092 */ | |
1093 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1094 get_mess_lang(void) |
7 | 1095 { |
1096 char_u *p; | |
1097 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1098 # ifdef HAVE_GET_LOCALE_VAL |
7 | 1099 # if defined(LC_MESSAGES) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1100 p = get_locale_val(LC_MESSAGES); |
7 | 1101 # else |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1102 // This is necessary for Win32, where LC_MESSAGES is not defined and $LANG |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1103 // may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1104 // and LC_MONETARY may be set differently for a Japanese working in the |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1105 // US. |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1106 p = get_locale_val(LC_COLLATE); |
7 | 1107 # endif |
1108 # else | |
1109 p = mch_getenv((char_u *)"LC_ALL"); | |
15002
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1110 if (!is_valid_mess_lang(p)) |
7 | 1111 { |
1112 p = mch_getenv((char_u *)"LC_MESSAGES"); | |
15002
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1113 if (!is_valid_mess_lang(p)) |
7 | 1114 p = mch_getenv((char_u *)"LANG"); |
1115 } | |
1116 # endif | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1117 # ifdef MSWIN |
7 | 1118 p = gettext_lang(p); |
1119 # endif | |
15002
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1120 return is_valid_mess_lang(p) ? p : NULL; |
7 | 1121 } |
1122 #endif | |
1123 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1124 // Complicated #if; matches with where get_mess_env() is used below. |
45 | 1125 #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ |
1126 && defined(LC_MESSAGES))) \ | |
1127 || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
1128 && !defined(LC_MESSAGES)) | |
7 | 1129 /* |
1130 * Get the language used for messages from the environment. | |
1131 */ | |
1132 static char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1133 get_mess_env(void) |
7 | 1134 { |
1135 char_u *p; | |
1136 | |
1137 p = mch_getenv((char_u *)"LC_ALL"); | |
1138 if (p == NULL || *p == NUL) | |
1139 { | |
1140 p = mch_getenv((char_u *)"LC_MESSAGES"); | |
1141 if (p == NULL || *p == NUL) | |
1142 { | |
1143 p = mch_getenv((char_u *)"LANG"); | |
1144 if (p != NULL && VIM_ISDIGIT(*p)) | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1145 p = NULL; // ignore something like "1043" |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1146 # ifdef HAVE_GET_LOCALE_VAL |
7 | 1147 if (p == NULL || *p == NUL) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1148 p = get_locale_val(LC_CTYPE); |
7 | 1149 # endif |
1150 } | |
1151 } | |
1152 return p; | |
1153 } | |
1154 #endif | |
1155 | |
1156 #if defined(FEAT_EVAL) || defined(PROTO) | |
1157 | |
1158 /* | |
1159 * Set the "v:lang" variable according to the current locale setting. | |
1160 * Also do "v:lc_time"and "v:ctype". | |
1161 */ | |
1162 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1163 set_lang_var(void) |
7 | 1164 { |
1165 char_u *loc; | |
1166 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1167 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1168 loc = get_locale_val(LC_CTYPE); |
7 | 1169 # else |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1170 // setlocale() not supported: use the default value |
7 | 1171 loc = (char_u *)"C"; |
1172 # endif | |
1173 set_vim_var_string(VV_CTYPE, loc, -1); | |
1174 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1175 // When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1176 // back to LC_CTYPE if it's empty. |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1177 # if defined(HAVE_GET_LOCALE_VAL) && defined(LC_MESSAGES) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1178 loc = get_locale_val(LC_MESSAGES); |
7 | 1179 # else |
1180 loc = get_mess_env(); | |
1181 # endif | |
1182 set_vim_var_string(VV_LANG, loc, -1); | |
1183 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1184 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1185 loc = get_locale_val(LC_TIME); |
7 | 1186 # endif |
1187 set_vim_var_string(VV_LC_TIME, loc, -1); | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1188 |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1189 # ifdef HAVE_GET_LOCALE_VAL |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1190 loc = get_locale_val(LC_COLLATE); |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1191 # else |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1192 // setlocale() not supported: use the default value |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1193 loc = (char_u *)"C"; |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1194 # endif |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1195 set_vim_var_string(VV_COLLATE, loc, -1); |
7 | 1196 } |
1197 #endif | |
1198 | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1199 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
7 | 1200 /* |
1201 * ":language": Set the language (locale). | |
1202 */ | |
1203 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1204 ex_language(exarg_T *eap) |
7 | 1205 { |
1206 char *loc; | |
1207 char_u *p; | |
1208 char_u *name; | |
1209 int what = LC_ALL; | |
1210 char *whatstr = ""; | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1211 # ifdef LC_MESSAGES |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1212 # define VIM_LC_MESSAGES LC_MESSAGES |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1213 # else |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1214 # define VIM_LC_MESSAGES 6789 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1215 # endif |
7 | 1216 |
1217 name = eap->arg; | |
1218 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1219 // Check for "messages {name}", "ctype {name}" or "time {name}" argument. |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1220 // Allow abbreviation, but require at least 3 characters to avoid |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1221 // confusion with a two letter language name "me" or "ct". |
7 | 1222 p = skiptowhite(eap->arg); |
11129
f4ea50924c6d
patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
11127
diff
changeset
|
1223 if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3) |
7 | 1224 { |
1225 if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0) | |
1226 { | |
1227 what = VIM_LC_MESSAGES; | |
1228 name = skipwhite(p); | |
1229 whatstr = "messages "; | |
1230 } | |
1231 else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0) | |
1232 { | |
1233 what = LC_CTYPE; | |
1234 name = skipwhite(p); | |
1235 whatstr = "ctype "; | |
1236 } | |
1237 else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0) | |
1238 { | |
1239 what = LC_TIME; | |
1240 name = skipwhite(p); | |
1241 whatstr = "time "; | |
1242 } | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1243 else if (STRNICMP(eap->arg, "collate", p - eap->arg) == 0) |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1244 { |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1245 what = LC_COLLATE; |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1246 name = skipwhite(p); |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1247 whatstr = "collate "; |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1248 } |
7 | 1249 } |
1250 | |
1251 if (*name == NUL) | |
1252 { | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1253 # ifndef LC_MESSAGES |
7 | 1254 if (what == VIM_LC_MESSAGES) |
1255 p = get_mess_env(); | |
1256 else | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1257 # endif |
7 | 1258 p = (char_u *)setlocale(what, NULL); |
1259 if (p == NULL || *p == NUL) | |
1260 p = (char_u *)"Unknown"; | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1261 smsg(_("Current %slanguage: \"%s\""), whatstr, p); |
7 | 1262 } |
1263 else | |
1264 { | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1265 # ifndef LC_MESSAGES |
7 | 1266 if (what == VIM_LC_MESSAGES) |
1267 loc = ""; | |
1268 else | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1269 # endif |
1624 | 1270 { |
7 | 1271 loc = setlocale(what, (char *)name); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1272 # if defined(FEAT_FLOAT) && defined(LC_NUMERIC) |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1273 // Make sure strtod() uses a decimal point, not a comma. |
1624 | 1274 setlocale(LC_NUMERIC, "C"); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1275 # endif |
1624 | 1276 } |
7 | 1277 if (loc == NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1278 semsg(_("E197: Cannot set language to \"%s\""), name); |
7 | 1279 else |
1280 { | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1281 # ifdef HAVE_NL_MSG_CAT_CNTR |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1282 // Need to do this for GNU gettext, otherwise cached translations |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1283 // will be used again. |
7 | 1284 extern int _nl_msg_cat_cntr; |
1285 | |
1286 ++_nl_msg_cat_cntr; | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1287 # endif |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1288 // Reset $LC_ALL, otherwise it would overrule everything. |
7 | 1289 vim_setenv((char_u *)"LC_ALL", (char_u *)""); |
1290 | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1291 if (what != LC_TIME && what != LC_COLLATE) |
7 | 1292 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1293 // Tell gettext() what to translate to. It apparently doesn't |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1294 // use the currently effective locale. Also do this when |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1295 // FEAT_GETTEXT isn't defined, so that shell commands use this |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1296 // value. |
7 | 1297 if (what == LC_ALL) |
534 | 1298 { |
7 | 1299 vim_setenv((char_u *)"LANG", name); |
5027
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
1300 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1301 // Clear $LANGUAGE because GNU gettext uses it. |
5027
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
1302 vim_setenv((char_u *)"LANGUAGE", (char_u *)""); |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1303 # ifdef MSWIN |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1304 // Apparently MS-Windows printf() may cause a crash when |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1305 // we give it 8-bit text while it's expecting text in the |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1306 // current locale. This call avoids that. |
534 | 1307 setlocale(LC_CTYPE, "C"); |
1308 # endif | |
1309 } | |
7 | 1310 if (what != LC_CTYPE) |
1311 { | |
1312 char_u *mname; | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1313 # ifdef MSWIN |
7 | 1314 mname = gettext_lang(name); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1315 # else |
7 | 1316 mname = name; |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1317 # endif |
7 | 1318 vim_setenv((char_u *)"LC_MESSAGES", mname); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1319 # ifdef FEAT_MULTI_LANG |
7 | 1320 set_helplang_default(mname); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1321 # endif |
7 | 1322 } |
1323 } | |
1324 | |
1325 # ifdef FEAT_EVAL | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1326 // Set v:lang, v:lc_time, v:collate and v:ctype to the final result. |
7 | 1327 set_lang_var(); |
1328 # endif | |
3149 | 1329 # ifdef FEAT_TITLE |
1330 maketitle(); | |
1331 # endif | |
7 | 1332 } |
1333 } | |
1334 } | |
1335 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1336 static char_u **locales = NULL; // Array of all available locales |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1337 |
2849 | 1338 static int did_init_locales = FALSE; |
1339 | |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17744
diff
changeset
|
1340 /* |
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17744
diff
changeset
|
1341 * Return an array of strings for all available locales + NULL for the |
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17744
diff
changeset
|
1342 * last element. Return NULL in case of error. |
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17744
diff
changeset
|
1343 */ |
2849 | 1344 static char_u ** |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1345 find_locales(void) |
2849 | 1346 { |
1347 garray_T locales_ga; | |
1348 char_u *loc; | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1349 char_u *locale_list; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1350 # ifdef MSWIN |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1351 size_t len = 0; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1352 # endif |
2849 | 1353 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1354 // Find all available locales by running command "locale -a". If this |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1355 // doesn't work we won't have completion. |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1356 # ifndef MSWIN |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1357 locale_list = get_cmd_output((char_u *)"locale -a", |
5808 | 1358 NULL, SHELL_SILENT, NULL); |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1359 # else |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1360 // Find all available locales by examining the directories in |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1361 // $VIMRUNTIME/lang/ |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1362 { |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1363 int options = WILD_SILENT|WILD_USE_NL|WILD_KEEP_ALL; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1364 expand_T xpc; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1365 char_u *p; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1366 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1367 ExpandInit(&xpc); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1368 xpc.xp_context = EXPAND_DIRECTORIES; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1369 locale_list = ExpandOne(&xpc, (char_u *)"$VIMRUNTIME/lang/*", |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1370 NULL, options, WILD_ALL); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1371 ExpandCleanup(&xpc); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1372 if (locale_list == NULL) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1373 // Add a dummy input, that will be skipped lated but we need to |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1374 // have something in locale_list so that the C locale is added at |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1375 // the end. |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1376 locale_list = vim_strsave((char_u *)".\n"); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1377 p = locale_list; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1378 // find the last directory delimiter |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1379 while (p != NULL && *p != NUL) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1380 { |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1381 if (*p == '\n') |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1382 break; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1383 if (*p == '\\') |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1384 len = p - locale_list; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1385 p++; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1386 } |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1387 } |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1388 # endif |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1389 if (locale_list == NULL) |
2849 | 1390 return NULL; |
1391 ga_init2(&locales_ga, sizeof(char_u *), 20); | |
1392 | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1393 // Transform locale_list string where each locale is separated by "\n" |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1394 // into an array of locale strings. |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1395 loc = (char_u *)strtok((char *)locale_list, "\n"); |
2849 | 1396 |
1397 while (loc != NULL) | |
1398 { | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1399 int ignore = FALSE; |
2849 | 1400 |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1401 # ifdef MSWIN |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1402 if (len > 0) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1403 loc += len + 1; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1404 // skip locales with a dot (which indicates the charset) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1405 if (vim_strchr(loc, '.') != NULL) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1406 ignore = TRUE; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1407 # endif |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1408 if (!ignore) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1409 { |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1410 if (ga_grow(&locales_ga, 1) == FAIL) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1411 break; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1412 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1413 loc = vim_strsave(loc); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1414 if (loc == NULL) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1415 break; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1416 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1417 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc; |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1418 } |
2849 | 1419 loc = (char_u *)strtok(NULL, "\n"); |
1420 } | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1421 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1422 # ifdef MSWIN |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1423 // Add the C locale |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1424 if (ga_grow(&locales_ga, 1) == OK) |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1425 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1426 vim_strsave((char_u *)"C"); |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1427 # endif |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1428 |
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1429 vim_free(locale_list); |
2849 | 1430 if (ga_grow(&locales_ga, 1) == FAIL) |
1431 { | |
1432 ga_clear(&locales_ga); | |
1433 return NULL; | |
1434 } | |
1435 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL; | |
1436 return (char_u **)locales_ga.ga_data; | |
1437 } | |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1438 |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1439 /* |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1440 * Lazy initialization of all available locales. |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1441 */ |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1442 static void |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1443 init_locales(void) |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1444 { |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1445 if (!did_init_locales) |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1446 { |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1447 did_init_locales = TRUE; |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1448 locales = find_locales(); |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1449 } |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1450 } |
2849 | 1451 |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1452 # if defined(EXITFREE) || defined(PROTO) |
2849 | 1453 void |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1454 free_locales(void) |
2849 | 1455 { |
1456 int i; | |
1457 if (locales != NULL) | |
1458 { | |
1459 for (i = 0; locales[i] != NULL; i++) | |
1460 vim_free(locales[i]); | |
13244
ac42c4b11dbc
patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents:
13190
diff
changeset
|
1461 VIM_CLEAR(locales); |
2849 | 1462 } |
1463 } | |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20565
diff
changeset
|
1464 # endif |
2849 | 1465 |
7 | 1466 /* |
1467 * Function given to ExpandGeneric() to obtain the possible arguments of the | |
1468 * ":language" command. | |
1469 */ | |
1470 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1471 get_lang_arg(expand_T *xp UNUSED, int idx) |
7 | 1472 { |
1473 if (idx == 0) | |
1474 return (char_u *)"messages"; | |
1475 if (idx == 1) | |
1476 return (char_u *)"ctype"; | |
1477 if (idx == 2) | |
1478 return (char_u *)"time"; | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1479 if (idx == 3) |
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1480 return (char_u *)"collate"; |
2849 | 1481 |
1482 init_locales(); | |
1483 if (locales == NULL) | |
1484 return NULL; | |
20873
69055d27e85e
patch 8.2.0988: getting directory contents is always case sorted
Bram Moolenaar <Bram@vim.org>
parents:
20818
diff
changeset
|
1485 return locales[idx - 4]; |
2849 | 1486 } |
1487 | |
1488 /* | |
1489 * Function given to ExpandGeneric() to obtain the available locales. | |
1490 */ | |
1491 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1492 get_locales(expand_T *xp UNUSED, int idx) |
2849 | 1493 { |
1494 init_locales(); | |
1495 if (locales == NULL) | |
1496 return NULL; | |
1497 return locales[idx]; | |
7 | 1498 } |
1499 | |
1500 #endif |