]>
Commit | Line | Data |
---|---|---|
90d372c4 MT |
1 | Submitted By: Jim Gifford (jim at linuxfromscratch dot org) |
2 | Date: 2006-07-14 | |
3 | Initial Package Version: 7.0 | |
4 | Origin: Upstream | |
5 | Upstream Status: Applied | |
6 | Description: Contains Patch 001-004, 006-026, 028-031, and 033-039 from Upstream | |
7 | 005, 027, and 032 is for the extras and Windows 32 only | |
8 | ||
9 | diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim | |
10 | --- vim70.orig/runtime/autoload/ccomplete.vim 2006-05-03 07:35:56.000000000 -0700 | |
11 | +++ vim70/runtime/autoload/ccomplete.vim 2006-07-14 08:51:21.000000000 -0700 | |
12 | @@ -1,7 +1,7 @@ | |
13 | " Vim completion script | |
14 | " Language: C | |
15 | " Maintainer: Bram Moolenaar <Bram@vim.org> | |
16 | -" Last Change: 2006 May 03 | |
17 | +" Last Change: 2006 May 08 | |
18 | ||
19 | ||
20 | " This function is used for the 'omnifunc' option. | |
21 | @@ -458,7 +458,7 @@ | |
22 | " member. | |
23 | function! s:StructMembers(typename, items, all) | |
24 | " Todo: What about local structures? | |
25 | - let fnames = join(map(tagfiles(), 'escape(v:val, " \\")')) | |
26 | + let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) | |
27 | if fnames == '' | |
28 | return [] | |
29 | endif | |
30 | diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim | |
31 | --- vim70.orig/runtime/autoload/paste.vim 2006-04-21 11:31:01.000000000 -0700 | |
32 | +++ vim70/runtime/autoload/paste.vim 2006-07-14 08:51:21.000000000 -0700 | |
33 | @@ -1,6 +1,6 @@ | |
34 | " Vim support file to help with paste mappings and menus | |
35 | " Maintainer: Bram Moolenaar <Bram@vim.org> | |
36 | -" Last Change: 2006 Apr 21 | |
37 | +" Last Change: 2006 Jun 23 | |
38 | ||
39 | " Define the string to use for items that are present both in Edit, Popup and | |
40 | " Toolbar menu. Also used in mswin.vim and macmap.vim. | |
41 | @@ -12,7 +12,7 @@ | |
42 | if has("virtualedit") | |
43 | let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"} | |
44 | let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n'] | |
45 | - let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi' | |
46 | + let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi' | |
47 | ||
48 | func! paste#Paste() | |
49 | let ove = &ve | |
50 | diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim | |
51 | --- vim70.orig/runtime/autoload/spellfile.vim 2006-02-01 04:12:24.000000000 -0800 | |
52 | +++ vim70/runtime/autoload/spellfile.vim 2006-07-14 08:51:21.000000000 -0700 | |
53 | @@ -1,9 +1,9 @@ | |
54 | " Vim script to download a missing spell file | |
55 | " Maintainer: Bram Moolenaar <Bram@vim.org> | |
56 | -" Last Change: 2006 Feb 01 | |
57 | +" Last Change: 2006 May 10 | |
58 | ||
59 | if !exists('g:spellfile_URL') | |
60 | - let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell' | |
61 | + let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell' | |
62 | endif | |
63 | let s:spellfile_URL = '' " Start with nothing so that s:donedict is reset. | |
64 | ||
65 | @@ -61,13 +61,13 @@ | |
66 | new | |
67 | setlocal bin | |
68 | echo 'Downloading ' . fname . '...' | |
69 | - exe 'Nread ' g:spellfile_URL . '/' . fname | |
70 | + call spellfile#Nread(fname) | |
71 | if getline(2) !~ 'VIMspell' | |
72 | " Didn't work, perhaps there is an ASCII one. | |
73 | g/^/d | |
74 | let fname = a:lang . '.ascii.spl' | |
75 | echo 'Could not find it, trying ' . fname . '...' | |
76 | - exe 'Nread ' g:spellfile_URL . '/' . fname | |
77 | + call spellfile#Nread(fname) | |
78 | if getline(2) !~ 'VIMspell' | |
79 | echo 'Sorry, downloading failed' | |
80 | bwipe! | |
81 | @@ -95,7 +95,7 @@ | |
82 | g/^/d | |
83 | let fname = substitute(fname, '\.spl$', '.sug', '') | |
84 | echo 'Downloading ' . fname . '...' | |
85 | - exe 'Nread ' g:spellfile_URL . '/' . fname | |
86 | + call spellfile#Nread(fname) | |
87 | if getline(2) !~ 'VIMsug' | |
88 | echo 'Sorry, downloading failed' | |
89 | else | |
90 | @@ -109,3 +109,10 @@ | |
91 | bwipe | |
92 | endif | |
93 | endfunc | |
94 | + | |
95 | +" Read "fname" from the ftp server. | |
96 | +function! spellfile#Nread(fname) | |
97 | + let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '') | |
98 | + let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '') | |
99 | + exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"' | |
100 | +endfunc | |
101 | diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim | |
102 | --- vim70.orig/runtime/plugin/matchparen.vim 2006-04-27 06:31:26.000000000 -0700 | |
103 | +++ vim70/runtime/plugin/matchparen.vim 2006-07-14 08:51:21.000000000 -0700 | |
104 | @@ -1,6 +1,6 @@ | |
105 | " Vim plugin for showing matching parens | |
106 | " Maintainer: Bram Moolenaar <Bram@vim.org> | |
107 | -" Last Change: 2006 Apr 27 | |
108 | +" Last Change: 2006 May 11 | |
109 | ||
110 | " Exit quickly when: | |
111 | " - this plugin was already loaded (or disabled) | |
112 | @@ -90,7 +90,7 @@ | |
113 | " Find the match. When it was just before the cursor move it there for a | |
114 | " moment. | |
115 | if before > 0 | |
116 | - let save_cursor = getpos('.') | |
117 | + let save_cursor = winsaveview() | |
118 | call cursor(c_lnum, c_col - before) | |
119 | endif | |
120 | ||
121 | @@ -102,7 +102,7 @@ | |
122 | let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline) | |
123 | ||
124 | if before > 0 | |
125 | - call setpos('.', save_cursor) | |
126 | + call winrestview(save_cursor) | |
127 | endif | |
128 | ||
129 | " If a match is found setup match highlighting. | |
130 | diff -Naur vim70.orig/src/edit.c vim70/src/edit.c | |
131 | --- vim70.orig/src/edit.c 2006-05-07 04:48:51.000000000 -0700 | |
132 | +++ vim70/src/edit.c 2006-07-14 08:51:21.000000000 -0700 | |
133 | @@ -719,9 +719,14 @@ | |
134 | #ifdef FEAT_INS_EXPAND | |
135 | /* | |
136 | * Special handling of keys while the popup menu is visible or wanted | |
137 | - * and the cursor is still in the completed word. | |
138 | + * and the cursor is still in the completed word. Only when there is | |
139 | + * a match, skip this when no matches were found. | |
140 | */ | |
141 | - if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col) | |
142 | + if (compl_started | |
143 | + && pum_wanted() | |
144 | + && curwin->w_cursor.col >= compl_col | |
145 | + && (compl_shown_match == NULL | |
146 | + || compl_shown_match != compl_shown_match->cp_next)) | |
147 | { | |
148 | /* BS: Delete one character from "compl_leader". */ | |
149 | if ((c == K_BS || c == Ctrl_H) | |
150 | @@ -751,7 +756,7 @@ | |
151 | continue; | |
152 | } | |
153 | ||
154 | - /* Pressing CTRL-Y selects the current match. Shen | |
155 | + /* Pressing CTRL-Y selects the current match. When | |
156 | * compl_enter_selects is set the Enter key does the same. */ | |
157 | if (c == Ctrl_Y || (compl_enter_selects | |
158 | && (c == CAR || c == K_KENTER || c == NL))) | |
159 | @@ -3015,9 +3020,6 @@ | |
160 | if ((int)(p - line) - (int)compl_col <= 0) | |
161 | return K_BS; | |
162 | ||
163 | - /* For redo we need to repeat this backspace. */ | |
164 | - AppendCharToRedobuff(K_BS); | |
165 | - | |
166 | /* Deleted more than what was used to find matches or didn't finish | |
167 | * finding all matches: need to look for matches all over again. */ | |
168 | if (curwin->w_cursor.col <= compl_col + compl_length | |
169 | @@ -3046,7 +3048,6 @@ | |
170 | ins_compl_delete(); | |
171 | ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); | |
172 | compl_used_match = FALSE; | |
173 | - compl_enter_selects = FALSE; | |
174 | ||
175 | if (compl_started) | |
176 | ins_compl_set_original_text(compl_leader); | |
177 | @@ -3076,6 +3077,7 @@ | |
178 | compl_restarting = FALSE; | |
179 | } | |
180 | ||
181 | +#if 0 /* disabled, made CTRL-L, BS and typing char jump to original text. */ | |
182 | if (!compl_used_match) | |
183 | { | |
184 | /* Go to the original text, since none of the matches is inserted. */ | |
185 | @@ -3087,6 +3089,8 @@ | |
186 | compl_curr_match = compl_shown_match; | |
187 | compl_shows_dir = compl_direction; | |
188 | } | |
189 | +#endif | |
190 | + compl_enter_selects = !compl_used_match; | |
191 | ||
192 | /* Show the popup menu with a different set of matches. */ | |
193 | ins_compl_show_pum(); | |
194 | @@ -3115,10 +3119,6 @@ | |
195 | #endif | |
196 | ins_char(c); | |
197 | ||
198 | - /* For redo we need to count this character so that the number of | |
199 | - * backspaces is correct. */ | |
200 | - AppendCharToRedobuff(c); | |
201 | - | |
202 | /* If we didn't complete finding matches we must search again. */ | |
203 | if (compl_was_interrupted) | |
204 | ins_compl_restart(); | |
205 | @@ -3175,10 +3175,32 @@ | |
206 | char_u *p; | |
207 | int len = curwin->w_cursor.col - compl_col; | |
208 | int c; | |
209 | + compl_T *cp; | |
210 | ||
211 | p = compl_shown_match->cp_str; | |
212 | if ((int)STRLEN(p) <= len) /* the match is too short */ | |
213 | - return; | |
214 | + { | |
215 | + /* When still at the original match use the first entry that matches | |
216 | + * the leader. */ | |
217 | + if (compl_shown_match->cp_flags & ORIGINAL_TEXT) | |
218 | + { | |
219 | + p = NULL; | |
220 | + for (cp = compl_shown_match->cp_next; cp != NULL | |
221 | + && cp != compl_first_match; cp = cp->cp_next) | |
222 | + { | |
223 | + if (ins_compl_equal(cp, compl_leader, | |
224 | + (int)STRLEN(compl_leader))) | |
225 | + { | |
226 | + p = cp->cp_str; | |
227 | + break; | |
228 | + } | |
229 | + } | |
230 | + if (p == NULL || (int)STRLEN(p) <= len) | |
231 | + return; | |
232 | + } | |
233 | + else | |
234 | + return; | |
235 | + } | |
236 | p += len; | |
237 | #ifdef FEAT_MBYTE | |
238 | c = mb_ptr2char(p); | |
239 | @@ -3369,16 +3391,21 @@ | |
240 | ptr = compl_leader; | |
241 | else | |
242 | ptr = compl_orig_text; | |
243 | - p = compl_orig_text; | |
244 | - for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp) | |
245 | - ; | |
246 | + if (compl_orig_text != NULL) | |
247 | + { | |
248 | + p = compl_orig_text; | |
249 | + for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; | |
250 | + ++temp) | |
251 | + ; | |
252 | #ifdef FEAT_MBYTE | |
253 | - if (temp > 0) | |
254 | - temp -= (*mb_head_off)(compl_orig_text, p + temp); | |
255 | + if (temp > 0) | |
256 | + temp -= (*mb_head_off)(compl_orig_text, p + temp); | |
257 | #endif | |
258 | - for (p += temp; *p != NUL; mb_ptr_adv(p)) | |
259 | - AppendCharToRedobuff(K_BS); | |
260 | - AppendToRedobuffLit(ptr + temp, -1); | |
261 | + for (p += temp; *p != NUL; mb_ptr_adv(p)) | |
262 | + AppendCharToRedobuff(K_BS); | |
263 | + } | |
264 | + if (ptr != NULL) | |
265 | + AppendToRedobuffLit(ptr + temp, -1); | |
266 | } | |
267 | ||
268 | #ifdef FEAT_CINDENT | |
269 | @@ -4100,6 +4127,21 @@ | |
270 | && compl_shown_match->cp_next != NULL | |
271 | && compl_shown_match->cp_next != compl_first_match) | |
272 | compl_shown_match = compl_shown_match->cp_next; | |
273 | + | |
274 | + /* If we didn't find it searching forward, and compl_shows_dir is | |
275 | + * backward, find the last match. */ | |
276 | + if (compl_shows_dir == BACKWARD | |
277 | + && !ins_compl_equal(compl_shown_match, | |
278 | + compl_leader, (int)STRLEN(compl_leader)) | |
279 | + && (compl_shown_match->cp_next == NULL | |
280 | + || compl_shown_match->cp_next == compl_first_match)) | |
281 | + { | |
282 | + while (!ins_compl_equal(compl_shown_match, | |
283 | + compl_leader, (int)STRLEN(compl_leader)) | |
284 | + && compl_shown_match->cp_prev != NULL | |
285 | + && compl_shown_match->cp_prev != compl_first_match) | |
286 | + compl_shown_match = compl_shown_match->cp_prev; | |
287 | + } | |
288 | } | |
289 | ||
290 | if (allow_get_expansion && insert_match | |
291 | @@ -4124,8 +4166,6 @@ | |
292 | { | |
293 | if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL) | |
294 | { | |
295 | - if (compl_pending != 0) | |
296 | - --compl_pending; | |
297 | compl_shown_match = compl_shown_match->cp_next; | |
298 | found_end = (compl_first_match != NULL | |
299 | && (compl_shown_match->cp_next == compl_first_match | |
300 | @@ -4134,14 +4174,24 @@ | |
301 | else if (compl_shows_dir == BACKWARD | |
302 | && compl_shown_match->cp_prev != NULL) | |
303 | { | |
304 | - if (compl_pending != 0) | |
305 | - ++compl_pending; | |
306 | found_end = (compl_shown_match == compl_first_match); | |
307 | compl_shown_match = compl_shown_match->cp_prev; | |
308 | found_end |= (compl_shown_match == compl_first_match); | |
309 | } | |
310 | else | |
311 | { | |
312 | + if (!allow_get_expansion) | |
313 | + { | |
314 | + if (advance) | |
315 | + { | |
316 | + if (compl_shows_dir == BACKWARD) | |
317 | + compl_pending -= todo + 1; | |
318 | + else | |
319 | + compl_pending += todo + 1; | |
320 | + } | |
321 | + return -1; | |
322 | + } | |
323 | + | |
324 | if (advance) | |
325 | { | |
326 | if (compl_shows_dir == BACKWARD) | |
327 | @@ -4149,14 +4199,27 @@ | |
328 | else | |
329 | ++compl_pending; | |
330 | } | |
331 | - if (!allow_get_expansion) | |
332 | - return -1; | |
333 | ||
334 | /* Find matches. */ | |
335 | num_matches = ins_compl_get_exp(&compl_startpos); | |
336 | - if (compl_pending != 0 && compl_direction == compl_shows_dir | |
337 | + | |
338 | + /* handle any pending completions */ | |
339 | + while (compl_pending != 0 && compl_direction == compl_shows_dir | |
340 | && advance) | |
341 | - compl_shown_match = compl_curr_match; | |
342 | + { | |
343 | + if (compl_pending > 0 && compl_shown_match->cp_next != NULL) | |
344 | + { | |
345 | + compl_shown_match = compl_shown_match->cp_next; | |
346 | + --compl_pending; | |
347 | + } | |
348 | + if (compl_pending < 0 && compl_shown_match->cp_prev != NULL) | |
349 | + { | |
350 | + compl_shown_match = compl_shown_match->cp_prev; | |
351 | + ++compl_pending; | |
352 | + } | |
353 | + else | |
354 | + break; | |
355 | + } | |
356 | found_end = FALSE; | |
357 | } | |
358 | if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0 | |
359 | @@ -4265,9 +4328,9 @@ | |
360 | return; | |
361 | count = 0; | |
362 | ||
363 | - ++no_mapping; | |
364 | + /* Check for a typed key. Do use mappings, otherwise vim_is_ctrl_x_key() | |
365 | + * can't do its work correctly. */ | |
366 | c = vpeekc_any(); | |
367 | - --no_mapping; | |
368 | if (c != NUL) | |
369 | { | |
370 | if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R) | |
371 | @@ -4277,12 +4340,27 @@ | |
372 | (void)ins_compl_next(FALSE, ins_compl_key2count(c), | |
373 | c != K_UP && c != K_DOWN); | |
374 | } | |
375 | - else if (c != Ctrl_R) | |
376 | - compl_interrupted = TRUE; | |
377 | + else | |
378 | + { | |
379 | + /* Need to get the character to have KeyTyped set. We'll put it | |
380 | + * back with vungetc() below. */ | |
381 | + c = safe_vgetc(); | |
382 | + | |
383 | + /* Don't interrupt completion when the character wasn't typed, | |
384 | + * e.g., when doing @q to replay keys. */ | |
385 | + if (c != Ctrl_R && KeyTyped) | |
386 | + compl_interrupted = TRUE; | |
387 | + | |
388 | + vungetc(c); | |
389 | + } | |
390 | } | |
391 | if (compl_pending != 0 && !got_int) | |
392 | - (void)ins_compl_next(FALSE, compl_pending > 0 | |
393 | - ? compl_pending : -compl_pending, TRUE); | |
394 | + { | |
395 | + int todo = compl_pending > 0 ? compl_pending : -compl_pending; | |
396 | + | |
397 | + compl_pending = 0; | |
398 | + (void)ins_compl_next(FALSE, todo, TRUE); | |
399 | + } | |
400 | } | |
401 | ||
402 | /* | |
403 | @@ -4611,10 +4689,18 @@ | |
404 | (int)STRLEN(compl_pattern), curs_col); | |
405 | if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL | |
406 | || compl_xp.xp_context == EXPAND_NOTHING) | |
407 | - return FAIL; | |
408 | - startcol = (int)(compl_xp.xp_pattern - compl_pattern); | |
409 | - compl_col = startcol; | |
410 | - compl_length = curs_col - startcol; | |
411 | + { | |
412 | + compl_col = curs_col; | |
413 | + compl_length = 0; | |
414 | + vim_free(compl_pattern); | |
415 | + compl_pattern = NULL; | |
416 | + } | |
417 | + else | |
418 | + { | |
419 | + startcol = (int)(compl_xp.xp_pattern - compl_pattern); | |
420 | + compl_col = startcol; | |
421 | + compl_length = curs_col - startcol; | |
422 | + } | |
423 | } | |
424 | else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI) | |
425 | { | |
426 | @@ -4668,11 +4754,17 @@ | |
427 | else | |
428 | compl_col = spell_word_start(startcol); | |
429 | if (compl_col >= (colnr_T)startcol) | |
430 | - return FAIL; | |
431 | - spell_expand_check_cap(compl_col); | |
432 | + { | |
433 | + compl_length = 0; | |
434 | + compl_col = curs_col; | |
435 | + } | |
436 | + else | |
437 | + { | |
438 | + spell_expand_check_cap(compl_col); | |
439 | + compl_length = (int)curs_col - compl_col; | |
440 | + } | |
441 | /* Need to obtain "line" again, it may have become invalid. */ | |
442 | line = ml_get(curwin->w_cursor.lnum); | |
443 | - compl_length = (int)curs_col - compl_col; | |
444 | compl_pattern = vim_strnsave(line + compl_col, compl_length); | |
445 | if (compl_pattern == NULL) | |
446 | #endif | |
447 | diff -Naur vim70.orig/src/eval.c vim70/src/eval.c | |
448 | --- vim70.orig/src/eval.c 2006-05-05 10:15:26.000000000 -0700 | |
449 | +++ vim70/src/eval.c 2006-07-14 10:51:54.000000000 -0700 | |
450 | @@ -8252,6 +8252,12 @@ | |
451 | EMSG(_("E785: complete() can only be used in Insert mode")); | |
452 | return; | |
453 | } | |
454 | + | |
455 | + /* Check for undo allowed here, because if something was already inserted | |
456 | + * the line was already saved for undo and this check isn't done. */ | |
457 | + if (!undo_allowed()) | |
458 | + return; | |
459 | + | |
460 | if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL) | |
461 | { | |
462 | EMSG(_(e_invarg)); | |
463 | @@ -9792,6 +9798,9 @@ | |
464 | varnumber_T n; | |
465 | int error = FALSE; | |
466 | ||
467 | + /* Position the cursor. Needed after a message that ends in a space. */ | |
468 | + windgoto(msg_row, msg_col); | |
469 | + | |
470 | ++no_mapping; | |
471 | ++allow_keys; | |
472 | if (argvars[0].v_type == VAR_UNKNOWN) | |
473 | @@ -11312,14 +11321,19 @@ | |
474 | ||
475 | static int inputsecret_flag = 0; | |
476 | ||
477 | +static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog)); | |
478 | + | |
479 | /* | |
480 | - * "input()" function | |
481 | - * Also handles inputsecret() when inputsecret is set. | |
482 | + * This function is used by f_input() and f_inputdialog() functions. The third | |
483 | + * argument to f_input() specifies the type of completion to use at the | |
484 | + * prompt. The third argument to f_inputdialog() specifies the value to return | |
485 | + * when the user cancels the prompt. | |
486 | */ | |
487 | static void | |
488 | -f_input(argvars, rettv) | |
489 | +get_user_input(argvars, rettv, inputdialog) | |
490 | typval_T *argvars; | |
491 | typval_T *rettv; | |
492 | + int inputdialog; | |
493 | { | |
494 | char_u *prompt = get_tv_string_chk(&argvars[0]); | |
495 | char_u *p = NULL; | |
496 | @@ -11369,10 +11383,10 @@ | |
497 | if (defstr != NULL) | |
498 | stuffReadbuffSpec(defstr); | |
499 | ||
500 | - if (argvars[2].v_type != VAR_UNKNOWN) | |
501 | + if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN) | |
502 | { | |
503 | char_u *xp_name; | |
504 | - int xp_namelen; | |
505 | + int xp_namelen; | |
506 | long argt; | |
507 | ||
508 | rettv->vval.v_string = NULL; | |
509 | @@ -11404,6 +11418,18 @@ | |
510 | } | |
511 | ||
512 | /* | |
513 | + * "input()" function | |
514 | + * Also handles inputsecret() when inputsecret is set. | |
515 | + */ | |
516 | + static void | |
517 | +f_input(argvars, rettv) | |
518 | + typval_T *argvars; | |
519 | + typval_T *rettv; | |
520 | +{ | |
521 | + get_user_input(argvars, rettv, FALSE); | |
522 | +} | |
523 | + | |
524 | +/* | |
525 | * "inputdialog()" function | |
526 | */ | |
527 | static void | |
528 | @@ -11443,7 +11469,7 @@ | |
529 | } | |
530 | else | |
531 | #endif | |
532 | - f_input(argvars, rettv); | |
533 | + get_user_input(argvars, rettv, TRUE); | |
534 | } | |
535 | ||
536 | /* | |
537 | @@ -13250,7 +13276,7 @@ | |
538 | if (argvars[2].v_type != VAR_UNKNOWN) | |
539 | EMSG2(_(e_toomanyarg), "remove()"); | |
540 | else if ((d = argvars[0].vval.v_dict) != NULL | |
541 | - && !tv_check_lock(d->dv_lock, (char_u *)"remove()")) | |
542 | + && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument")) | |
543 | { | |
544 | key = get_tv_string_chk(&argvars[1]); | |
545 | if (key != NULL) | |
546 | @@ -13270,7 +13296,7 @@ | |
547 | else if (argvars[0].v_type != VAR_LIST) | |
548 | EMSG2(_(e_listdictarg), "remove()"); | |
549 | else if ((l = argvars[0].vval.v_list) != NULL | |
550 | - && !tv_check_lock(l->lv_lock, (char_u *)"remove()")) | |
551 | + && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument")) | |
552 | { | |
553 | int error = FALSE; | |
554 | ||
555 | @@ -17759,6 +17785,13 @@ | |
556 | } | |
557 | else /* add a new variable */ | |
558 | { | |
559 | + /* Can't add "v:" variable. */ | |
560 | + if (ht == &vimvarht) | |
561 | + { | |
562 | + EMSG2(_(e_illvar), name); | |
563 | + return; | |
564 | + } | |
565 | + | |
566 | /* Make sure the variable name is valid. */ | |
567 | for (p = varname; *p != NUL; ++p) | |
568 | if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p)) | |
569 | @@ -18963,7 +18996,8 @@ | |
570 | else if (lead > 0) | |
571 | { | |
572 | lead = 3; | |
573 | - if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp)) | |
574 | + if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name)) | |
575 | + || eval_fname_sid(*pp)) | |
576 | { | |
577 | /* It's "s:" or "<SID>" */ | |
578 | if (current_SID <= 0) | |
579 | @@ -19685,6 +19719,7 @@ | |
580 | v->di_tv.vval.v_list = &fc.l_varlist; | |
581 | vim_memset(&fc.l_varlist, 0, sizeof(list_T)); | |
582 | fc.l_varlist.lv_refcount = 99999; | |
583 | + fc.l_varlist.lv_lock = VAR_FIXED; | |
584 | ||
585 | /* | |
586 | * Set a:firstline to "firstline" and a:lastline to "lastline". | |
587 | diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h | |
588 | --- vim70.orig/src/ex_cmds.h 2006-04-07 02:44:46.000000000 -0700 | |
589 | +++ vim70/src/ex_cmds.h 2006-07-14 08:51:21.000000000 -0700 | |
590 | @@ -262,7 +262,7 @@ | |
591 | EX(CMD_comclear, "comclear", ex_comclear, | |
592 | TRLBAR|CMDWIN), | |
593 | EX(CMD_compiler, "compiler", ex_compiler, | |
594 | - BANG|TRLBAR|WORD1), | |
595 | + BANG|TRLBAR|WORD1|CMDWIN), | |
596 | EX(CMD_continue, "continue", ex_continue, | |
597 | TRLBAR|SBOXOK|CMDWIN), | |
598 | EX(CMD_confirm, "confirm", ex_wrongmodifier, | |
599 | diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c | |
600 | --- vim70.orig/src/ex_docmd.c 2006-05-05 09:33:19.000000000 -0700 | |
601 | +++ vim70/src/ex_docmd.c 2006-07-14 08:51:21.000000000 -0700 | |
602 | @@ -833,7 +833,7 @@ | |
603 | * If requested, store and reset the global values controlling the | |
604 | * exception handling (used when debugging). | |
605 | */ | |
606 | - else if (flags & DOCMD_EXCRESET) | |
607 | + if (flags & DOCMD_EXCRESET) | |
608 | save_dbg_stuff(&debug_saved); | |
609 | ||
610 | initial_trylevel = trylevel; | |
611 | diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c | |
612 | --- vim70.orig/src/gui_at_fs.c 2005-07-09 04:30:17.000000000 -0700 | |
613 | +++ vim70/src/gui_at_fs.c 2006-07-14 08:51:21.000000000 -0700 | |
614 | @@ -1861,27 +1861,27 @@ | |
615 | XtPointer pnew; | |
616 | { | |
617 | SFDir *dir; | |
618 | - int nw; | |
619 | + int nw = (int)(long)pnew; | |
620 | ||
621 | dir = &(SFdirs[SFdirPtr + (int)(long)n]); | |
622 | ||
623 | #ifdef FEAT_GUI_NEXTAW | |
624 | - if ((int)(long)pnew < 0) | |
625 | + if (nw < 0) | |
626 | { | |
627 | - if ((int)(long)pnew > -SFvScrollHeight) | |
628 | - (int)(long)pnew = -1; | |
629 | + if (nw > -SFvScrollHeight) | |
630 | + nw = -1; | |
631 | else | |
632 | - (int)(long)pnew = -SFlistSize; | |
633 | + nw = -SFlistSize; | |
634 | } | |
635 | - else if ((int)(long)pnew > 0) | |
636 | + else if (nw > 0) | |
637 | { | |
638 | - if ((int)(long)pnew < SFvScrollHeight) | |
639 | - (int)(long)pnew = 1; | |
640 | + if (nw < SFvScrollHeight) | |
641 | + nw = 1; | |
642 | else | |
643 | - (int)(long)pnew = SFlistSize; | |
644 | + nw = SFlistSize; | |
645 | } | |
646 | #endif | |
647 | - nw = dir->vOrigin + (int)(long)pnew; | |
648 | + nw += dir->vOrigin; | |
649 | ||
650 | if (nw > dir->nEntries - SFlistSize) | |
651 | nw = dir->nEntries - SFlistSize; | |
652 | @@ -1941,27 +1941,27 @@ | |
653 | XtPointer pnew; | |
654 | { | |
655 | SFDir *dir; | |
656 | - int nw; | |
657 | + int nw = (int)(long)pnew; | |
658 | ||
659 | dir = &(SFdirs[SFdirPtr + (int)(long)n]); | |
660 | ||
661 | #ifdef FEAT_GUI_NEXTAW | |
662 | - if ((int)(long)pnew < 0) | |
663 | + if (nw < 0) | |
664 | { | |
665 | - if ((int)(long)pnew > -SFhScrollWidth) | |
666 | - (int)(long)pnew = -1; | |
667 | + if (nw > -SFhScrollWidth) | |
668 | + nw = -1; | |
669 | else | |
670 | - (int)(long)pnew = -SFcharsPerEntry; | |
671 | + nw = -SFcharsPerEntry; | |
672 | } | |
673 | - else if ((int)(long)pnew > 0) | |
674 | + else if (nw > 0) | |
675 | { | |
676 | - if ((int)(long)pnew < SFhScrollWidth) | |
677 | - (int)(long)pnew = 1; | |
678 | + if (nw < SFhScrollWidth) | |
679 | + nw = 1; | |
680 | else | |
681 | - (int)(long)pnew = SFcharsPerEntry; | |
682 | + nw = SFcharsPerEntry; | |
683 | } | |
684 | #endif | |
685 | - nw = dir->hOrigin + (int)(long)pnew; | |
686 | + nw += dir->hOrigin; | |
687 | ||
688 | if (nw > dir->nChars - SFcharsPerEntry) | |
689 | nw = dir->nChars - SFcharsPerEntry; | |
690 | @@ -2038,26 +2038,26 @@ | |
691 | XtPointer client_data; | |
692 | XtPointer pnew; | |
693 | { | |
694 | - int nw; | |
695 | + int nw = (int)(long)pnew; | |
696 | float f; | |
697 | ||
698 | #ifdef FEAT_GUI_NEXTAW | |
699 | - if ((int)(long)pnew < 0) | |
700 | + if (nw < 0) | |
701 | { | |
702 | - if ((int)(long)pnew > -SFpathScrollWidth) | |
703 | - (int)(long)pnew = -1; | |
704 | + if (nw > -SFpathScrollWidth) | |
705 | + nw = -1; | |
706 | else | |
707 | - (int)(long)pnew = -3; | |
708 | + nw = -3; | |
709 | } | |
710 | - else if ((int)(long)pnew > 0) | |
711 | + else if (nw > 0) | |
712 | { | |
713 | - if ((int)(long)pnew < SFpathScrollWidth) | |
714 | - (int)(long)pnew = 1; | |
715 | + if (nw < SFpathScrollWidth) | |
716 | + nw = 1; | |
717 | else | |
718 | - (int)(long)pnew = 3; | |
719 | + nw = 3; | |
720 | } | |
721 | #endif | |
722 | - nw = SFdirPtr + (int)(long)pnew; | |
723 | + nw += SFdirPtr; | |
724 | ||
725 | if (nw > SFdirEnd - 3) | |
726 | nw = SFdirEnd - 3; | |
727 | diff -Naur vim70.orig/src/gui.c vim70/src/gui.c | |
728 | --- vim70.orig/src/gui.c 2006-05-03 04:00:59.000000000 -0700 | |
729 | +++ vim70/src/gui.c 2006-07-14 08:51:21.000000000 -0700 | |
730 | @@ -4515,7 +4515,7 @@ | |
731 | int y; | |
732 | { | |
733 | win_T *wp; | |
734 | - char_u st[6]; | |
735 | + char_u st[8]; | |
736 | ||
737 | /* Ignore this while still starting up. */ | |
738 | if (!gui.in_use || gui.starting) | |
739 | @@ -4603,11 +4603,11 @@ | |
740 | /* Don't move the mouse when it's left or right of the Vim window */ | |
741 | if (x < 0 || x > Columns * gui.char_width) | |
742 | return; | |
743 | + if (y >= 0 | |
744 | # ifdef FEAT_WINDOWS | |
745 | - if (Y_2_ROW(y) >= tabline_height()) | |
746 | -# else | |
747 | - if (y >= 0) | |
748 | + && Y_2_ROW(y) >= tabline_height() | |
749 | # endif | |
750 | + ) | |
751 | wp = xy2win(x, y); | |
752 | if (wp != curwin && wp != NULL) /* If in other than current window */ | |
753 | { | |
754 | diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c | |
755 | --- vim70.orig/src/gui_xmebw.c 2006-04-30 08:32:32.000000000 -0700 | |
756 | +++ vim70/src/gui_xmebw.c 2006-07-14 08:51:21.000000000 -0700 | |
757 | @@ -47,13 +47,13 @@ | |
758 | #include "gui_xmebwp.h" | |
759 | ||
760 | /* Provide some missing wrappers, which are missed from the LessTif | |
761 | - * implementation. | |
762 | + * implementation. Also missing in Motif 1.2 and earlier. | |
763 | * | |
764 | * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the | |
765 | * pixmap will not appear in it's caches properly. We cache the interresting | |
766 | * values in XmEnhancedButtonPart instead ourself. | |
767 | */ | |
768 | -#ifdef LESSTIF_VERSION | |
769 | +#if defined(LESSTIF_VERSION) || (XmVersion <= 1002) | |
770 | # ifndef Lab_IsMenupane | |
771 | # define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \ | |
772 | Lab_MenuType(w) == (int)XmMENU_PULLDOWN) | |
773 | @@ -480,7 +480,7 @@ | |
774 | || (eb->core.height <= 2 * eb->primitive.highlight_thickness)) | |
775 | return; | |
776 | ||
777 | -#ifndef LESSTIF_VERSION | |
778 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
779 | { | |
780 | XmDisplay dpy; | |
781 | ||
782 | @@ -641,7 +641,7 @@ | |
783 | GC tmp_gc = NULL; | |
784 | Boolean replaceGC = False; | |
785 | Boolean deadjusted = False; | |
786 | -#ifndef LESSTIF_VERSION | |
787 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
788 | XmDisplay dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb)); | |
789 | Boolean etched_in = dpy->display.enable_etched_in_menu; | |
790 | #else | |
791 | @@ -726,7 +726,7 @@ | |
792 | if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up) | |
793 | && _XmGetInDragMode((Widget) eb)) | |
794 | { | |
795 | -#ifndef LESSTIF_VERSION | |
796 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
797 | XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid)); | |
798 | Boolean etched_in = dpy->display.enable_etched_in_menu; | |
799 | #else | |
800 | @@ -810,7 +810,7 @@ | |
801 | ||
802 | if (Lab_IsMenupane(eb)) | |
803 | { | |
804 | -#ifndef LESSTIF_VERSION | |
805 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
806 | XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid)); | |
807 | Boolean etched_in = dpy->display.enable_etched_in_menu; | |
808 | #else | |
809 | @@ -1150,7 +1150,7 @@ | |
810 | Redisplay(Widget w, XEvent *event, Region region) | |
811 | { | |
812 | XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) w; | |
813 | -#ifndef LESSTIF_VERSION | |
814 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
815 | XmDisplay dpy; | |
816 | XtEnum default_button_emphasis; | |
817 | #endif | |
818 | @@ -1162,7 +1162,7 @@ | |
819 | if (!XtIsRealized((Widget)eb)) | |
820 | return; | |
821 | ||
822 | -#ifndef LESSTIF_VERSION | |
823 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
824 | dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb)); | |
825 | default_button_emphasis = dpy->display.default_button_emphasis; | |
826 | #endif | |
827 | @@ -1241,7 +1241,7 @@ | |
828 | { | |
829 | int adjust = 0; | |
830 | ||
831 | -#ifndef LESSTIF_VERSION | |
832 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
833 | /* | |
834 | * NOTE: PushButton has two types of shadows: primitive-shadow and | |
835 | * default-button-shadow. If pushbutton is in a menu only primitive | |
836 | @@ -1289,7 +1289,7 @@ | |
837 | adjust, adjust, rectwidth, rectheight, borderwidth); | |
838 | } | |
839 | ||
840 | -#ifndef LESSTIF_VERSION | |
841 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
842 | switch (default_button_emphasis) | |
843 | { | |
844 | case XmINTERNAL_HIGHLIGHT: | |
845 | @@ -1365,7 +1365,7 @@ | |
846 | default_button_shadow_thickness = | |
847 | eb->pushbutton.default_button_shadow_thickness; | |
848 | ||
849 | -#ifndef LESSTIF_VERSION | |
850 | +#if !defined(LESSTIF_VERSION) && (XmVersion > 1002) | |
851 | /* | |
852 | * Compute location of bounding box to contain the | |
853 | * defaultButtonShadow. | |
854 | diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c | |
855 | --- vim70.orig/src/if_ruby.c 2006-04-30 08:37:52.000000000 -0700 | |
856 | +++ vim70/src/if_ruby.c 2006-07-14 08:51:21.000000000 -0700 | |
857 | @@ -643,11 +643,23 @@ | |
858 | ||
859 | static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str) | |
860 | { | |
861 | - buf_T *savebuf = curbuf; | |
862 | - char *line = STR2CSTR(str); | |
863 | + char *line = STR2CSTR(str); | |
864 | +#ifdef FEAT_AUTOCMD | |
865 | + aco_save_T aco; | |
866 | +#else | |
867 | + buf_T *save_curbuf = curbuf; | |
868 | +#endif | |
869 | ||
870 | - if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) { | |
871 | + if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) | |
872 | + { | |
873 | +#ifdef FEAT_AUTOCMD | |
874 | + /* set curwin/curbuf for "buf" and save some things */ | |
875 | + aucmd_prepbuf(&aco, buf); | |
876 | +#else | |
877 | curbuf = buf; | |
878 | + curwin->w_buffer = buf; | |
879 | +#endif | |
880 | + | |
881 | if (u_savesub(n) == OK) { | |
882 | ml_replace(n, (char_u *)line, TRUE); | |
883 | changed(); | |
884 | @@ -655,10 +667,19 @@ | |
885 | syn_changed(n); /* recompute syntax hl. for this line */ | |
886 | #endif | |
887 | } | |
888 | - curbuf = savebuf; | |
889 | + | |
890 | +#ifdef FEAT_AUTOCMD | |
891 | + /* restore curwin/curbuf and a few other things */ | |
892 | + aucmd_restbuf(&aco); | |
893 | + /* Careful: autocommands may have made "buf" invalid! */ | |
894 | +#else | |
895 | + curwin->w_buffer = save_curbuf; | |
896 | + curbuf = save_curbuf; | |
897 | +#endif | |
898 | update_curbuf(NOT_VALID); | |
899 | } | |
900 | - else { | |
901 | + else | |
902 | + { | |
903 | rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
904 | return Qnil; /* For stop warning */ | |
905 | } | |
906 | @@ -676,12 +697,24 @@ | |
907 | ||
908 | static VALUE buffer_delete(VALUE self, VALUE num) | |
909 | { | |
910 | - buf_T *buf = get_buf(self); | |
911 | - buf_T *savebuf = curbuf; | |
912 | - long n = NUM2LONG(num); | |
913 | + buf_T *buf = get_buf(self); | |
914 | + long n = NUM2LONG(num); | |
915 | +#ifdef FEAT_AUTOCMD | |
916 | + aco_save_T aco; | |
917 | +#else | |
918 | + buf_T *save_curbuf = curbuf; | |
919 | +#endif | |
920 | ||
921 | - if (n > 0 && n <= buf->b_ml.ml_line_count) { | |
922 | + if (n > 0 && n <= buf->b_ml.ml_line_count) | |
923 | + { | |
924 | +#ifdef FEAT_AUTOCMD | |
925 | + /* set curwin/curbuf for "buf" and save some things */ | |
926 | + aucmd_prepbuf(&aco, buf); | |
927 | +#else | |
928 | curbuf = buf; | |
929 | + curwin->w_buffer = buf; | |
930 | +#endif | |
931 | + | |
932 | if (u_savedel(n, 1) == OK) { | |
933 | ml_delete(n, 0); | |
934 | ||
935 | @@ -691,10 +724,19 @@ | |
936 | ||
937 | changed(); | |
938 | } | |
939 | - curbuf = savebuf; | |
940 | + | |
941 | +#ifdef FEAT_AUTOCMD | |
942 | + /* restore curwin/curbuf and a few other things */ | |
943 | + aucmd_restbuf(&aco); | |
944 | + /* Careful: autocommands may have made "buf" invalid! */ | |
945 | +#else | |
946 | + curwin->w_buffer = save_curbuf; | |
947 | + curbuf = save_curbuf; | |
948 | +#endif | |
949 | update_curbuf(NOT_VALID); | |
950 | } | |
951 | - else { | |
952 | + else | |
953 | + { | |
954 | rb_raise(rb_eIndexError, "index %d out of buffer", n); | |
955 | } | |
956 | return Qnil; | |
957 | @@ -702,13 +744,25 @@ | |
958 | ||
959 | static VALUE buffer_append(VALUE self, VALUE num, VALUE str) | |
960 | { | |
961 | - buf_T *buf = get_buf(self); | |
962 | - buf_T *savebuf = curbuf; | |
963 | - char *line = STR2CSTR(str); | |
964 | - long n = NUM2LONG(num); | |
965 | + buf_T *buf = get_buf(self); | |
966 | + char *line = STR2CSTR(str); | |
967 | + long n = NUM2LONG(num); | |
968 | +#ifdef FEAT_AUTOCMD | |
969 | + aco_save_T aco; | |
970 | +#else | |
971 | + buf_T *save_curbuf = curbuf; | |
972 | +#endif | |
973 | ||
974 | - if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) { | |
975 | + if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) | |
976 | + { | |
977 | +#ifdef FEAT_AUTOCMD | |
978 | + /* set curwin/curbuf for "buf" and save some things */ | |
979 | + aucmd_prepbuf(&aco, buf); | |
980 | +#else | |
981 | curbuf = buf; | |
982 | + curwin->w_buffer = buf; | |
983 | +#endif | |
984 | + | |
985 | if (u_inssub(n + 1) == OK) { | |
986 | ml_append(n, (char_u *) line, (colnr_T) 0, FALSE); | |
987 | ||
988 | @@ -718,7 +772,15 @@ | |
989 | ||
990 | changed(); | |
991 | } | |
992 | - curbuf = savebuf; | |
993 | + | |
994 | +#ifdef FEAT_AUTOCMD | |
995 | + /* restore curwin/curbuf and a few other things */ | |
996 | + aucmd_restbuf(&aco); | |
997 | + /* Careful: autocommands may have made "buf" invalid! */ | |
998 | +#else | |
999 | + curwin->w_buffer = save_curbuf; | |
1000 | + curbuf = save_curbuf; | |
1001 | +#endif | |
1002 | update_curbuf(NOT_VALID); | |
1003 | } | |
1004 | else { | |
1005 | diff -Naur vim70.orig/src/main.c vim70/src/main.c | |
1006 | --- vim70.orig/src/main.c 2006-05-03 10:36:44.000000000 -0700 | |
1007 | +++ vim70/src/main.c 2006-07-14 08:51:21.000000000 -0700 | |
1008 | @@ -564,7 +564,11 @@ | |
1009 | */ | |
1010 | if (p_lpl) | |
1011 | { | |
1012 | +# ifdef VMS /* Somehow VMS doesn't handle the "**". */ | |
1013 | + source_runtime((char_u *)"plugin/*.vim", TRUE); | |
1014 | +# else | |
1015 | source_runtime((char_u *)"plugin/**/*.vim", TRUE); | |
1016 | +# endif | |
1017 | TIME_MSG("loading plugins"); | |
1018 | } | |
1019 | #endif | |
1020 | diff -Naur vim70.orig/src/Makefile vim70/src/Makefile | |
1021 | --- vim70.orig/src/Makefile 2006-05-07 06:25:27.000000000 -0700 | |
1022 | +++ vim70/src/Makefile 2006-07-14 08:51:21.000000000 -0700 | |
1023 | @@ -2177,6 +2177,7 @@ | |
1024 | cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* . | |
1025 | if test -d $(RSRC_DIR); then \ | |
1026 | cd $(SHADOWDIR); \ | |
1027 | + ln -s ../infplist.xml .; \ | |
1028 | ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \ | |
1029 | fi | |
1030 | mkdir $(SHADOWDIR)/testdir | |
1031 | diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c | |
1032 | --- vim70.orig/src/mbyte.c 2006-04-30 04:51:01.000000000 -0700 | |
1033 | +++ vim70/src/mbyte.c 2006-07-14 08:51:21.000000000 -0700 | |
1034 | @@ -311,7 +311,11 @@ | |
1035 | ||
1036 | #define IDX_MACROMAN 57 | |
1037 | {"macroman", ENC_8BIT + ENC_MACROMAN, 0}, /* Mac OS */ | |
1038 | -#define IDX_COUNT 58 | |
1039 | +#define IDX_DECMCS 58 | |
1040 | + {"dec-mcs", ENC_8BIT, 0}, /* DEC MCS */ | |
1041 | +#define IDX_HPROMAN8 59 | |
1042 | + {"hp-roman8", ENC_8BIT, 0}, /* HP Roman8 */ | |
1043 | +#define IDX_COUNT 60 | |
1044 | }; | |
1045 | ||
1046 | /* | |
1047 | @@ -386,6 +390,7 @@ | |
1048 | {"950", IDX_BIG5}, | |
1049 | #endif | |
1050 | {"mac", IDX_MACROMAN}, | |
1051 | + {"mac-roman", IDX_MACROMAN}, | |
1052 | {NULL, 0} | |
1053 | }; | |
1054 | ||
1055 | diff -Naur vim70.orig/src/message.c vim70/src/message.c | |
1056 | --- vim70.orig/src/message.c 2006-05-06 13:07:37.000000000 -0700 | |
1057 | +++ vim70/src/message.c 2006-07-14 08:51:21.000000000 -0700 | |
1058 | @@ -4175,15 +4175,16 @@ | |
1059 | str_arg_l = 0; | |
1060 | else | |
1061 | { | |
1062 | - /* memchr on HP does not like n > 2^31 !!! */ | |
1063 | - char *q = memchr(str_arg, '\0', | |
1064 | + /* Don't put the #if inside memchr(), it can be a | |
1065 | + * macro. */ | |
1066 | #if SIZEOF_INT <= 2 | |
1067 | - precision | |
1068 | + char *q = memchr(str_arg, '\0', precision); | |
1069 | #else | |
1070 | - precision <= (size_t)0x7fffffffL ? precision | |
1071 | - : (size_t)0x7fffffffL | |
1072 | + /* memchr on HP does not like n > 2^31 !!! */ | |
1073 | + char *q = memchr(str_arg, '\0', | |
1074 | + precision <= (size_t)0x7fffffffL ? precision | |
1075 | + : (size_t)0x7fffffffL); | |
1076 | #endif | |
1077 | - ); | |
1078 | str_arg_l = (q == NULL) ? precision : q - str_arg; | |
1079 | } | |
1080 | break; | |
1081 | diff -Naur vim70.orig/src/ops.c vim70/src/ops.c | |
1082 | --- vim70.orig/src/ops.c 2006-04-30 08:13:44.000000000 -0700 | |
1083 | +++ vim70/src/ops.c 2006-07-14 08:51:21.000000000 -0700 | |
1084 | @@ -2413,6 +2413,7 @@ | |
1085 | else | |
1086 | { | |
1087 | curwin->w_cursor = oap->end; | |
1088 | + check_cursor_col(); | |
1089 | ||
1090 | /* Works just like an 'i'nsert on the next character. */ | |
1091 | if (!lineempty(curwin->w_cursor.lnum) | |
1092 | diff -Naur vim70.orig/src/option.c vim70/src/option.c | |
1093 | --- vim70.orig/src/option.c 2006-05-03 10:32:28.000000000 -0700 | |
1094 | +++ vim70/src/option.c 2006-07-14 08:51:21.000000000 -0700 | |
1095 | @@ -2294,7 +2294,7 @@ | |
1096 | {(char_u *)0L, (char_u *)0L} | |
1097 | #endif | |
1098 | }, | |
1099 | - {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE, | |
1100 | + {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA, | |
1101 | #ifdef FEAT_SPELL | |
1102 | (char_u *)&p_sps, PV_NONE, | |
1103 | {(char_u *)"best", (char_u *)0L} | |
1104 | @@ -5227,13 +5227,13 @@ | |
1105 | case PV_STL: return &curwin->w_p_stl_flags; | |
1106 | #endif | |
1107 | #ifdef FEAT_EVAL | |
1108 | +# ifdef FEAT_FOLDING | |
1109 | case PV_FDE: return &curwin->w_p_fde_flags; | |
1110 | case PV_FDT: return &curwin->w_p_fdt_flags; | |
1111 | +# endif | |
1112 | # ifdef FEAT_BEVAL | |
1113 | case PV_BEXPR: return &curbuf->b_p_bexpr_flags; | |
1114 | # endif | |
1115 | -#endif | |
1116 | -#if defined(FEAT_EVAL) | |
1117 | # if defined(FEAT_CINDENT) | |
1118 | case PV_INDE: return &curbuf->b_p_inde_flags; | |
1119 | # endif | |
1120 | diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c | |
1121 | --- vim70.orig/src/os_unix.c 2006-05-01 01:13:15.000000000 -0700 | |
1122 | +++ vim70/src/os_unix.c 2006-07-14 08:51:21.000000000 -0700 | |
1123 | @@ -4971,7 +4971,8 @@ | |
1124 | if (((*file)[*num_file] = alloc(len + 2)) != NULL) | |
1125 | { | |
1126 | STRCPY((*file)[*num_file], p); | |
1127 | - if (!after_pathsep((*file)[*num_file] + len)) | |
1128 | + if (!after_pathsep((*file)[*num_file], | |
1129 | + (*file)[*num_file] + len)) | |
1130 | { | |
1131 | (*file)[*num_file][len] = psepc; | |
1132 | (*file)[*num_file][len + 1] = NUL; | |
1133 | @@ -5757,8 +5758,13 @@ | |
1134 | int retval_int = 0; | |
1135 | int success = FALSE; | |
1136 | ||
1137 | - /* Get a handle to the DLL module. */ | |
1138 | + /* | |
1139 | + * Get a handle to the DLL module. | |
1140 | + */ | |
1141 | # if defined(USE_DLOPEN) | |
1142 | + /* First clear any error, it's not cleared by the dlopen() call. */ | |
1143 | + (void)dlerror(); | |
1144 | + | |
1145 | hinstLib = dlopen((char *)libname, RTLD_LAZY | |
1146 | # ifdef RTLD_LOCAL | |
1147 | | RTLD_LOCAL | |
1148 | diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro | |
1149 | --- vim70.orig/src/proto/undo.pro 2006-05-07 06:09:11.000000000 -0700 | |
1150 | +++ vim70/src/proto/undo.pro 2006-07-14 10:51:11.000000000 -0700 | |
1151 | @@ -4,6 +4,7 @@ | |
1152 | extern int u_savesub __ARGS((linenr_T lnum)); | |
1153 | extern int u_inssub __ARGS((linenr_T lnum)); | |
1154 | extern int u_savedel __ARGS((linenr_T lnum, long nlines)); | |
1155 | +extern int undo_allowed __ARGS((void)); | |
1156 | extern void u_undo __ARGS((int count)); | |
1157 | extern void u_redo __ARGS((int count)); | |
1158 | extern void undo_time __ARGS((long step, int sec, int absolute)); | |
1159 | diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c | |
1160 | --- vim70.orig/src/quickfix.c 2006-05-03 00:47:42.000000000 -0700 | |
1161 | +++ vim70/src/quickfix.c 2006-07-14 08:51:21.000000000 -0700 | |
1162 | @@ -602,13 +602,19 @@ | |
1163 | else | |
1164 | type = 0; | |
1165 | /* | |
1166 | - * Extract error message data from matched line | |
1167 | + * Extract error message data from matched line. | |
1168 | + * We check for an actual submatch, because "\[" and "\]" in | |
1169 | + * the 'errorformat' may cause the wrong submatch to be used. | |
1170 | */ | |
1171 | if ((i = (int)fmt_ptr->addr[0]) > 0) /* %f */ | |
1172 | { | |
1173 | - int c = *regmatch.endp[i]; | |
1174 | + int c; | |
1175 | + | |
1176 | + if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL) | |
1177 | + continue; | |
1178 | ||
1179 | /* Expand ~/file and $HOME/file to full path. */ | |
1180 | + c = *regmatch.endp[i]; | |
1181 | *regmatch.endp[i] = NUL; | |
1182 | expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE); | |
1183 | *regmatch.endp[i] = c; | |
1184 | @@ -618,35 +624,63 @@ | |
1185 | continue; | |
1186 | } | |
1187 | if ((i = (int)fmt_ptr->addr[1]) > 0) /* %n */ | |
1188 | + { | |
1189 | + if (regmatch.startp[i] == NULL) | |
1190 | + continue; | |
1191 | enr = (int)atol((char *)regmatch.startp[i]); | |
1192 | + } | |
1193 | if ((i = (int)fmt_ptr->addr[2]) > 0) /* %l */ | |
1194 | + { | |
1195 | + if (regmatch.startp[i] == NULL) | |
1196 | + continue; | |
1197 | lnum = atol((char *)regmatch.startp[i]); | |
1198 | + } | |
1199 | if ((i = (int)fmt_ptr->addr[3]) > 0) /* %c */ | |
1200 | + { | |
1201 | + if (regmatch.startp[i] == NULL) | |
1202 | + continue; | |
1203 | col = (int)atol((char *)regmatch.startp[i]); | |
1204 | + } | |
1205 | if ((i = (int)fmt_ptr->addr[4]) > 0) /* %t */ | |
1206 | + { | |
1207 | + if (regmatch.startp[i] == NULL) | |
1208 | + continue; | |
1209 | type = *regmatch.startp[i]; | |
1210 | + } | |
1211 | if (fmt_ptr->flags == '+' && !multiscan) /* %+ */ | |
1212 | STRCPY(errmsg, IObuff); | |
1213 | else if ((i = (int)fmt_ptr->addr[5]) > 0) /* %m */ | |
1214 | { | |
1215 | + if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL) | |
1216 | + continue; | |
1217 | len = (int)(regmatch.endp[i] - regmatch.startp[i]); | |
1218 | vim_strncpy(errmsg, regmatch.startp[i], len); | |
1219 | } | |
1220 | if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */ | |
1221 | + { | |
1222 | + if (regmatch.startp[i] == NULL) | |
1223 | + continue; | |
1224 | tail = regmatch.startp[i]; | |
1225 | + } | |
1226 | if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */ | |
1227 | { | |
1228 | + if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL) | |
1229 | + continue; | |
1230 | col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1); | |
1231 | if (*((char_u *)regmatch.startp[i]) != TAB) | |
1232 | use_viscol = TRUE; | |
1233 | } | |
1234 | if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */ | |
1235 | { | |
1236 | + if (regmatch.startp[i] == NULL) | |
1237 | + continue; | |
1238 | col = (int)atol((char *)regmatch.startp[i]); | |
1239 | use_viscol = TRUE; | |
1240 | } | |
1241 | if ((i = (int)fmt_ptr->addr[9]) > 0) /* %s */ | |
1242 | { | |
1243 | + if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL) | |
1244 | + continue; | |
1245 | len = (int)(regmatch.endp[i] - regmatch.startp[i]); | |
1246 | if (len > CMDBUFFSIZE - 5) | |
1247 | len = CMDBUFFSIZE - 5; | |
1248 | diff -Naur vim70.orig/src/screen.c vim70/src/screen.c | |
1249 | --- vim70.orig/src/screen.c 2006-05-05 03:13:55.000000000 -0700 | |
1250 | +++ vim70/src/screen.c 2006-07-14 10:50:30.000000000 -0700 | |
1251 | @@ -2612,7 +2612,8 @@ | |
1252 | #ifdef FEAT_LINEBREAK | |
1253 | int need_showbreak = FALSE; | |
1254 | #endif | |
1255 | -#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) | |
1256 | +#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \ | |
1257 | + || defined(FEAT_SYN_HL) || defined(FEAT_DIFF) | |
1258 | # define LINE_ATTR | |
1259 | int line_attr = 0; /* atrribute for the whole line */ | |
1260 | #endif | |
1261 | @@ -2626,7 +2627,7 @@ | |
1262 | int prev_c = 0; /* previous Arabic character */ | |
1263 | int prev_c1 = 0; /* first composing char for prev_c */ | |
1264 | #endif | |
1265 | -#if defined(FEAT_DIFF) || defined(LINE_ATTR) | |
1266 | +#if defined(LINE_ATTR) | |
1267 | int did_line_attr = 0; | |
1268 | #endif | |
1269 | ||
1270 | @@ -4116,17 +4117,12 @@ | |
1271 | --ptr; /* put it back at the NUL */ | |
1272 | } | |
1273 | #endif | |
1274 | -#if defined(FEAT_DIFF) || defined(LINE_ATTR) | |
1275 | +#if defined(LINE_ATTR) | |
1276 | else if (( | |
1277 | # ifdef FEAT_DIFF | |
1278 | - diff_hlf != (hlf_T)0 | |
1279 | -# ifdef LINE_ATTR | |
1280 | - || | |
1281 | -# endif | |
1282 | + diff_hlf != (hlf_T)0 || | |
1283 | # endif | |
1284 | -# ifdef LINE_ATTR | |
1285 | line_attr != 0 | |
1286 | -# endif | |
1287 | ) && ( | |
1288 | # ifdef FEAT_RIGHTLEFT | |
1289 | wp->w_p_rl ? (col >= 0) : | |
1290 | @@ -4237,7 +4233,7 @@ | |
1291 | * At end of the text line or just after the last character. | |
1292 | */ | |
1293 | if (c == NUL | |
1294 | -#if defined(FEAT_DIFF) || defined(LINE_ATTR) | |
1295 | +#if defined(LINE_ATTR) | |
1296 | || did_line_attr == 1 | |
1297 | #endif | |
1298 | ) | |
1299 | @@ -4258,7 +4254,7 @@ | |
1300 | || prevcol == (long)match_hl[0].startcol | |
1301 | || prevcol == (long)match_hl[1].startcol | |
1302 | || prevcol == (long)match_hl[2].startcol) | |
1303 | -# if defined(FEAT_DIFF) || defined(LINE_ATTR) | |
1304 | +# if defined(LINE_ATTR) | |
1305 | && did_line_attr <= 1 | |
1306 | # endif | |
1307 | ) | |
1308 | @@ -7133,6 +7129,12 @@ | |
1309 | return; | |
1310 | entered = TRUE; | |
1311 | ||
1312 | + /* | |
1313 | + * Note that the window sizes are updated before reallocating the arrays, | |
1314 | + * thus we must not redraw here! | |
1315 | + */ | |
1316 | + ++RedrawingDisabled; | |
1317 | + | |
1318 | win_new_shellsize(); /* fit the windows in the new sized shell */ | |
1319 | ||
1320 | comp_col(); /* recompute columns for shown command and ruler */ | |
1321 | @@ -7367,6 +7369,7 @@ | |
1322 | #endif | |
1323 | ||
1324 | entered = FALSE; | |
1325 | + --RedrawingDisabled; | |
1326 | ||
1327 | #ifdef FEAT_AUTOCMD | |
1328 | if (starting == 0) | |
1329 | diff -Naur vim70.orig/src/spell.c vim70/src/spell.c | |
1330 | --- vim70.orig/src/spell.c 2006-05-05 00:49:58.000000000 -0700 | |
1331 | +++ vim70/src/spell.c 2006-07-14 08:51:21.000000000 -0700 | |
1332 | @@ -2108,7 +2108,8 @@ | |
1333 | * possible. */ | |
1334 | STRCPY(buf, line); | |
1335 | if (lnum < wp->w_buffer->b_ml.ml_line_count) | |
1336 | - spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN); | |
1337 | + spell_cat_line(buf + STRLEN(buf), | |
1338 | + ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN); | |
1339 | ||
1340 | p = buf + skip; | |
1341 | endp = buf + len; | |
1342 | diff -Naur vim70.orig/src/undo.c vim70/src/undo.c | |
1343 | --- vim70.orig/src/undo.c 2006-04-21 02:30:59.000000000 -0700 | |
1344 | +++ vim70/src/undo.c 2006-07-14 10:51:11.000000000 -0700 | |
1345 | @@ -84,7 +84,6 @@ | |
1346 | static void u_unch_branch __ARGS((u_header_T *uhp)); | |
1347 | static u_entry_T *u_get_headentry __ARGS((void)); | |
1348 | static void u_getbot __ARGS((void)); | |
1349 | -static int undo_allowed __ARGS((void)); | |
1350 | static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T)); | |
1351 | static void u_doit __ARGS((int count)); | |
1352 | static void u_undoredo __ARGS((int undo)); | |
1353 | @@ -196,7 +195,7 @@ | |
1354 | * Return TRUE when undo is allowed. Otherwise give an error message and | |
1355 | * return FALSE. | |
1356 | */ | |
1357 | - static int | |
1358 | + int | |
1359 | undo_allowed() | |
1360 | { | |
1361 | /* Don't allow changes when 'modifiable' is off. */ | |
1362 | diff -Naur vim70.orig/src/version.c vim70/src/version.c | |
1363 | --- vim70.orig/src/version.c 2006-05-03 00:50:42.000000000 -0700 | |
1364 | +++ vim70/src/version.c 2006-07-14 10:51:54.000000000 -0700 | |
1365 | @@ -667,6 +667,78 @@ | |
1366 | static int included_patches[] = | |
1367 | { /* Add new patch number below this line */ | |
1368 | /**/ | |
1369 | + 39, | |
1370 | +/**/ | |
1371 | + 38, | |
1372 | +/**/ | |
1373 | + 37, | |
1374 | +/**/ | |
1375 | + 36, | |
1376 | +/**/ | |
1377 | + 35, | |
1378 | +/**/ | |
1379 | + 34, | |
1380 | +/**/ | |
1381 | + 33, | |
1382 | +/**/ | |
1383 | + 31, | |
1384 | +/**/ | |
1385 | + 30, | |
1386 | +/**/ | |
1387 | + 29, | |
1388 | +/**/ | |
1389 | + 28, | |
1390 | +/**/ | |
1391 | + 26, | |
1392 | +/**/ | |
1393 | + 25, | |
1394 | +/**/ | |
1395 | + 24, | |
1396 | +/**/ | |
1397 | + 23, | |
1398 | +/**/ | |
1399 | + 22, | |
1400 | +/**/ | |
1401 | + 21, | |
1402 | +/**/ | |
1403 | + 20, | |
1404 | +/**/ | |
1405 | + 19, | |
1406 | +/**/ | |
1407 | + 18, | |
1408 | +/**/ | |
1409 | + 17, | |
1410 | +/**/ | |
1411 | + 16, | |
1412 | +/**/ | |
1413 | + 15, | |
1414 | +/**/ | |
1415 | + 14, | |
1416 | +/**/ | |
1417 | + 13, | |
1418 | +/**/ | |
1419 | + 12, | |
1420 | +/**/ | |
1421 | + 11, | |
1422 | +/**/ | |
1423 | + 10, | |
1424 | +/**/ | |
1425 | + 9, | |
1426 | +/**/ | |
1427 | + 8, | |
1428 | +/**/ | |
1429 | + 7, | |
1430 | +/**/ | |
1431 | + 6, | |
1432 | +/**/ | |
1433 | + 4, | |
1434 | +/**/ | |
1435 | + 3, | |
1436 | +/**/ | |
1437 | + 2, | |
1438 | +/**/ | |
1439 | + 1, | |
1440 | +/**/ | |
1441 | 0 | |
1442 | }; | |
1443 | ||
1444 | diff -Naur vim70.orig/src/vim.h vim70/src/vim.h | |
1445 | --- vim70.orig/src/vim.h 2006-04-30 08:32:38.000000000 -0700 | |
1446 | +++ vim70/src/vim.h 2006-07-14 08:51:21.000000000 -0700 | |
1447 | @@ -585,7 +585,6 @@ | |
1448 | #define INSERT 0x10 /* Insert mode */ | |
1449 | #define LANGMAP 0x20 /* Language mapping, can be combined with | |
1450 | INSERT and CMDLINE */ | |
1451 | -#define MAP_ALL_MODES 0x3f /* all mode bits used for mapping */ | |
1452 | ||
1453 | #define REPLACE_FLAG 0x40 /* Replace mode flag */ | |
1454 | #define REPLACE (REPLACE_FLAG + INSERT) | |
1455 | @@ -605,6 +604,9 @@ | |
1456 | #define CONFIRM 0x800 /* ":confirm" prompt */ | |
1457 | #define SELECTMODE 0x1000 /* Select mode, only for mappings */ | |
1458 | ||
1459 | +#define MAP_ALL_MODES (0x3f | SELECTMODE) /* all mode bits used for | |
1460 | + * mapping */ | |
1461 | + | |
1462 | /* directions */ | |
1463 | #define FORWARD 1 | |
1464 | #define BACKWARD (-1) | |
1465 | @@ -1983,7 +1985,7 @@ | |
1466 | /* values for vim_handle_signal() that are not a signal */ | |
1467 | #define SIGNAL_BLOCK -1 | |
1468 | #define SIGNAL_UNBLOCK -2 | |
1469 | -#if !defined(UNIX) && !defined(VMS) | |
1470 | +#if !defined(UNIX) && !defined(VMS) && !defined(OS2) | |
1471 | # define vim_handle_signal(x) 0 | |
1472 | #endif | |
1473 |