Mercurial > vim
annotate src/ex_cmds2.c @ 20288:40f2361f79e1
Added tag v8.2.0699 for changeset ce1b73835822d5a5aa2d9f8a97a5855e4e9dfd93
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 05 May 2020 21:30:04 +0200 |
parents | aadd1cae2ff5 |
children | 5788b78a1af0 |
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 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
646 ex_cnext(eap); |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
647 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
648 // 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
|
649 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
|
650 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
651 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
652 #endif |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
653 |
7 | 654 if (eap->cmdidx == CMD_windo) |
655 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
656 validate_cursor(); // cursor may have moved |
13384
6740c499de13
patch 8.0.1566: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13380
diff
changeset
|
657 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
658 // required when 'scrollbind' has been set |
7 | 659 if (curwin->w_p_scb) |
660 do_check_scrollbind(TRUE); | |
661 } | |
6474 | 662 |
663 if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo) | |
664 if (i+1 > eap->line2) | |
665 break; | |
666 if (eap->cmdidx == CMD_argdo && i >= eap->line2) | |
667 break; | |
7 | 668 } |
669 listcmd_busy = FALSE; | |
670 } | |
671 | |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
672 #if defined(FEAT_SYN_HL) |
154 | 673 if (save_ei != NULL) |
674 { | |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
675 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
|
676 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
|
677 |
154 | 678 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
|
679 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
680 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
|
681 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
682 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
|
683 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
|
684 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
685 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
|
686 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
687 // 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
|
688 // 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
|
689 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
|
690 apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, |
154 | 691 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
|
692 else |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
693 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
694 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
|
695 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
|
696 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
|
697 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
|
698 } |
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 // 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
|
701 bnext = firstbuf; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
702 } |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
703 } |
154 | 704 } |
7 | 705 #endif |
6116 | 706 #ifdef FEAT_CLIPBOARD |
707 end_global_changes(); | |
708 #endif | |
7 | 709 } |
710 | |
711 #ifdef FEAT_EVAL | |
712 /* | |
713 * ":compiler[!] {name}" | |
714 */ | |
715 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
716 ex_compiler(exarg_T *eap) |
7 | 717 { |
718 char_u *buf; | |
719 char_u *old_cur_comp = NULL; | |
720 char_u *p; | |
721 | |
722 if (*eap->arg == NUL) | |
723 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
724 // List all compiler scripts. |
7 | 725 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
|
726 // ) keep the indenter happy... |
7 | 727 } |
728 else | |
729 { | |
16764
ef00b6bc186b
patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
16738
diff
changeset
|
730 buf = alloc(STRLEN(eap->arg) + 14); |
7 | 731 if (buf != NULL) |
732 { | |
733 if (eap->forceit) | |
734 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
735 // ":compiler! {name}" sets global options |
7 | 736 do_cmdline_cmd((char_u *) |
737 "command -nargs=* CompilerSet set <args>"); | |
738 } | |
739 else | |
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 local options. |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
742 // 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
|
743 // 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
|
744 // 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
|
745 // "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
|
746 // 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
|
747 old_cur_comp = get_var_value((char_u *)"g:current_compiler"); |
7 | 748 if (old_cur_comp != NULL) |
749 old_cur_comp = vim_strsave(old_cur_comp); | |
750 do_cmdline_cmd((char_u *) | |
751 "command -nargs=* CompilerSet setlocal <args>"); | |
752 } | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
753 do_unlet((char_u *)"g:current_compiler", TRUE); |
148 | 754 do_unlet((char_u *)"b:current_compiler", TRUE); |
7 | 755 |
756 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
|
757 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
|
758 semsg(_("E666: compiler not supported: %s"), eap->arg); |
7 | 759 vim_free(buf); |
760 | |
761 do_cmdline_cmd((char_u *)":delcommand CompilerSet"); | |
762 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
763 // Set "b:current_compiler" from "current_compiler". |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
764 p = get_var_value((char_u *)"g:current_compiler"); |
7 | 765 if (p != NULL) |
766 set_internal_string_var((char_u *)"b:current_compiler", p); | |
767 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
768 // Restore "current_compiler" for ":compiler {name}". |
7 | 769 if (!eap->forceit) |
770 { | |
771 if (old_cur_comp != NULL) | |
772 { | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
773 set_internal_string_var((char_u *)"g:current_compiler", |
7 | 774 old_cur_comp); |
775 vim_free(old_cur_comp); | |
776 } | |
777 else | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
778 do_unlet((char_u *)"g:current_compiler", TRUE); |
7 | 779 } |
780 } | |
781 } | |
782 } | |
783 #endif | |
784 | |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
785 #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
|
786 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
787 # 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
|
788 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
789 * 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
|
790 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
791 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
792 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
|
793 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
794 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
|
795 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
796 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
|
797 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
|
798 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
|
799 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
|
800 } |
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 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
803 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
804 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
805 * 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
|
806 * line? |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
807 * "#!(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
|
808 * "#!(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
|
809 * "# 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
|
810 * "# 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
|
811 * 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
|
812 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
813 static int |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
814 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
|
815 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
816 FILE *file; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
817 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
|
818 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
|
819 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
820 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
|
821 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
|
822 lines = 5; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
823 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
824 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
|
825 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
|
826 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
827 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
|
828 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
829 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
|
830 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
831 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
|
832 { |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
833 // 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
|
834 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
|
835 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
836 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
|
837 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
838 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
839 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
|
840 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
841 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
|
842 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
843 } |
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 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
|
846 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
|
847 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
848 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
|
849 break; |
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 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
|
852 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
853 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
|
854 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
855 } |
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 fclose(file); |
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 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
|
860 } |
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 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
864 * 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
|
865 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
866 static void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
867 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
|
868 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
869 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
|
870 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
|
871 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
872 # 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
|
873 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
874 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
875 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
|
876 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
877 # 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
|
878 // 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
|
879 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
|
880 # 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
|
881 v = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
882 # 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
|
883 v = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
884 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
885 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
886 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
887 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
888 * 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
|
889 * unobtrusive message. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
890 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
891 if (eap == NULL) |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
892 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
|
893 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
894 ex = *eap; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
895 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
|
896 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
|
897 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
898 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
|
899 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
900 # 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
|
901 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
|
902 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
903 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
|
904 _("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
|
905 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
906 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
|
907 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
908 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
909 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
910 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
911 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
912 # 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
|
913 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
|
914 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
915 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
|
916 _("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
|
917 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
918 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
|
919 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
920 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
921 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
922 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
923 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
924 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
925 * ":pyxfile {fname}" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
926 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
927 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
928 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
|
929 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
930 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
|
931 } |
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 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
934 * ":pyx" |
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 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
937 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
|
938 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
939 # 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
|
940 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
941 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
|
942 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
|
943 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
944 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
|
945 # 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
|
946 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
|
947 # 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
|
948 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
|
949 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
950 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
951 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
952 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
953 * ":pyxdo" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
954 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
955 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
956 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
|
957 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
958 # 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
|
959 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
960 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
|
961 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
|
962 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
963 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
|
964 # 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
|
965 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
|
966 # 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
|
967 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
|
968 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
969 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
970 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
971 #endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
972 |
7 | 973 /* |
974 * ":checktime [buffer]" | |
975 */ | |
976 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
977 ex_checktime(exarg_T *eap) |
7 | 978 { |
979 buf_T *buf; | |
980 int save_no_check_timestamps = no_check_timestamps; | |
981 | |
982 no_check_timestamps = 0; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
983 if (eap->addr_count == 0) // default is all buffers |
7 | 984 check_timestamps(FALSE); |
985 else | |
986 { | |
987 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
|
988 if (buf != NULL) // cannot happen? |
7 | 989 (void)buf_check_timestamp(buf, FALSE); |
990 } | |
991 no_check_timestamps = save_no_check_timestamps; | |
992 } | |
993 | |
994 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
995 && (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
|
996 # define HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
997 static char_u * |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
998 get_locale_val(int what) |
7 | 999 { |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1000 char_u *loc; |
7 | 1001 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1002 // 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
|
1003 loc = (char_u *)setlocale(what, NULL); |
7 | 1004 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1005 # ifdef MSWIN |
7 | 1006 if (loc != NULL) |
1007 { | |
1008 char_u *p; | |
1009 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1010 // 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
|
1011 // one of the values (e.g., LC_CTYPE) differs. |
7 | 1012 p = vim_strchr(loc, '='); |
1013 if (p != NULL) | |
1014 { | |
1015 loc = ++p; | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1016 while (*p != NUL) // remove trailing newline |
7 | 1017 { |
823 | 1018 if (*p < ' ' || *p == ';') |
7 | 1019 { |
1020 *p = NUL; | |
1021 break; | |
1022 } | |
1023 ++p; | |
1024 } | |
1025 } | |
1026 } | |
1027 # endif | |
1028 | |
1029 return loc; | |
1030 } | |
1031 #endif | |
1032 | |
1033 | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1034 #ifdef MSWIN |
7 | 1035 /* |
1036 * On MS-Windows locale names are strings like "German_Germany.1252", but | |
1037 * gettext expects "de". Try to translate one into another here for a few | |
1038 * supported languages. | |
1039 */ | |
1040 static char_u * | |
1041 gettext_lang(char_u *name) | |
1042 { | |
1043 int i; | |
1044 static char *(mtable[]) = { | |
1045 "afrikaans", "af", | |
1046 "czech", "cs", | |
1047 "dutch", "nl", | |
1048 "german", "de", | |
1049 "english_united kingdom", "en_GB", | |
1050 "spanish", "es", | |
1051 "french", "fr", | |
1052 "italian", "it", | |
1053 "japanese", "ja", | |
1054 "korean", "ko", | |
1055 "norwegian", "no", | |
1056 "polish", "pl", | |
1057 "russian", "ru", | |
1058 "slovak", "sk", | |
1059 "swedish", "sv", | |
1060 "ukrainian", "uk", | |
1061 "chinese_china", "zh_CN", | |
1062 "chinese_taiwan", "zh_TW", | |
1063 NULL}; | |
1064 | |
1065 for (i = 0; mtable[i] != NULL; i += 2) | |
1066 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
|
1067 return (char_u *)mtable[i + 1]; |
7 | 1068 return name; |
1069 } | |
1070 #endif | |
1071 | |
1072 #if defined(FEAT_MULTI_LANG) || defined(PROTO) | |
1073 /* | |
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
|
1074 * 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
|
1075 * 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
|
1076 */ |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
1077 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
|
1078 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
|
1079 { |
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 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
|
1081 } |
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 /* |
7 | 1084 * Obtain the current messages language. Used to set the default for |
1085 * 'helplang'. May return NULL or an empty string. | |
1086 */ | |
1087 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1088 get_mess_lang(void) |
7 | 1089 { |
1090 char_u *p; | |
1091 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1092 # ifdef HAVE_GET_LOCALE_VAL |
7 | 1093 # if defined(LC_MESSAGES) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1094 p = get_locale_val(LC_MESSAGES); |
7 | 1095 # else |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1096 // 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
|
1097 // 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
|
1098 // 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
|
1099 // US. |
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_COLLATE); |
7 | 1101 # endif |
1102 # else | |
1103 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
|
1104 if (!is_valid_mess_lang(p)) |
7 | 1105 { |
1106 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
|
1107 if (!is_valid_mess_lang(p)) |
7 | 1108 p = mch_getenv((char_u *)"LANG"); |
1109 } | |
1110 # endif | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1111 # ifdef MSWIN |
7 | 1112 p = gettext_lang(p); |
1113 # 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
|
1114 return is_valid_mess_lang(p) ? p : NULL; |
7 | 1115 } |
1116 #endif | |
1117 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1118 // Complicated #if; matches with where get_mess_env() is used below. |
45 | 1119 #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ |
1120 && defined(LC_MESSAGES))) \ | |
1121 || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
1122 && !defined(LC_MESSAGES)) | |
7 | 1123 /* |
1124 * Get the language used for messages from the environment. | |
1125 */ | |
1126 static char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1127 get_mess_env(void) |
7 | 1128 { |
1129 char_u *p; | |
1130 | |
1131 p = mch_getenv((char_u *)"LC_ALL"); | |
1132 if (p == NULL || *p == NUL) | |
1133 { | |
1134 p = mch_getenv((char_u *)"LC_MESSAGES"); | |
1135 if (p == NULL || *p == NUL) | |
1136 { | |
1137 p = mch_getenv((char_u *)"LANG"); | |
1138 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
|
1139 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
|
1140 # ifdef HAVE_GET_LOCALE_VAL |
7 | 1141 if (p == NULL || *p == NUL) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1142 p = get_locale_val(LC_CTYPE); |
7 | 1143 # endif |
1144 } | |
1145 } | |
1146 return p; | |
1147 } | |
1148 #endif | |
1149 | |
1150 #if defined(FEAT_EVAL) || defined(PROTO) | |
1151 | |
1152 /* | |
1153 * Set the "v:lang" variable according to the current locale setting. | |
1154 * Also do "v:lc_time"and "v:ctype". | |
1155 */ | |
1156 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1157 set_lang_var(void) |
7 | 1158 { |
1159 char_u *loc; | |
1160 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1161 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1162 loc = get_locale_val(LC_CTYPE); |
7 | 1163 # else |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1164 // setlocale() not supported: use the default value |
7 | 1165 loc = (char_u *)"C"; |
1166 # endif | |
1167 set_vim_var_string(VV_CTYPE, loc, -1); | |
1168 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1169 // 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
|
1170 // 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
|
1171 # 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
|
1172 loc = get_locale_val(LC_MESSAGES); |
7 | 1173 # else |
1174 loc = get_mess_env(); | |
1175 # endif | |
1176 set_vim_var_string(VV_LANG, loc, -1); | |
1177 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
1178 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
1179 loc = get_locale_val(LC_TIME); |
7 | 1180 # endif |
1181 set_vim_var_string(VV_LC_TIME, loc, -1); | |
1182 } | |
1183 #endif | |
1184 | |
15597
536dd2bc5ac9
patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
15595
diff
changeset
|
1185 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) \ |
7 | 1186 /* |
1187 * ":language": Set the language (locale). | |
1188 */ | |
1189 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1190 ex_language(exarg_T *eap) |
7 | 1191 { |
1192 char *loc; | |
1193 char_u *p; | |
1194 char_u *name; | |
1195 int what = LC_ALL; | |
1196 char *whatstr = ""; | |
1197 #ifdef LC_MESSAGES | |
1198 # define VIM_LC_MESSAGES LC_MESSAGES | |
1199 #else | |
1200 # define VIM_LC_MESSAGES 6789 | |
1201 #endif | |
1202 | |
1203 name = eap->arg; | |
1204 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1205 // 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
|
1206 // 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
|
1207 // confusion with a two letter language name "me" or "ct". |
7 | 1208 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
|
1209 if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3) |
7 | 1210 { |
1211 if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0) | |
1212 { | |
1213 what = VIM_LC_MESSAGES; | |
1214 name = skipwhite(p); | |
1215 whatstr = "messages "; | |
1216 } | |
1217 else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0) | |
1218 { | |
1219 what = LC_CTYPE; | |
1220 name = skipwhite(p); | |
1221 whatstr = "ctype "; | |
1222 } | |
1223 else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0) | |
1224 { | |
1225 what = LC_TIME; | |
1226 name = skipwhite(p); | |
1227 whatstr = "time "; | |
1228 } | |
1229 } | |
1230 | |
1231 if (*name == NUL) | |
1232 { | |
1233 #ifndef LC_MESSAGES | |
1234 if (what == VIM_LC_MESSAGES) | |
1235 p = get_mess_env(); | |
1236 else | |
1237 #endif | |
1238 p = (char_u *)setlocale(what, NULL); | |
1239 if (p == NULL || *p == NUL) | |
1240 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
|
1241 smsg(_("Current %slanguage: \"%s\""), whatstr, p); |
7 | 1242 } |
1243 else | |
1244 { | |
1245 #ifndef LC_MESSAGES | |
1246 if (what == VIM_LC_MESSAGES) | |
1247 loc = ""; | |
1248 else | |
1249 #endif | |
1624 | 1250 { |
7 | 1251 loc = setlocale(what, (char *)name); |
1624 | 1252 #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
|
1253 // Make sure strtod() uses a decimal point, not a comma. |
1624 | 1254 setlocale(LC_NUMERIC, "C"); |
1255 #endif | |
1256 } | |
7 | 1257 if (loc == NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1258 semsg(_("E197: Cannot set language to \"%s\""), name); |
7 | 1259 else |
1260 { | |
1261 #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
|
1262 // 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
|
1263 // will be used again. |
7 | 1264 extern int _nl_msg_cat_cntr; |
1265 | |
1266 ++_nl_msg_cat_cntr; | |
1267 #endif | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1268 // Reset $LC_ALL, otherwise it would overrule everything. |
7 | 1269 vim_setenv((char_u *)"LC_ALL", (char_u *)""); |
1270 | |
1271 if (what != LC_TIME) | |
1272 { | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1273 // 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
|
1274 // 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
|
1275 // 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
|
1276 // value. |
7 | 1277 if (what == LC_ALL) |
534 | 1278 { |
7 | 1279 vim_setenv((char_u *)"LANG", name); |
5027
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
1280 |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1281 // Clear $LANGUAGE because GNU gettext uses it. |
5027
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
1282 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
|
1283 # ifdef MSWIN |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1284 // 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
|
1285 // 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
|
1286 // current locale. This call avoids that. |
534 | 1287 setlocale(LC_CTYPE, "C"); |
1288 # endif | |
1289 } | |
7 | 1290 if (what != LC_CTYPE) |
1291 { | |
1292 char_u *mname; | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1293 #ifdef MSWIN |
7 | 1294 mname = gettext_lang(name); |
1295 #else | |
1296 mname = name; | |
1297 #endif | |
1298 vim_setenv((char_u *)"LC_MESSAGES", mname); | |
1299 #ifdef FEAT_MULTI_LANG | |
1300 set_helplang_default(mname); | |
1301 #endif | |
1302 } | |
1303 } | |
1304 | |
1305 # ifdef FEAT_EVAL | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1306 // Set v:lang, v:lc_time and v:ctype to the final result. |
7 | 1307 set_lang_var(); |
1308 # endif | |
3149 | 1309 # ifdef FEAT_TITLE |
1310 maketitle(); | |
1311 # endif | |
7 | 1312 } |
1313 } | |
1314 } | |
1315 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1316 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
|
1317 |
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
|
1318 # ifndef MSWIN |
2849 | 1319 static int did_init_locales = FALSE; |
1320 | |
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
|
1321 /* |
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17744
diff
changeset
|
1322 * 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
|
1323 * 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
|
1324 */ |
2849 | 1325 static char_u ** |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1326 find_locales(void) |
2849 | 1327 { |
1328 garray_T locales_ga; | |
1329 char_u *loc; | |
1330 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1331 // 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
|
1332 // doesn't work we won't have completion. |
2849 | 1333 char_u *locale_a = get_cmd_output((char_u *)"locale -a", |
5808 | 1334 NULL, SHELL_SILENT, NULL); |
2849 | 1335 if (locale_a == NULL) |
1336 return NULL; | |
1337 ga_init2(&locales_ga, sizeof(char_u *), 20); | |
1338 | |
18779
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1339 // Transform locale_a string where each locale is separated by "\n" |
8f05b3cf8557
patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18051
diff
changeset
|
1340 // into an array of locale strings. |
2849 | 1341 loc = (char_u *)strtok((char *)locale_a, "\n"); |
1342 | |
1343 while (loc != NULL) | |
1344 { | |
1345 if (ga_grow(&locales_ga, 1) == FAIL) | |
1346 break; | |
1347 loc = vim_strsave(loc); | |
1348 if (loc == NULL) | |
1349 break; | |
1350 | |
1351 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc; | |
1352 loc = (char_u *)strtok(NULL, "\n"); | |
1353 } | |
1354 vim_free(locale_a); | |
1355 if (ga_grow(&locales_ga, 1) == FAIL) | |
1356 { | |
1357 ga_clear(&locales_ga); | |
1358 return NULL; | |
1359 } | |
1360 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL; | |
1361 return (char_u **)locales_ga.ga_data; | |
1362 } | |
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
|
1363 # endif |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1364 |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1365 /* |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1366 * 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
|
1367 */ |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1368 static void |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1369 init_locales(void) |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1370 { |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
1371 # ifndef MSWIN |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1372 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
|
1373 { |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1374 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
|
1375 locales = find_locales(); |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1376 } |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1377 # endif |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
1378 } |
2849 | 1379 |
1380 # if defined(EXITFREE) || defined(PROTO) | |
1381 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1382 free_locales(void) |
2849 | 1383 { |
1384 int i; | |
1385 if (locales != NULL) | |
1386 { | |
1387 for (i = 0; locales[i] != NULL; i++) | |
1388 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
|
1389 VIM_CLEAR(locales); |
2849 | 1390 } |
1391 } | |
1392 # endif | |
1393 | |
7 | 1394 /* |
1395 * Function given to ExpandGeneric() to obtain the possible arguments of the | |
1396 * ":language" command. | |
1397 */ | |
1398 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1399 get_lang_arg(expand_T *xp UNUSED, int idx) |
7 | 1400 { |
1401 if (idx == 0) | |
1402 return (char_u *)"messages"; | |
1403 if (idx == 1) | |
1404 return (char_u *)"ctype"; | |
1405 if (idx == 2) | |
1406 return (char_u *)"time"; | |
2849 | 1407 |
1408 init_locales(); | |
1409 if (locales == NULL) | |
1410 return NULL; | |
1411 return locales[idx - 3]; | |
1412 } | |
1413 | |
1414 /* | |
1415 * Function given to ExpandGeneric() to obtain the available locales. | |
1416 */ | |
1417 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1418 get_locales(expand_T *xp UNUSED, int idx) |
2849 | 1419 { |
1420 init_locales(); | |
1421 if (locales == NULL) | |
1422 return NULL; | |
1423 return locales[idx]; | |
7 | 1424 } |
1425 | |
1426 #endif |