Mercurial > vim
annotate src/ex_cmds2.c @ 17752:6e11a5cb1533 v8.1.1873
patch 8.1.1873: cannot build tiny version
commit https://github.com/vim/vim/commit/df707755554ecc102a908e8d5b64f2903f4f3686
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Aug 17 17:50:07 2019 +0200
patch 8.1.1873: cannot build tiny version
Problem: Cannot build tiny version.
Solution: Remove #ifdef for is_autocmd_blocked().
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 17 Aug 2019 18:00:03 +0200 |
parents | 4a3dca734d36 |
children | 04245f071792 |
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 | |
7799
af3c41a3c53f
commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents:
7726
diff
changeset
|
17 static void cmd_source(char_u *fname, exarg_T *eap); |
7 | 18 |
19 #if defined(FEAT_EVAL) || defined(PROTO) | |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
20 # if defined(FEAT_TIMERS) || defined(PROTO) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
21 static timer_T *first_timer = NULL; |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
22 static long last_timer_id = 0; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
23 |
16594
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
24 /* |
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
25 * Return time left until "due". Negative if past "due". |
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
26 */ |
13878
a590029f16a0
patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
27 long |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
28 proftime_time_left(proftime_T *due, proftime_T *now) |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
29 { |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
30 # ifdef MSWIN |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
31 LARGE_INTEGER fr; |
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
32 |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
33 if (now->QuadPart > due->QuadPart) |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
34 return 0; |
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
35 QueryPerformanceFrequency(&fr); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
36 return (long)(((double)(due->QuadPart - now->QuadPart) |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
37 / (double)fr.QuadPart) * 1000); |
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
38 # else |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
39 if (now->tv_sec > due->tv_sec) |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
40 return 0; |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
41 return (due->tv_sec - now->tv_sec) * 1000 |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
42 + (due->tv_usec - now->tv_usec) / 1000; |
12495
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
43 # endif |
65f8c6fcfd83
patch 8.0.1127: Test_peek_and_get_char fails on 32 bit system
Christian Brabandt <cb@256bit.org>
parents:
12477
diff
changeset
|
44 } |
10066
dc1610dc910f
commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
45 |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
46 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
47 * Insert a timer in the list of timers. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
48 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
49 static void |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
50 insert_timer(timer_T *timer) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
51 { |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
52 timer->tr_next = first_timer; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
53 timer->tr_prev = NULL; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
54 if (first_timer != NULL) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
55 first_timer->tr_prev = timer; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
56 first_timer = timer; |
9179
5e18efdad322
commit https://github.com/vim/vim/commit/4231da403e3c879dd6ac261e51f4ca60813935e3
Christian Brabandt <cb@256bit.org>
parents:
9155
diff
changeset
|
57 did_add_timer = TRUE; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
58 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
59 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
60 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
61 * Take a timer out of the list of timers. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
62 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
63 static void |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
64 remove_timer(timer_T *timer) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
65 { |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
66 if (timer->tr_prev == NULL) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
67 first_timer = timer->tr_next; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
68 else |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
69 timer->tr_prev->tr_next = timer->tr_next; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
70 if (timer->tr_next != NULL) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
71 timer->tr_next->tr_prev = timer->tr_prev; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
72 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
73 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
74 static void |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
75 free_timer(timer_T *timer) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
76 { |
16872
a836d122231a
patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
77 free_callback(&timer->tr_callback); |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
78 vim_free(timer); |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
79 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
80 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
81 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
82 * Create a timer and return it. NULL if out of memory. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
83 * Caller should set the callback. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
84 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
85 timer_T * |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
86 create_timer(long msec, int repeat) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
87 { |
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
|
88 timer_T *timer = ALLOC_CLEAR_ONE(timer_T); |
10182
40f6ce4fe30e
commit https://github.com/vim/vim/commit/ee39ef0b93d31763d05e54ba99801e3f1a254c0d
Christian Brabandt <cb@256bit.org>
parents:
10122
diff
changeset
|
89 long prev_id = last_timer_id; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
90 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
91 if (timer == NULL) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
92 return NULL; |
10182
40f6ce4fe30e
commit https://github.com/vim/vim/commit/ee39ef0b93d31763d05e54ba99801e3f1a254c0d
Christian Brabandt <cb@256bit.org>
parents:
10122
diff
changeset
|
93 if (++last_timer_id <= prev_id) |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
94 /* Overflow! Might cause duplicates... */ |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
95 last_timer_id = 0; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
96 timer->tr_id = last_timer_id; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
97 insert_timer(timer); |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
98 if (repeat != 0) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
99 timer->tr_repeat = repeat - 1; |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
100 timer->tr_interval = msec; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
101 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
102 profile_setlimit(msec, &timer->tr_due); |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
103 return timer; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
104 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
105 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
106 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
107 * Invoke the callback of "timer". |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
108 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
109 static void |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
110 timer_callback(timer_T *timer) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
111 { |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
112 typval_T rettv; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
113 typval_T argv[2]; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
114 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
115 argv[0].v_type = VAR_NUMBER; |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
116 argv[0].vval.v_number = (varnumber_T)timer->tr_id; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
117 argv[1].v_type = VAR_UNKNOWN; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
118 |
17606
ff097edaae89
patch 8.1.1800: function call functions have too many arguments
Bram Moolenaar <Bram@vim.org>
parents:
17596
diff
changeset
|
119 call_callback(&timer->tr_callback, -1, &rettv, 1, argv); |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
120 clear_tv(&rettv); |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
121 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
122 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
123 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
124 * Call timers that are due. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
125 * Return the time in msec until the next timer is due. |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
11595
diff
changeset
|
126 * Returns -1 if there are no pending timers. |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
127 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
128 long |
9282
9f97a6290c63
commit https://github.com/vim/vim/commit/cf089463492fab53b2a5d81517829d22f882f82e
Christian Brabandt <cb@256bit.org>
parents:
9179
diff
changeset
|
129 check_due_timer(void) |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
130 { |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
131 timer_T *timer; |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
132 timer_T *timer_next; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
133 long this_due; |
8587
fb8d7086e99d
commit https://github.com/vim/vim/commit/597385ab43093ba27adcb86cdc1b46aba86a0093
Christian Brabandt <cb@256bit.org>
parents:
8577
diff
changeset
|
134 long next_due = -1; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
135 proftime_T now; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
136 int did_one = FALSE; |
12244
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
137 int need_update_screen = FALSE; |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
138 long current_id = last_timer_id; |
11639
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
139 |
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
140 /* Don't run any timers while exiting or dealing with an error. */ |
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
141 if (exiting || aborting()) |
11631
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
11595
diff
changeset
|
142 return next_due; |
3b53bb2a0e39
patch 8.0.0698: crash on exit when using Python function in timer.
Christian Brabandt <cb@256bit.org>
parents:
11595
diff
changeset
|
143 |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
144 profile_start(&now); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
145 for (timer = first_timer; timer != NULL && !got_int; timer = timer_next) |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
146 { |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
147 timer_next = timer->tr_next; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
148 |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
149 if (timer->tr_id == -1 || timer->tr_firing || timer->tr_paused) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
150 continue; |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
151 this_due = proftime_time_left(&timer->tr_due, &now); |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
152 if (this_due <= 1) |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
153 { |
13892
eadecbe4e390
patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents:
13878
diff
changeset
|
154 /* Save and restore a lot of flags, because the timer fires while |
eadecbe4e390
patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents:
13878
diff
changeset
|
155 * waiting for a character, which might be halfway a command. */ |
11575
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
156 int save_timer_busy = timer_busy; |
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
157 int save_vgetc_busy = vgetc_busy; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
158 int save_did_emsg = did_emsg; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
159 int save_called_emsg = called_emsg; |
17184
a5c3d374e1d3
patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents:
17178
diff
changeset
|
160 int save_must_redraw = must_redraw; |
a5c3d374e1d3
patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents:
17178
diff
changeset
|
161 int save_trylevel = trylevel; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
162 int save_did_throw = did_throw; |
12459
937356f8f8d6
patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents:
12375
diff
changeset
|
163 int save_ex_pressedreturn = get_pressedreturn(); |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
164 int save_may_garbage_collect = may_garbage_collect; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
165 except_T *save_current_exception = current_exception; |
13892
eadecbe4e390
patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents:
13878
diff
changeset
|
166 vimvars_save_T vvsave; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
167 |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
168 /* Create a scope for running the timer callback, ignoring most of |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
169 * the current scope, such as being inside a try/catch. */ |
11575
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
170 timer_busy = timer_busy > 0 || vgetc_busy > 0; |
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
171 vgetc_busy = 0; |
11639
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
172 called_emsg = FALSE; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
173 did_emsg = FALSE; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
174 did_uncaught_emsg = FALSE; |
12244
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
175 must_redraw = 0; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
176 trylevel = 0; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
177 did_throw = FALSE; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
178 current_exception = NULL; |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
179 may_garbage_collect = FALSE; |
13892
eadecbe4e390
patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents:
13878
diff
changeset
|
180 save_vimvars(&vvsave); |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
181 |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
182 timer->tr_firing = TRUE; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
183 timer_callback(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
184 timer->tr_firing = FALSE; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
185 |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
186 timer_next = timer->tr_next; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
187 did_one = TRUE; |
11575
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
188 timer_busy = save_timer_busy; |
0ec755ff1fe2
patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents:
11457
diff
changeset
|
189 vgetc_busy = save_vgetc_busy; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
190 if (did_uncaught_emsg) |
11639
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
191 ++timer->tr_emsg_count; |
12375
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
192 did_emsg = save_did_emsg; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
193 called_emsg = save_called_emsg; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
194 trylevel = save_trylevel; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
195 did_throw = save_did_throw; |
ab0d827151a1
patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
196 current_exception = save_current_exception; |
13892
eadecbe4e390
patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents:
13878
diff
changeset
|
197 restore_vimvars(&vvsave); |
12244
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
198 if (must_redraw != 0) |
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
199 need_update_screen = TRUE; |
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
200 must_redraw = must_redraw > save_must_redraw |
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
201 ? must_redraw : save_must_redraw; |
12459
937356f8f8d6
patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents:
12375
diff
changeset
|
202 set_pressedreturn(save_ex_pressedreturn); |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
203 may_garbage_collect = save_may_garbage_collect; |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
204 |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
205 /* Only fire the timer again if it repeats and stop_timer() wasn't |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
206 * called while inside the callback (tr_id == -1). */ |
11639
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
207 if (timer->tr_repeat != 0 && timer->tr_id != -1 |
71d7b5ed08a0
patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents:
11631
diff
changeset
|
208 && timer->tr_emsg_count < 3) |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
209 { |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
210 profile_setlimit(timer->tr_interval, &timer->tr_due); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
211 this_due = proftime_time_left(&timer->tr_due, &now); |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
212 if (this_due < 1) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
213 this_due = 1; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
214 if (timer->tr_repeat > 0) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
215 --timer->tr_repeat; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
216 } |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
217 else |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
218 { |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
219 this_due = -1; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
220 remove_timer(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
221 free_timer(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
222 } |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
223 } |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
224 if (this_due > 0 && (next_due == -1 || next_due > this_due)) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
225 next_due = this_due; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
226 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
227 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
228 if (did_one) |
12244
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12206
diff
changeset
|
229 redraw_after_callback(need_update_screen); |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
230 |
12871
1a450ce6980c
patch 8.0.1312: balloon_show() only works in terminal when compiled with GUI
Christian Brabandt <cb@256bit.org>
parents:
12865
diff
changeset
|
231 #ifdef FEAT_BEVAL_TERM |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
232 if (bevalexpr_due_set) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
233 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
234 this_due = proftime_time_left(&bevalexpr_due, &now); |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
235 if (this_due <= 1) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
236 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
237 bevalexpr_due_set = FALSE; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
238 if (balloonEval == NULL) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
239 { |
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
|
240 balloonEval = ALLOC_CLEAR_ONE(BalloonEval); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
241 balloonEvalForTerm = TRUE; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
242 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
243 if (balloonEval != NULL) |
16594
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
244 { |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
245 general_beval_cb(balloonEval, 0); |
16594
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
246 setcursor(); |
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
247 out_flush(); |
6f52e82d9d4e
patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents:
16515
diff
changeset
|
248 } |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
249 } |
13762
9de2b25932eb
patch 8.0.1753: various warnings from a static analyser
Christian Brabandt <cb@256bit.org>
parents:
13736
diff
changeset
|
250 else if (next_due == -1 || next_due > this_due) |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
251 next_due = this_due; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
252 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
253 #endif |
13878
a590029f16a0
patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
254 #ifdef FEAT_TERMINAL |
a590029f16a0
patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
255 /* Some terminal windows may need their buffer updated. */ |
a590029f16a0
patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
256 next_due = term_check_timers(next_due, &now); |
a590029f16a0
patch 8.0.1810: buffer of a terminal only updated in Terminal-Normal mode
Christian Brabandt <cb@256bit.org>
parents:
13802
diff
changeset
|
257 #endif |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
258 |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
259 return current_id != last_timer_id ? 1 : next_due; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
260 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
261 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
262 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
263 * Find a timer by ID. Returns NULL if not found; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
264 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
265 timer_T * |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
266 find_timer(long id) |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
267 { |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
268 timer_T *timer; |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
269 |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
270 if (id >= 0) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
271 { |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
272 for (timer = first_timer; timer != NULL; timer = timer->tr_next) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
273 if (timer->tr_id == id) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
274 return timer; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
275 } |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
276 return NULL; |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
277 } |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
278 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
279 |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
280 /* |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
281 * Stop a timer and delete it. |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
282 */ |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
283 void |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
284 stop_timer(timer_T *timer) |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
285 { |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
286 if (timer->tr_firing) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
287 /* Free the timer after the callback returns. */ |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
288 timer->tr_id = -1; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
289 else |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
290 { |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
291 remove_timer(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
292 free_timer(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
293 } |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
294 } |
9153
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
295 |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
296 void |
9810
6a28d0c6f929
commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents:
9792
diff
changeset
|
297 stop_all_timers(void) |
6a28d0c6f929
commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents:
9792
diff
changeset
|
298 { |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
299 timer_T *timer; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
300 timer_T *timer_next; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
301 |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
302 for (timer = first_timer; timer != NULL; timer = timer_next) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
303 { |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
304 timer_next = timer->tr_next; |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
305 stop_timer(timer); |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
306 } |
9810
6a28d0c6f929
commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents:
9792
diff
changeset
|
307 } |
6a28d0c6f929
commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents:
9792
diff
changeset
|
308 |
6a28d0c6f929
commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents:
9792
diff
changeset
|
309 void |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
310 add_timer_info(typval_T *rettv, timer_T *timer) |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
311 { |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
312 list_T *list = rettv->vval.v_list; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
313 dict_T *dict = dict_alloc(); |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
314 dictitem_T *di; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
315 long remaining; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
316 proftime_T now; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
317 |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
318 if (dict == NULL) |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
319 return; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
320 list_append_dict(list, dict); |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
321 |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
322 dict_add_number(dict, "id", timer->tr_id); |
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
323 dict_add_number(dict, "time", (long)timer->tr_interval); |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
324 |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
325 profile_start(&now); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12678
diff
changeset
|
326 remaining = proftime_time_left(&timer->tr_due, &now); |
14301
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
327 dict_add_number(dict, "remaining", (long)remaining); |
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
328 |
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
329 dict_add_number(dict, "repeat", |
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
330 (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1)); |
3c80092eb211
patch 8.1.0166: using dict_add_nr_str() is clumsy
Christian Brabandt <cb@256bit.org>
parents:
14208
diff
changeset
|
331 dict_add_number(dict, "paused", (long)(timer->tr_paused)); |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
332 |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
333 di = dictitem_alloc((char_u *)"callback"); |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
334 if (di != NULL) |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
335 { |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
336 if (dict_add(dict, di) == FAIL) |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
337 vim_free(di); |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
338 else |
16872
a836d122231a
patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
339 put_callback(&timer->tr_callback, &di->di_tv); |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
340 } |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
341 } |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
342 |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
343 void |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
344 add_timer_info_all(typval_T *rettv) |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
345 { |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
346 timer_T *timer; |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
347 |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
348 for (timer = first_timer; timer != NULL; timer = timer->tr_next) |
10122
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
349 if (timer->tr_id != -1) |
3db463d4df25
commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents:
10078
diff
changeset
|
350 add_timer_info(rettv, timer); |
9790
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
351 } |
34cc6a101340
commit https://github.com/vim/vim/commit/8e97bd74b5377753597e3d98e7123d8985c7fffd
Christian Brabandt <cb@256bit.org>
parents:
9778
diff
changeset
|
352 |
9153
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
353 /* |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
354 * Mark references in partials of timers. |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
355 */ |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
356 int |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
357 set_ref_in_timer(int copyID) |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
358 { |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
359 int abort = FALSE; |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
360 timer_T *timer; |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
361 typval_T tv; |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
362 |
17151
ebe9aab81898
patch 8.1.1575: callbacks may be garbage collected
Bram Moolenaar <Bram@vim.org>
parents:
17111
diff
changeset
|
363 for (timer = first_timer; !abort && timer != NULL; timer = timer->tr_next) |
9153
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
364 { |
16872
a836d122231a
patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
365 if (timer->tr_callback.cb_partial != NULL) |
9686
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
366 { |
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
367 tv.v_type = VAR_PARTIAL; |
16872
a836d122231a
patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
368 tv.vval.v_partial = timer->tr_callback.cb_partial; |
9686
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
369 } |
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
370 else |
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
371 { |
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
372 tv.v_type = VAR_FUNC; |
16872
a836d122231a
patch 8.1.1437: code to handle callbacks is duplicated
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
373 tv.vval.v_string = timer->tr_callback.cb_name; |
9686
8c2553beff0f
commit https://github.com/vim/vim/commit/1e96d9bf98f9ab84d5af7f98d6a961d91b17364f
Christian Brabandt <cb@256bit.org>
parents:
9649
diff
changeset
|
374 } |
9153
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
375 abort = abort || set_ref_in_item(&tv, copyID, NULL, NULL); |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
376 } |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
377 return abort; |
c2fe86f2bda1
commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents:
9112
diff
changeset
|
378 } |
9709
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
379 |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
380 # if defined(EXITFREE) || defined(PROTO) |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
381 void |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
382 timer_free_all() |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
383 { |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
384 timer_T *timer; |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
385 |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
386 while (first_timer != NULL) |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
387 { |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
388 timer = first_timer; |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
389 remove_timer(timer); |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
390 free_timer(timer); |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
391 } |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
392 } |
cce76af1cc6a
commit https://github.com/vim/vim/commit/623e263ffb998acacd6fd0de18c44e03af2a47d1
Christian Brabandt <cb@256bit.org>
parents:
9686
diff
changeset
|
393 # endif |
8577
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
394 # endif |
63dc856bd13d
commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
8526
diff
changeset
|
395 |
7 | 396 #endif |
397 | |
398 /* | |
399 * If 'autowrite' option set, try to write the file. | |
400 * Careful: autocommands may make "buf" invalid! | |
401 * | |
402 * return FAIL for failure, OK otherwise | |
403 */ | |
404 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
405 autowrite(buf_T *buf, int forceit) |
7 | 406 { |
1069 | 407 int r; |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
408 bufref_T bufref; |
1069 | 409 |
7 | 410 if (!(p_aw || p_awa) || !p_write |
411 #ifdef FEAT_QUICKFIX | |
1069 | 412 /* never autowrite a "nofile" or "nowrite" buffer */ |
413 || bt_dontwrite(buf) | |
7 | 414 #endif |
1069 | 415 || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL) |
7 | 416 return FAIL; |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
417 set_bufref(&bufref, buf); |
1069 | 418 r = buf_write_all(buf, forceit); |
419 | |
420 /* Writing may succeed but the buffer still changed, e.g., when there is a | |
421 * 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
|
422 if (bufref_valid(&bufref) && bufIsChanged(buf)) |
1069 | 423 r = FAIL; |
424 return r; | |
7 | 425 } |
426 | |
427 /* | |
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
|
428 * Flush all buffers, except the ones that are readonly or are never written. |
7 | 429 */ |
430 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
431 autowrite_all(void) |
7 | 432 { |
433 buf_T *buf; | |
434 | |
435 if (!(p_aw || p_awa) || !p_write) | |
436 return; | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
437 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
|
438 if (bufIsChanged(buf) && !buf->b_p_ro && !bt_dontwrite(buf)) |
7 | 439 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
440 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
441 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
442 set_bufref(&bufref, buf); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
443 |
7 | 444 (void)buf_write_all(buf, FALSE); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
445 |
7 | 446 /* 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
|
447 if (!bufref_valid(&bufref)) |
7 | 448 buf = firstbuf; |
449 } | |
450 } | |
451 | |
452 /* | |
5464 | 453 * Return TRUE if buffer was changed and cannot be abandoned. |
454 * For flags use the CCGD_ values. | |
7 | 455 */ |
456 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
457 check_changed(buf_T *buf, int flags) |
7 | 458 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
459 int forceit = (flags & CCGD_FORCEIT); |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
460 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
461 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
462 set_bufref(&bufref, buf); |
5464 | 463 |
7 | 464 if ( !forceit |
465 && bufIsChanged(buf) | |
5464 | 466 && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1) |
467 && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL)) | |
7 | 468 { |
469 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) | |
470 if ((p_confirm || cmdmod.confirm) && p_write) | |
471 { | |
472 buf_T *buf2; | |
473 int count = 0; | |
474 | |
5464 | 475 if (flags & CCGD_ALLBUF) |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
476 FOR_ALL_BUFFERS(buf2) |
7 | 477 if (bufIsChanged(buf2) |
478 && (buf2->b_ffname != NULL | |
479 # ifdef FEAT_BROWSE | |
480 || cmdmod.browse | |
481 # endif | |
482 )) | |
483 ++count; | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
484 if (!bufref_valid(&bufref)) |
7 | 485 /* Autocommand deleted buffer, oops! It's not changed now. */ |
486 return FALSE; | |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
487 |
7 | 488 dialog_changed(buf, count > 1); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
489 |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
490 if (!bufref_valid(&bufref)) |
7 | 491 /* Autocommand deleted buffer, oops! It's not changed now. */ |
492 return FALSE; | |
493 return bufIsChanged(buf); | |
494 } | |
495 #endif | |
5464 | 496 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
|
497 no_write_message(); |
5464 | 498 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
|
499 no_write_message_nobang(curbuf); |
7 | 500 return TRUE; |
501 } | |
502 return FALSE; | |
503 } | |
504 | |
505 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO) | |
506 | |
507 #if defined(FEAT_BROWSE) || defined(PROTO) | |
508 /* | |
509 * When wanting to write a file without a file name, ask the user for a name. | |
510 */ | |
511 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
512 browse_save_fname(buf_T *buf) |
7 | 513 { |
514 if (buf->b_fname == NULL) | |
515 { | |
516 char_u *fname; | |
517 | |
29 | 518 fname = do_browse(BROWSE_SAVE, (char_u *)_("Save As"), |
519 NULL, NULL, NULL, NULL, buf); | |
7 | 520 if (fname != NULL) |
521 { | |
522 if (setfname(buf, fname, NULL, TRUE) == OK) | |
523 buf->b_flags |= BF_NOTEDITED; | |
524 vim_free(fname); | |
525 } | |
526 } | |
527 } | |
528 #endif | |
529 | |
530 /* | |
2849 | 531 * Ask the user what to do when abandoning a changed buffer. |
7 | 532 * Must check 'write' option first! |
533 */ | |
534 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
535 dialog_changed( |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
536 buf_T *buf, |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
537 int checkall) /* may abandon all changed buffers */ |
7 | 538 { |
2770 | 539 char_u buff[DIALOG_MSG_SIZE]; |
7 | 540 int ret; |
541 buf_T *buf2; | |
3486 | 542 exarg_T ea; |
7 | 543 |
12206
bd8d767fb36f
patch 8.0.0983: unnecessary check for NULL pointer
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
544 dialog_msg(buff, _("Save changes to \"%s\"?"), buf->b_fname); |
7 | 545 if (checkall) |
546 ret = vim_dialog_yesnoallcancel(VIM_QUESTION, NULL, buff, 1); | |
547 else | |
548 ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1); | |
549 | |
16619
8f0ea605ec96
patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
16594
diff
changeset
|
550 // 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
|
551 // function. |
8f0ea605ec96
patch 8.1.1312: Coverity warning for using uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
16594
diff
changeset
|
552 vim_memset(&ea, 0, sizeof(ea)); |
3486 | 553 |
7 | 554 if (ret == VIM_YES) |
555 { | |
556 #ifdef FEAT_BROWSE | |
557 /* May get file name, when there is none */ | |
558 browse_save_fname(buf); | |
559 #endif | |
3486 | 560 if (buf->b_fname != NULL && check_overwrite(&ea, buf, |
561 buf->b_fname, buf->b_ffname, FALSE) == OK) | |
562 /* didn't hit Cancel */ | |
7 | 563 (void)buf_write_all(buf, FALSE); |
564 } | |
565 else if (ret == VIM_NO) | |
566 { | |
16996
d5e1e09a829f
patch 8.1.1498: ":write" increments b:changedtick even though nothing changed
Bram Moolenaar <Bram@vim.org>
parents:
16874
diff
changeset
|
567 unchanged(buf, TRUE, FALSE); |
7 | 568 } |
569 else if (ret == VIM_ALL) | |
570 { | |
571 /* | |
572 * Write all modified files that can be written. | |
573 * Skip readonly buffers, these need to be confirmed | |
574 * individually. | |
575 */ | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
576 FOR_ALL_BUFFERS(buf2) |
7 | 577 { |
578 if (bufIsChanged(buf2) | |
579 && (buf2->b_ffname != NULL | |
580 #ifdef FEAT_BROWSE | |
581 || cmdmod.browse | |
582 #endif | |
583 ) | |
584 && !buf2->b_p_ro) | |
585 { | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
586 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
587 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
588 set_bufref(&bufref, buf2); |
7 | 589 #ifdef FEAT_BROWSE |
590 /* May get file name, when there is none */ | |
591 browse_save_fname(buf2); | |
592 #endif | |
3486 | 593 if (buf2->b_fname != NULL && check_overwrite(&ea, buf2, |
594 buf2->b_fname, buf2->b_ffname, FALSE) == OK) | |
595 /* didn't hit Cancel */ | |
7 | 596 (void)buf_write_all(buf2, FALSE); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
597 |
7 | 598 /* 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
|
599 if (!bufref_valid(&bufref)) |
7 | 600 buf2 = firstbuf; |
601 } | |
602 } | |
603 } | |
604 else if (ret == VIM_DISCARDALL) | |
605 { | |
606 /* | |
607 * mark all buffers as unchanged | |
608 */ | |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
609 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
|
610 unchanged(buf2, TRUE, FALSE); |
7 | 611 } |
612 } | |
613 #endif | |
614 | |
615 /* | |
616 * Return TRUE if the buffer "buf" can be abandoned, either by making it | |
617 * hidden, autowriting it or unloading it. | |
618 */ | |
619 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
620 can_abandon(buf_T *buf, int forceit) |
7 | 621 { |
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
|
622 return ( buf_hide(buf) |
7 | 623 || !bufIsChanged(buf) |
624 || buf->b_nwindows > 1 | |
625 || autowrite(buf, forceit) == OK | |
626 || forceit); | |
627 } | |
628 | |
3429 | 629 /* |
630 * Add a buffer number to "bufnrs", unless it's already there. | |
631 */ | |
632 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
633 add_bufnum(int *bufnrs, int *bufnump, int nr) |
3429 | 634 { |
635 int i; | |
636 | |
637 for (i = 0; i < *bufnump; ++i) | |
638 if (bufnrs[i] == nr) | |
639 return; | |
640 bufnrs[*bufnump] = nr; | |
641 *bufnump = *bufnump + 1; | |
642 } | |
643 | |
7 | 644 /* |
645 * Return TRUE if any buffer was changed and cannot be abandoned. | |
646 * 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
|
647 * 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
|
648 * hidden. This is used for ":q!". |
7 | 649 */ |
650 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
651 check_changed_any( |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
652 int hidden, /* Only check hidden buffers */ |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
653 int unload) |
7 | 654 { |
3429 | 655 int ret = FALSE; |
7 | 656 buf_T *buf; |
657 int save; | |
3429 | 658 int i; |
659 int bufnum = 0; | |
660 int bufcount = 0; | |
661 int *bufnrs; | |
662 tabpage_T *tp; | |
7 | 663 win_T *wp; |
664 | |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
665 /* 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
|
666 FOR_ALL_BUFFERS(buf) |
3429 | 667 ++bufcount; |
668 | |
669 if (bufcount == 0) | |
670 return FALSE; | |
671 | |
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
|
672 bufnrs = ALLOC_MULT(int, bufcount); |
3429 | 673 if (bufnrs == NULL) |
674 return FALSE; | |
675 | |
676 /* curbuf */ | |
677 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
|
678 |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
679 /* buffers in current tab */ |
3429 | 680 FOR_ALL_WINDOWS(wp) |
681 if (wp->w_buffer != curbuf) | |
682 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); | |
683 | |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
684 /* buffers in other tabs */ |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
685 FOR_ALL_TABPAGES(tp) |
3429 | 686 if (tp != curtab) |
687 for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) | |
688 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
|
689 |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
690 /* any other buffer */ |
9649
fd9727ae3c49
commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents:
9626
diff
changeset
|
691 FOR_ALL_BUFFERS(buf) |
3429 | 692 add_bufnum(bufnrs, &bufnum, buf->b_fnum); |
693 | |
694 for (i = 0; i < bufnum; ++i) | |
7 | 695 { |
3429 | 696 buf = buflist_findnr(bufnrs[i]); |
697 if (buf == NULL) | |
698 continue; | |
699 if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf)) | |
7 | 700 { |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
701 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
702 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
703 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
|
704 #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
|
705 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
|
706 { |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
707 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
|
708 break; |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
709 } |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
710 else |
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
711 #endif |
3429 | 712 /* Try auto-writing the buffer. If this fails but the buffer no |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
713 * longer exists it's not changed, that's OK. */ |
5464 | 714 if (check_changed(buf, (p_awa ? CCGD_AW : 0) |
715 | CCGD_MULTWIN | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
716 | CCGD_ALLBUF) && bufref_valid(&bufref)) |
3429 | 717 break; /* didn't save - still changes */ |
7 | 718 } |
719 } | |
720 | |
3429 | 721 if (i >= bufnum) |
722 goto theend; | |
723 | |
13438
33eea5ce5415
patch 8.0.1593: :qall never exits with an active terminal window
Christian Brabandt <cb@256bit.org>
parents:
13384
diff
changeset
|
724 /* Get here if "buf" cannot be abandoned. */ |
3429 | 725 ret = TRUE; |
7 | 726 exiting = FALSE; |
727 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) | |
728 /* | |
729 * When ":confirm" used, don't give an error message. | |
730 */ | |
731 if (!(p_confirm || cmdmod.confirm)) | |
732 #endif | |
733 { | |
734 /* There must be a wait_return for this message, do_buffer() | |
735 * may cause a redraw. But wait_return() is a no-op when vgetc() | |
736 * is busy (Quit used from window menu), then make sure we don't | |
737 * cause a scroll up. */ | |
823 | 738 if (vgetc_busy > 0) |
7 | 739 { |
740 msg_row = cmdline_row; | |
741 msg_col = 0; | |
742 msg_didout = FALSE; | |
743 } | |
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
|
744 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
|
745 #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
|
746 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
|
747 ? 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
|
748 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
|
749 : |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11935
diff
changeset
|
750 #endif |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
751 semsg(_("E162: No write since last change for buffer \"%s\""), |
3839 | 752 buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) |
7 | 753 { |
754 save = no_wait_return; | |
755 no_wait_return = FALSE; | |
756 wait_return(FALSE); | |
757 no_wait_return = save; | |
758 } | |
759 } | |
760 | |
761 /* Try to find a window that contains the buffer. */ | |
762 if (buf != curbuf) | |
3429 | 763 FOR_ALL_TAB_WINDOWS(tp, wp) |
7 | 764 if (wp->w_buffer == buf) |
765 { | |
9487
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
766 bufref_T bufref; |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
767 |
69ed2c9d34a6
commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents:
9410
diff
changeset
|
768 set_bufref(&bufref, buf); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
769 |
3429 | 770 goto_tabpage_win(tp, wp); |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
771 |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
772 // 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
|
773 if (!bufref_valid(&bufref)) |
3429 | 774 goto theend; |
775 goto buf_found; | |
7 | 776 } |
3429 | 777 buf_found: |
7 | 778 |
779 /* Open the changed buffer in the current window. */ | |
780 if (buf != curbuf) | |
7469
15eefe1b0dad
commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents:
7107
diff
changeset
|
781 set_curbuf(buf, unload ? DOBUF_UNLOAD : DOBUF_GOTO); |
7 | 782 |
3429 | 783 theend: |
784 vim_free(bufnrs); | |
785 return ret; | |
7 | 786 } |
787 | |
788 /* | |
789 * return FAIL if there is no file name, OK if there is one | |
790 * give error message for FAIL | |
791 */ | |
792 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
793 check_fname(void) |
7 | 794 { |
795 if (curbuf->b_ffname == NULL) | |
796 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
797 emsg(_(e_noname)); |
7 | 798 return FAIL; |
799 } | |
800 return OK; | |
801 } | |
802 | |
803 /* | |
804 * flush the contents of a buffer, unless it has no file name | |
805 * | |
806 * return FAIL for failure, OK otherwise | |
807 */ | |
808 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
809 buf_write_all(buf_T *buf, int forceit) |
7 | 810 { |
811 int retval; | |
812 buf_T *old_curbuf = curbuf; | |
813 | |
814 retval = (buf_write(buf, buf->b_ffname, buf->b_fname, | |
815 (linenr_T)1, buf->b_ml.ml_line_count, NULL, | |
816 FALSE, forceit, TRUE, FALSE)); | |
817 if (curbuf != old_curbuf) | |
16 | 818 { |
11158
501f46f7644c
patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents:
11129
diff
changeset
|
819 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
|
820 msg(_("Warning: Entered other buffer unexpectedly (check autocommands)")); |
16 | 821 } |
7 | 822 return retval; |
823 } | |
824 | |
825 /* | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
826 * ":argdo", ":windo", ":bufdo", ":tabdo", ":cdo", ":ldo", ":cfdo" and ":lfdo" |
7 | 827 */ |
828 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
829 ex_listdo(exarg_T *eap) |
7 | 830 { |
831 int i; | |
685 | 832 win_T *wp; |
833 tabpage_T *tp; | |
6641 | 834 buf_T *buf = curbuf; |
7 | 835 int next_fnum = 0; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
836 #if defined(FEAT_SYN_HL) |
7 | 837 char_u *save_ei = NULL; |
838 #endif | |
39 | 839 char_u *p_shm_save; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
840 #ifdef FEAT_QUICKFIX |
7107
84efaf06f195
commit https://github.com/vim/vim/commit/ed84b76021df763619cabaedddc44eb5ee849136
Christian Brabandt <cb@256bit.org>
parents:
7092
diff
changeset
|
841 int qf_size = 0; |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
842 int qf_idx; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
843 #endif |
7 | 844 |
8220
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
845 #ifndef FEAT_QUICKFIX |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
846 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
|
847 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
|
848 { |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
849 ex_ni(eap); |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
850 return; |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
851 } |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
852 #endif |
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
8212
diff
changeset
|
853 |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
854 #if defined(FEAT_SYN_HL) |
819 | 855 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
|
856 { |
123 | 857 /* Don't do syntax HL autocommands. Skipping the syntax file is a |
858 * great speed improvement. */ | |
859 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
|
860 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
861 for (buf = firstbuf; buf != NULL; buf = 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
|
862 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
|
863 buf = curbuf; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
864 } |
7 | 865 #endif |
6116 | 866 #ifdef FEAT_CLIPBOARD |
867 start_global_changes(); | |
868 #endif | |
7 | 869 |
870 if (eap->cmdidx == CMD_windo | |
685 | 871 || 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
|
872 || buf_hide(curbuf) |
5464 | 873 || !check_changed(curbuf, CCGD_AW |
874 | (eap->forceit ? CCGD_FORCEIT : 0) | |
875 | CCGD_EXCMD)) | |
7 | 876 { |
877 i = 0; | |
6474 | 878 /* start at the eap->line1 argument/window/buffer */ |
685 | 879 wp = firstwin; |
880 tp = first_tabpage; | |
6474 | 881 switch (eap->cmdidx) |
882 { | |
883 case CMD_windo: | |
884 for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next) | |
885 i++; | |
886 break; | |
887 case CMD_tabdo: | |
888 for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next) | |
889 i++; | |
890 break; | |
891 case CMD_argdo: | |
892 i = eap->line1 - 1; | |
893 break; | |
894 default: | |
895 break; | |
896 } | |
7 | 897 /* set pcmark now */ |
898 if (eap->cmdidx == CMD_bufdo) | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
899 { |
6641 | 900 /* 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
|
901 for (buf = firstbuf; buf != NULL && (buf->b_fnum < eap->line1 |
6641 | 902 || !buf->b_p_bl); buf = buf->b_next) |
903 if (buf->b_fnum > eap->line2) | |
904 { | |
905 buf = NULL; | |
906 break; | |
907 } | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
908 if (buf != NULL) |
6641 | 909 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
|
910 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
911 #ifdef FEAT_QUICKFIX |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
912 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
|
913 || 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
|
914 { |
16515
6e87a69b8e0c
patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents:
16381
diff
changeset
|
915 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
|
916 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
|
917 buf = NULL; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
918 else |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
919 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
920 ex_cc(eap); |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
921 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
922 buf = curbuf; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
923 i = eap->line1 - 1; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
924 if (eap->addr_count <= 0) |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
925 /* default is all the quickfix/location list entries */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
926 eap->line2 = qf_size; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
927 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
928 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
929 #endif |
7 | 930 else |
931 setpcmark(); | |
932 listcmd_busy = TRUE; /* avoids setting pcmark below */ | |
933 | |
6641 | 934 while (!got_int && buf != NULL) |
7 | 935 { |
936 if (eap->cmdidx == CMD_argdo) | |
937 { | |
938 /* go to argument "i" */ | |
939 if (i == ARGCOUNT) | |
940 break; | |
941 /* Don't call do_argfile() when already there, it will try | |
942 * reloading the file. */ | |
22 | 943 if (curwin->w_arg_idx != i || !editing_arg_idx(curwin)) |
39 | 944 { |
945 /* Clear 'shm' to avoid that the file message overwrites | |
946 * any output from the command. */ | |
947 p_shm_save = vim_strsave(p_shm); | |
948 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); | |
7 | 949 do_argfile(eap, i); |
39 | 950 set_option_value((char_u *)"shm", 0L, p_shm_save, 0); |
951 vim_free(p_shm_save); | |
952 } | |
7 | 953 if (curwin->w_arg_idx != i) |
954 break; | |
955 } | |
956 else if (eap->cmdidx == CMD_windo) | |
957 { | |
685 | 958 /* go to window "wp" */ |
959 if (!win_valid(wp)) | |
7 | 960 break; |
685 | 961 win_goto(wp); |
1115 | 962 if (curwin != wp) |
963 break; /* something must be wrong */ | |
685 | 964 wp = curwin->w_next; |
965 } | |
966 else if (eap->cmdidx == CMD_tabdo) | |
967 { | |
968 /* go to window "tp" */ | |
969 if (!valid_tabpage(tp)) | |
970 break; | |
4354 | 971 goto_tabpage_tp(tp, TRUE, TRUE); |
685 | 972 tp = tp->tp_next; |
7 | 973 } |
974 else if (eap->cmdidx == CMD_bufdo) | |
975 { | |
976 /* Remember the number of the next listed buffer, in case | |
977 * ":bwipe" is used or autocommands do something strange. */ | |
978 next_fnum = -1; | |
979 for (buf = curbuf->b_next; buf != NULL; buf = buf->b_next) | |
980 if (buf->b_p_bl) | |
981 { | |
982 next_fnum = buf->b_fnum; | |
983 break; | |
984 } | |
985 } | |
986 | |
6474 | 987 ++i; |
988 | |
7 | 989 /* execute the command */ |
990 do_cmdline(eap->arg, eap->getline, eap->cookie, | |
991 DOCMD_VERBOSE + DOCMD_NOWAIT); | |
992 | |
993 if (eap->cmdidx == CMD_bufdo) | |
994 { | |
995 /* Done? */ | |
6474 | 996 if (next_fnum < 0 || next_fnum > eap->line2) |
7 | 997 break; |
998 /* 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
|
999 FOR_ALL_BUFFERS(buf) |
7 | 1000 if (buf->b_fnum == next_fnum) |
1001 break; | |
1002 if (buf == NULL) | |
1003 break; | |
39 | 1004 |
1005 /* Go to the next buffer. Clear 'shm' to avoid that the file | |
1006 * message overwrites any output from the command. */ | |
1007 p_shm_save = vim_strsave(p_shm); | |
1008 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0); | |
7 | 1009 goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum); |
39 | 1010 set_option_value((char_u *)"shm", 0L, p_shm_save, 0); |
1011 vim_free(p_shm_save); | |
1012 | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1013 /* If autocommands took us elsewhere, quit here. */ |
7 | 1014 if (curbuf->b_fnum != next_fnum) |
1015 break; | |
1016 } | |
1017 | |
7092
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1018 #ifdef FEAT_QUICKFIX |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1019 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
|
1020 || 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
|
1021 { |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1022 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
|
1023 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1024 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1025 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
|
1026 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1027 ex_cnext(eap); |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1028 |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1029 /* If jumping to the next quickfix entry fails, quit here */ |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1030 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
|
1031 break; |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1032 } |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1033 #endif |
64e30831fa42
commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents:
7009
diff
changeset
|
1034 |
7 | 1035 if (eap->cmdidx == CMD_windo) |
1036 { | |
1037 validate_cursor(); /* cursor may have moved */ | |
13384
6740c499de13
patch 8.0.1566: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13380
diff
changeset
|
1038 |
7 | 1039 /* required when 'scrollbind' has been set */ |
1040 if (curwin->w_p_scb) | |
1041 do_check_scrollbind(TRUE); | |
1042 } | |
6474 | 1043 |
1044 if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo) | |
1045 if (i+1 > eap->line2) | |
1046 break; | |
1047 if (eap->cmdidx == CMD_argdo && i >= eap->line2) | |
1048 break; | |
7 | 1049 } |
1050 listcmd_busy = FALSE; | |
1051 } | |
1052 | |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1053 #if defined(FEAT_SYN_HL) |
154 | 1054 if (save_ei != NULL) |
1055 { | |
17596
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1056 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
|
1057 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
|
1058 |
154 | 1059 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
|
1060 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1061 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
|
1062 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1063 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
|
1064 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
|
1065 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1066 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
|
1067 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1068 // 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
|
1069 // 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
|
1070 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
|
1071 apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, |
154 | 1072 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
|
1073 else |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1074 { |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1075 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
|
1076 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
|
1077 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
|
1078 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
|
1079 } |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1080 |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1081 // 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
|
1082 bnext = firstbuf; |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1083 } |
892b4ea3bad6
patch 8.1.1795: no syntax HL after splitting windows with :bufdo
Bram Moolenaar <Bram@vim.org>
parents:
17381
diff
changeset
|
1084 } |
154 | 1085 } |
7 | 1086 #endif |
6116 | 1087 #ifdef FEAT_CLIPBOARD |
1088 end_global_changes(); | |
1089 #endif | |
7 | 1090 } |
1091 | |
1092 #ifdef FEAT_EVAL | |
1093 /* | |
1094 * ":compiler[!] {name}" | |
1095 */ | |
1096 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1097 ex_compiler(exarg_T *eap) |
7 | 1098 { |
1099 char_u *buf; | |
1100 char_u *old_cur_comp = NULL; | |
1101 char_u *p; | |
1102 | |
1103 if (*eap->arg == NUL) | |
1104 { | |
1105 /* List all compiler scripts. */ | |
1106 do_cmdline_cmd((char_u *)"echo globpath(&rtp, 'compiler/*.vim')"); | |
1107 /* ) keep the indenter happy... */ | |
1108 } | |
1109 else | |
1110 { | |
16764
ef00b6bc186b
patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents:
16738
diff
changeset
|
1111 buf = alloc(STRLEN(eap->arg) + 14); |
7 | 1112 if (buf != NULL) |
1113 { | |
1114 if (eap->forceit) | |
1115 { | |
1116 /* ":compiler! {name}" sets global options */ | |
1117 do_cmdline_cmd((char_u *) | |
1118 "command -nargs=* CompilerSet set <args>"); | |
1119 } | |
1120 else | |
1121 { | |
1122 /* ":compiler! {name}" sets local options. | |
1123 * To remain backwards compatible "current_compiler" is always | |
1124 * used. A user's compiler plugin may set it, the distributed | |
1125 * plugin will then skip the settings. Afterwards set | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1126 * "b:current_compiler" and restore "current_compiler". |
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1127 * Explicitly prepend "g:" to make it work in a function. */ |
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1128 old_cur_comp = get_var_value((char_u *)"g:current_compiler"); |
7 | 1129 if (old_cur_comp != NULL) |
1130 old_cur_comp = vim_strsave(old_cur_comp); | |
1131 do_cmdline_cmd((char_u *) | |
1132 "command -nargs=* CompilerSet setlocal <args>"); | |
1133 } | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1134 do_unlet((char_u *)"g:current_compiler", TRUE); |
148 | 1135 do_unlet((char_u *)"b:current_compiler", TRUE); |
7 | 1136 |
1137 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
|
1138 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
|
1139 semsg(_("E666: compiler not supported: %s"), eap->arg); |
7 | 1140 vim_free(buf); |
1141 | |
1142 do_cmdline_cmd((char_u *)":delcommand CompilerSet"); | |
1143 | |
1144 /* Set "b:current_compiler" from "current_compiler". */ | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1145 p = get_var_value((char_u *)"g:current_compiler"); |
7 | 1146 if (p != NULL) |
1147 set_internal_string_var((char_u *)"b:current_compiler", p); | |
1148 | |
1149 /* Restore "current_compiler" for ":compiler {name}". */ | |
1150 if (!eap->forceit) | |
1151 { | |
1152 if (old_cur_comp != NULL) | |
1153 { | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1154 set_internal_string_var((char_u *)"g:current_compiler", |
7 | 1155 old_cur_comp); |
1156 vim_free(old_cur_comp); | |
1157 } | |
1158 else | |
2051
ef2890033e88
updated for version 7.2.337
Bram Moolenaar <bram@zimbu.org>
parents:
1882
diff
changeset
|
1159 do_unlet((char_u *)"g:current_compiler", TRUE); |
7 | 1160 } |
1161 } | |
1162 } | |
1163 } | |
1164 #endif | |
1165 | |
1166 /* | |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1167 * ":runtime [what] {name}" |
7 | 1168 */ |
1169 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1170 ex_runtime(exarg_T *eap) |
7 | 1171 { |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1172 char_u *arg = eap->arg; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1173 char_u *p = skiptowhite(arg); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1174 int len = (int)(p - arg); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1175 int flags = eap->forceit ? DIP_ALL : 0; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1176 |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1177 if (STRNCMP(arg, "START", len) == 0) |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1178 { |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1179 flags += DIP_START + DIP_NORTP; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1180 arg = skipwhite(arg + len); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1181 } |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1182 else if (STRNCMP(arg, "OPT", len) == 0) |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1183 { |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1184 flags += DIP_OPT + DIP_NORTP; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1185 arg = skipwhite(arg + len); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1186 } |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1187 else if (STRNCMP(arg, "PACK", len) == 0) |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1188 { |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1189 flags += DIP_START + DIP_OPT + DIP_NORTP; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1190 arg = skipwhite(arg + len); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1191 } |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1192 else if (STRNCMP(arg, "ALL", len) == 0) |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1193 { |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1194 flags += DIP_START + DIP_OPT; |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1195 arg = skipwhite(arg + len); |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1196 } |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1197 |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1198 source_runtime(arg, flags); |
7 | 1199 } |
1200 | |
1201 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1202 source_callback(char_u *fname, void *cookie UNUSED) |
7 | 1203 { |
819 | 1204 (void)do_source(fname, FALSE, DOSO_NONE); |
7 | 1205 } |
1206 | |
1207 /* | |
8416
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1208 * Find the file "name" in all directories in "path" and invoke |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1209 * "callback(fname, cookie)". |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1210 * "name" can contain wildcards. |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1211 * When "flags" has DIP_ALL: source all files, otherwise only the first one. |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1212 * When "flags" has DIP_DIR: find directories instead of files. |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1213 * When "flags" has DIP_ERR: give an error message if there is no match. |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1214 * |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1215 * return FAIL when no file could be sourced, OK otherwise. |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1216 */ |
8522
721e8d6cb7b5
commit https://github.com/vim/vim/commit/6bef5306e4f2cacb3a93667992c2312d4b293c9d
Christian Brabandt <cb@256bit.org>
parents:
8520
diff
changeset
|
1217 int |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1218 do_in_path( |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1219 char_u *path, |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1220 char_u *name, |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1221 int flags, |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1222 void (*callback)(char_u *fname, void *ck), |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1223 void *cookie) |
7 | 1224 { |
1225 char_u *rtp; | |
1226 char_u *np; | |
1227 char_u *buf; | |
1228 char_u *rtp_copy; | |
1229 char_u *tail; | |
1230 int num_files; | |
1231 char_u **files; | |
1232 int i; | |
1233 int did_one = FALSE; | |
1234 #ifdef AMIGA | |
1235 struct Process *proc = (struct Process *)FindTask(0L); | |
1236 APTR save_winptr = proc->pr_WindowPtr; | |
1237 | |
1238 /* Avoid a requester here for a volume that doesn't exist. */ | |
1239 proc->pr_WindowPtr = (APTR)-1L; | |
1240 #endif | |
1241 | |
1242 /* Make a copy of 'runtimepath'. Invoking the callback may change the | |
1243 * value. */ | |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1244 rtp_copy = vim_strsave(path); |
7 | 1245 buf = alloc(MAXPATHL); |
1246 if (buf != NULL && rtp_copy != NULL) | |
1247 { | |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1248 if (p_verbose > 1 && name != NULL) |
294 | 1249 { |
1250 verbose_enter(); | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1251 smsg(_("Searching for \"%s\" in \"%s\""), |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1252 (char *)name, (char *)path); |
294 | 1253 verbose_leave(); |
1254 } | |
271 | 1255 |
7 | 1256 /* Loop over all entries in 'runtimepath'. */ |
1257 rtp = rtp_copy; | |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1258 while (*rtp != NUL && ((flags & DIP_ALL) || !did_one)) |
7 | 1259 { |
9778
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1260 size_t buflen; |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1261 |
7 | 1262 /* Copy the path from 'runtimepath' to buf[]. */ |
1263 copy_option_part(&rtp, buf, MAXPATHL, ","); | |
9778
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1264 buflen = STRLEN(buf); |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1265 |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1266 /* Skip after or non-after directories. */ |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1267 if (flags & (DIP_NOAFTER | DIP_AFTER)) |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1268 { |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1269 int is_after = buflen >= 5 |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1270 && STRCMP(buf + buflen - 5, "after") == 0; |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1271 |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1272 if ((is_after && (flags & DIP_NOAFTER)) |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1273 || (!is_after && (flags & DIP_AFTER))) |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1274 continue; |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1275 } |
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1276 |
4833
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1277 if (name == NULL) |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1278 { |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1279 (*callback)(buf, (void *) &cookie); |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1280 if (!did_one) |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1281 did_one = (cookie == NULL); |
70b1178dec79
updated for version 7.3.1163
Bram Moolenaar <bram@vim.org>
parents:
4825
diff
changeset
|
1282 } |
9778
4360b2b46125
commit https://github.com/vim/vim/commit/66459b7c98c67f8a9d39de8f08e8e8f1fca0e359
Christian Brabandt <cb@256bit.org>
parents:
9709
diff
changeset
|
1283 else if (buflen + STRLEN(name) + 2 < MAXPATHL) |
7 | 1284 { |
1285 add_pathsep(buf); | |
1286 tail = buf + STRLEN(buf); | |
1287 | |
1288 /* Loop over all patterns in "name" */ | |
1289 np = name; | |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1290 while (*np != NUL && ((flags & DIP_ALL) || !did_one)) |
7 | 1291 { |
1292 /* Append the pattern from "name" to buf[]. */ | |
1293 copy_option_part(&np, tail, (int)(MAXPATHL - (tail - buf)), | |
1294 "\t "); | |
1295 | |
1296 if (p_verbose > 2) | |
294 | 1297 { |
1298 verbose_enter(); | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1299 smsg(_("Searching for \"%s\""), buf); |
294 | 1300 verbose_leave(); |
1301 } | |
7 | 1302 |
1303 /* Expand wildcards, invoke the callback for each match. */ | |
1304 if (gen_expand_wildcards(1, &buf, &num_files, &files, | |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1305 (flags & DIP_DIR) ? EW_DIR : EW_FILE) == OK) |
7 | 1306 { |
1307 for (i = 0; i < num_files; ++i) | |
1308 { | |
237 | 1309 (*callback)(files[i], cookie); |
7 | 1310 did_one = TRUE; |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1311 if (!(flags & DIP_ALL)) |
7 | 1312 break; |
1313 } | |
1314 FreeWild(num_files, files); | |
1315 } | |
1316 } | |
1317 } | |
1318 } | |
1319 } | |
1320 vim_free(buf); | |
1321 vim_free(rtp_copy); | |
8416
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1322 if (!did_one && name != NULL) |
294 | 1323 { |
8416
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1324 char *basepath = path == p_rtp ? "runtimepath" : "packpath"; |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1325 |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1326 if (flags & DIP_ERR) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1327 semsg(_(e_dirnotf), basepath, name); |
8416
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1328 else if (p_verbose > 0) |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1329 { |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1330 verbose_enter(); |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1331 smsg(_("not found in '%s': \"%s\""), basepath, name); |
8416
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1332 verbose_leave(); |
1a6527cce675
commit https://github.com/vim/vim/commit/be82c254862e475a582c0717455e1db6bf96b0d0
Christian Brabandt <cb@256bit.org>
parents:
8388
diff
changeset
|
1333 } |
294 | 1334 } |
7 | 1335 |
1336 #ifdef AMIGA | |
1337 proc->pr_WindowPtr = save_winptr; | |
1338 #endif | |
1339 | |
1340 return did_one ? OK : FAIL; | |
1341 } | |
1342 | |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1343 /* |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1344 * Find "name" in "path". When found, invoke the callback function for |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1345 * it: callback(fname, "cookie") |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1346 * When "flags" has DIP_ALL repeat for all matches, otherwise only the first |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1347 * one is used. |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1348 * Returns OK when at least one match found, FAIL otherwise. |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1349 * |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1350 * If "name" is NULL calls callback for each entry in "path". Cookie is |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1351 * passed by reference in this case, setting it to NULL indicates that callback |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1352 * has done its job. |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1353 */ |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1354 static int |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1355 do_in_path_and_pp( |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1356 char_u *path, |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1357 char_u *name, |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1358 int flags, |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1359 void (*callback)(char_u *fname, void *ck), |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1360 void *cookie) |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1361 { |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1362 int done = FAIL; |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1363 char_u *s; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1364 int len; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1365 char *start_dir = "pack/*/start/*/%s"; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1366 char *opt_dir = "pack/*/opt/*/%s"; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1367 |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1368 if ((flags & DIP_NORTP) == 0) |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1369 done = do_in_path(path, name, flags, callback, cookie); |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1370 |
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1371 if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1372 { |
8595
887b378f29d1
commit https://github.com/vim/vim/commit/1c8b4edb9b6cd5248925f3f06ec82486be9fb4ea
Christian Brabandt <cb@256bit.org>
parents:
8587
diff
changeset
|
1373 len = (int)(STRLEN(start_dir) + STRLEN(name)); |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1374 s = alloc(len); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1375 if (s == NULL) |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1376 return FAIL; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1377 vim_snprintf((char *)s, len, start_dir, name); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1378 done = do_in_path(p_pp, s, flags, callback, cookie); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1379 vim_free(s); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1380 } |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1381 |
8526
981cc3bef9f3
commit https://github.com/vim/vim/commit/8dcf259d904cfb965d31841dc74a5cfaf5a351d9
Christian Brabandt <cb@256bit.org>
parents:
8524
diff
changeset
|
1382 if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1383 { |
8595
887b378f29d1
commit https://github.com/vim/vim/commit/1c8b4edb9b6cd5248925f3f06ec82486be9fb4ea
Christian Brabandt <cb@256bit.org>
parents:
8587
diff
changeset
|
1384 len = (int)(STRLEN(opt_dir) + STRLEN(name)); |
8524
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1385 s = alloc(len); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1386 if (s == NULL) |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1387 return FAIL; |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1388 vim_snprintf((char *)s, len, opt_dir, name); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1389 done = do_in_path(p_pp, s, flags, callback, cookie); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1390 vim_free(s); |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1391 } |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1392 |
2f57bbe870ea
commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents:
8522
diff
changeset
|
1393 return done; |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1394 } |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1395 |
8372
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1396 /* |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1397 * Just like do_in_path_and_pp(), using 'runtimepath' for "path". |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1398 */ |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1399 int |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1400 do_in_runtimepath( |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1401 char_u *name, |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1402 int flags, |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1403 void (*callback)(char_u *fname, void *ck), |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1404 void *cookie) |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1405 { |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1406 return do_in_path_and_pp(p_rtp, name, flags, callback, cookie); |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1407 } |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1408 |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1409 /* |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1410 * Source the file "name" from all directories in 'runtimepath'. |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1411 * "name" can contain wildcards. |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1412 * When "flags" has DIP_ALL: source all files, otherwise only the first one. |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1413 * |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1414 * return FAIL when no file could be sourced, OK otherwise. |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1415 */ |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1416 int |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1417 source_runtime(char_u *name, int flags) |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1418 { |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1419 return source_in_path(p_rtp, name, flags); |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1420 } |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1421 |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1422 /* |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1423 * Just like source_runtime(), but use "path" instead of 'runtimepath'. |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1424 */ |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1425 int |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1426 source_in_path(char_u *path, char_u *name, int flags) |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1427 { |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1428 return do_in_path_and_pp(path, name, flags, source_callback, NULL); |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1429 } |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1430 |
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1431 |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1432 #if defined(FEAT_EVAL) || defined(PROTO) |
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1433 |
11595
42cd59477698
patch 8.0.0680: plugins in start packages are sourced twice
Christian Brabandt <cb@256bit.org>
parents:
11575
diff
changeset
|
1434 /* |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1435 * Expand wildcards in "pat" and invoke do_source() for each match. |
8372
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1436 */ |
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1437 static void |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1438 source_all_matches(char_u *pat) |
8372
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1439 { |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1440 int num_files; |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1441 char_u **files; |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1442 int i; |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1443 |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1444 if (gen_expand_wildcards(1, &pat, &num_files, &files, EW_FILE) == OK) |
8372
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1445 { |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1446 for (i = 0; i < num_files; ++i) |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1447 (void)do_source(files[i], FALSE, DOSO_NONE); |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1448 FreeWild(num_files, files); |
8372
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1449 } |
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1450 } |
ce791ff9e0da
commit https://github.com/vim/vim/commit/1bdd42627d619258d0e847f217cfc1c2795f1ac5
Christian Brabandt <cb@256bit.org>
parents:
8368
diff
changeset
|
1451 |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1452 /* |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1453 * Add the package directory to 'runtimepath'. |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1454 */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1455 static int |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1456 add_pack_dir_to_rtp(char_u *fname) |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1457 { |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1458 char_u *p4, *p3, *p2, *p1, *p; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1459 char_u *entry; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1460 char_u *insp = NULL; |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1461 int c; |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1462 char_u *new_rtp; |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1463 int keep; |
9155
e4d7e6d1a0f1
commit https://github.com/vim/vim/commit/b055066a1daf12c349d6c575aff22ae4d999a157
Christian Brabandt <cb@256bit.org>
parents:
9153
diff
changeset
|
1464 size_t oldlen; |
e4d7e6d1a0f1
commit https://github.com/vim/vim/commit/b055066a1daf12c349d6c575aff22ae4d999a157
Christian Brabandt <cb@256bit.org>
parents:
9153
diff
changeset
|
1465 size_t addlen; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1466 size_t new_rtp_len; |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1467 char_u *afterdir = NULL; |
9155
e4d7e6d1a0f1
commit https://github.com/vim/vim/commit/b055066a1daf12c349d6c575aff22ae4d999a157
Christian Brabandt <cb@256bit.org>
parents:
9153
diff
changeset
|
1468 size_t afterlen = 0; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1469 char_u *after_insp = NULL; |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1470 char_u *ffname = NULL; |
9410
5a095f9e77ed
commit https://github.com/vim/vim/commit/fef524bbff9aa186838c35212b2f89f61d627cf8
Christian Brabandt <cb@256bit.org>
parents:
9387
diff
changeset
|
1471 size_t fname_len; |
10837
437cf0fe2138
patch 8.0.0308: 'runtimepath' not update correctly when using symbolic link
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1472 char_u *buf = NULL; |
437cf0fe2138
patch 8.0.0308: 'runtimepath' not update correctly when using symbolic link
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1473 char_u *rtp_ffname; |
437cf0fe2138
patch 8.0.0308: 'runtimepath' not update correctly when using symbolic link
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1474 int match; |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1475 int retval = FAIL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1476 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1477 p4 = p3 = p2 = p1 = get_past_head(fname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1478 for (p = p1; *p; MB_PTR_ADV(p)) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1479 if (vim_ispathsep_nocolon(*p)) |
9383
2547ef419123
commit https://github.com/vim/vim/commit/4c5717ed8a81f5ae9dfe4f38b17a61fc8421054b
Christian Brabandt <cb@256bit.org>
parents:
9282
diff
changeset
|
1480 { |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1481 p4 = p3; p3 = p2; p2 = p1; p1 = p; |
9383
2547ef419123
commit https://github.com/vim/vim/commit/4c5717ed8a81f5ae9dfe4f38b17a61fc8421054b
Christian Brabandt <cb@256bit.org>
parents:
9282
diff
changeset
|
1482 } |
2547ef419123
commit https://github.com/vim/vim/commit/4c5717ed8a81f5ae9dfe4f38b17a61fc8421054b
Christian Brabandt <cb@256bit.org>
parents:
9282
diff
changeset
|
1483 |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1484 /* now we have: |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1485 * rtp/pack/name/start/name |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1486 * p4 p3 p2 p1 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1487 * |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1488 * find the part up to "pack" in 'runtimepath' */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1489 c = *++p4; /* append pathsep in order to expand symlink */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1490 *p4 = NUL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1491 ffname = fix_fname(fname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1492 *p4 = c; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1493 if (ffname == NULL) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1494 return FAIL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1495 |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1496 // Find "ffname" in "p_rtp", ignoring '/' vs '\' differences. |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1497 // Also stop at the first "after" directory. |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1498 fname_len = STRLEN(ffname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1499 buf = alloc(MAXPATHL); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1500 if (buf == NULL) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1501 goto theend; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1502 for (entry = p_rtp; *entry != NUL; ) |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1503 { |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1504 char_u *cur_entry = entry; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1505 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1506 copy_option_part(&entry, buf, MAXPATHL, ","); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1507 if (insp == NULL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1508 { |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1509 add_pathsep(buf); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1510 rtp_ffname = fix_fname(buf); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1511 if (rtp_ffname == NULL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1512 goto theend; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1513 match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1514 vim_free(rtp_ffname); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1515 if (match) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1516 // Insert "ffname" after this entry (and comma). |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1517 insp = entry; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1518 } |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1519 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1520 if ((p = (char_u *)strstr((char *)buf, "after")) != NULL |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1521 && p > buf |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1522 && vim_ispathsep(p[-1]) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1523 && (vim_ispathsep(p[5]) || p[5] == NUL || p[5] == ',')) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1524 { |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1525 if (insp == NULL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1526 // Did not find "ffname" before the first "after" directory, |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1527 // insert it before this entry. |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1528 insp = cur_entry; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1529 after_insp = cur_entry; |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1530 break; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1531 } |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1532 } |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1533 |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1534 if (insp == NULL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1535 // Both "fname" and "after" not found, append at the end. |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1536 insp = p_rtp + STRLEN(p_rtp); |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1537 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1538 // check if rtp/pack/name/start/name/after exists |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1539 afterdir = concat_fnames(fname, (char_u *)"after", TRUE); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1540 if (afterdir != NULL && mch_isdir(afterdir)) |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1541 afterlen = STRLEN(afterdir) + 1; // add one for comma |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1542 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1543 oldlen = STRLEN(p_rtp); |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1544 addlen = STRLEN(fname) + 1; // add one for comma |
16782
fc58fee685e2
patch 8.1.1393: unnecessary type casts
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
1545 new_rtp = alloc(oldlen + addlen + afterlen + 1); // add one for NUL |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1546 if (new_rtp == NULL) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1547 goto theend; |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1548 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1549 // We now have 'rtp' parts: {keep}{keep_after}{rest}. |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1550 // Create new_rtp, first: {keep},{fname} |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1551 keep = (int)(insp - p_rtp); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1552 mch_memmove(new_rtp, p_rtp, keep); |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1553 new_rtp_len = keep; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1554 if (*insp == NUL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1555 new_rtp[new_rtp_len++] = ','; // add comma before |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1556 mch_memmove(new_rtp + new_rtp_len, fname, addlen - 1); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1557 new_rtp_len += addlen - 1; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1558 if (*insp != NUL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1559 new_rtp[new_rtp_len++] = ','; // add comma after |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1560 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1561 if (afterlen > 0 && after_insp != NULL) |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1562 { |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1563 int keep_after = (int)(after_insp - p_rtp); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1564 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1565 // Add to new_rtp: {keep},{fname}{keep_after},{afterdir} |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1566 mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1567 keep_after - keep); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1568 new_rtp_len += keep_after - keep; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1569 mch_memmove(new_rtp + new_rtp_len, afterdir, afterlen - 1); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1570 new_rtp_len += afterlen - 1; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1571 new_rtp[new_rtp_len++] = ','; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1572 keep = keep_after; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1573 } |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1574 |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1575 if (p_rtp[keep] != NUL) |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1576 // Append rest: {keep},{fname}{keep_after},{afterdir}{rest} |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1577 mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, oldlen - keep + 1); |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1578 else |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1579 new_rtp[new_rtp_len] = NUL; |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1580 |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1581 if (afterlen > 0 && after_insp == NULL) |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1582 { |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1583 // Append afterdir when "after" was not found: |
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1584 // {keep},{fname}{rest},{afterdir} |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1585 STRCAT(new_rtp, ","); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1586 STRCAT(new_rtp, afterdir); |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1587 } |
14681
285b051979a6
patch 8.1.0353: an "after" directory of a package is appended to 'rtp'
Christian Brabandt <cb@256bit.org>
parents:
14656
diff
changeset
|
1588 |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1589 set_option_value((char_u *)"rtp", 0L, new_rtp, 0); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1590 vim_free(new_rtp); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1591 retval = OK; |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1592 |
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1593 theend: |
10837
437cf0fe2138
patch 8.0.0308: 'runtimepath' not update correctly when using symbolic link
Christian Brabandt <cb@256bit.org>
parents:
10722
diff
changeset
|
1594 vim_free(buf); |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1595 vim_free(ffname); |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1596 vim_free(afterdir); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1597 return retval; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1598 } |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1599 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1600 /* |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1601 * Load scripts in "plugin" and "ftdetect" directories of the package. |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1602 */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1603 static int |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1604 load_pack_plugin(char_u *fname) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1605 { |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1606 static char *plugpat = "%s/plugin/**/*.vim"; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1607 static char *ftpat = "%s/ftdetect/*.vim"; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1608 int len; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1609 char_u *ffname = fix_fname(fname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1610 char_u *pat = NULL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1611 int retval = FAIL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1612 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1613 if (ffname == NULL) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1614 return FAIL; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1615 len = (int)STRLEN(ffname) + (int)STRLEN(ftpat); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1616 pat = alloc(len); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1617 if (pat == NULL) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1618 goto theend; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1619 vim_snprintf((char *)pat, len, plugpat, ffname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1620 source_all_matches(pat); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1621 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1622 { |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1623 char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes"); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1624 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1625 /* If runtime/filetype.vim wasn't loaded yet, the scripts will be |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1626 * found when it loads. */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1627 if (cmd != NULL && eval_to_number(cmd) > 0) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1628 { |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1629 do_cmdline_cmd((char_u *)"augroup filetypedetect"); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1630 vim_snprintf((char *)pat, len, ftpat, ffname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1631 source_all_matches(pat); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1632 do_cmdline_cmd((char_u *)"augroup END"); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1633 } |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1634 vim_free(cmd); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1635 } |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1636 vim_free(pat); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1637 retval = OK; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1638 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1639 theend: |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1640 vim_free(ffname); |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1641 return retval; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1642 } |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1643 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1644 /* used for "cookie" of add_pack_plugin() */ |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1645 static int APP_ADD_DIR; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1646 static int APP_LOAD; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1647 static int APP_BOTH; |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1648 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1649 static void |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1650 add_pack_plugin(char_u *fname, void *cookie) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1651 { |
13724
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1652 if (cookie != &APP_LOAD) |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1653 { |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1654 char_u *buf = alloc(MAXPATHL); |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1655 char_u *p; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1656 int found = FALSE; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1657 |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1658 if (buf == NULL) |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1659 return; |
13724
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1660 p = p_rtp; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1661 while (*p != NUL) |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1662 { |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1663 copy_option_part(&p, buf, MAXPATHL, ","); |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1664 if (pathcmp((char *)buf, (char *)fname, -1) == 0) |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1665 { |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1666 found = TRUE; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1667 break; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1668 } |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1669 } |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1670 vim_free(buf); |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1671 if (!found) |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1672 /* directory is not yet in 'runtimepath', add it */ |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1673 if (add_pack_dir_to_rtp(fname) == FAIL) |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1674 return; |
5ef1e6170589
patch 8.0.1734: package directory not added to 'rtp' if prefix matches
Christian Brabandt <cb@256bit.org>
parents:
13553
diff
changeset
|
1675 } |
13190
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1676 |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1677 if (cookie != &APP_ADD_DIR) |
9fccd578ce1f
patch 8.0.1469: when package path is a symlink 'runtimepath' is wrong
Christian Brabandt <cb@256bit.org>
parents:
13045
diff
changeset
|
1678 load_pack_plugin(fname); |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1679 } |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1680 |
11457
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1681 /* |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1682 * Add all packages in the "start" directory to 'runtimepath'. |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1683 */ |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1684 void |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1685 add_pack_start_dirs(void) |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1686 { |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1687 do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1688 add_pack_plugin, &APP_ADD_DIR); |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1689 } |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1690 |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1691 /* |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1692 * Load plugins from all packages in the "start" directory. |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1693 */ |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1694 void |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1695 load_start_packages(void) |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1696 { |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1697 did_source_packages = TRUE; |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1698 do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1699 add_pack_plugin, &APP_LOAD); |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1700 } |
8520
b4350a4d1e01
commit https://github.com/vim/vim/commit/2d8f56acb32428d0f965d42dd13b27100b46fa15
Christian Brabandt <cb@256bit.org>
parents:
8475
diff
changeset
|
1701 |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1702 /* |
8520
b4350a4d1e01
commit https://github.com/vim/vim/commit/2d8f56acb32428d0f965d42dd13b27100b46fa15
Christian Brabandt <cb@256bit.org>
parents:
8475
diff
changeset
|
1703 * ":packloadall" |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1704 * Find plugins in the package directories and source them. |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1705 */ |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1706 void |
8520
b4350a4d1e01
commit https://github.com/vim/vim/commit/2d8f56acb32428d0f965d42dd13b27100b46fa15
Christian Brabandt <cb@256bit.org>
parents:
8475
diff
changeset
|
1707 ex_packloadall(exarg_T *eap) |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1708 { |
11457
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1709 if (!did_source_packages || eap->forceit) |
8520
b4350a4d1e01
commit https://github.com/vim/vim/commit/2d8f56acb32428d0f965d42dd13b27100b46fa15
Christian Brabandt <cb@256bit.org>
parents:
8475
diff
changeset
|
1710 { |
8849
9f40a379ff1e
commit https://github.com/vim/vim/commit/49b27326447d0827c59c6cd201d58f65c1163086
Christian Brabandt <cb@256bit.org>
parents:
8823
diff
changeset
|
1711 /* First do a round to add all directories to 'runtimepath', then load |
9f40a379ff1e
commit https://github.com/vim/vim/commit/49b27326447d0827c59c6cd201d58f65c1163086
Christian Brabandt <cb@256bit.org>
parents:
8823
diff
changeset
|
1712 * the plugins. This allows for plugins to use an autoload directory |
9f40a379ff1e
commit https://github.com/vim/vim/commit/49b27326447d0827c59c6cd201d58f65c1163086
Christian Brabandt <cb@256bit.org>
parents:
8823
diff
changeset
|
1713 * of another plugin. */ |
11457
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1714 add_pack_start_dirs(); |
5a1656d79707
patch 8.0.0612: pack dirs are added to 'runtimepath' too late
Christian Brabandt <cb@256bit.org>
parents:
11158
diff
changeset
|
1715 load_start_packages(); |
8520
b4350a4d1e01
commit https://github.com/vim/vim/commit/2d8f56acb32428d0f965d42dd13b27100b46fa15
Christian Brabandt <cb@256bit.org>
parents:
8475
diff
changeset
|
1716 } |
8182
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1717 } |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1718 |
95d59081580f
commit https://github.com/vim/vim/commit/f6fee0e2d4341c0c2f5339c1268e5877fafd07cf
Christian Brabandt <cb@256bit.org>
parents:
8080
diff
changeset
|
1719 /* |
8388
f5972de59001
commit https://github.com/vim/vim/commit/f3654827368e6204608036353a0360e9e7c21e02
Christian Brabandt <cb@256bit.org>
parents:
8378
diff
changeset
|
1720 * ":packadd[!] {name}" |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1721 */ |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1722 void |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1723 ex_packadd(exarg_T *eap) |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1724 { |
13045
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1725 static char *plugpat = "pack/*/%s/%s"; |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1726 int len; |
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1727 char *pat; |
13045
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1728 int round; |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1729 int res = OK; |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1730 |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1731 /* Round 1: use "start", round 2: use "opt". */ |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1732 for (round = 1; round <= 2; ++round) |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1733 { |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1734 /* Only look under "start" when loading packages wasn't done yet. */ |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1735 if (round == 1 && did_source_packages) |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1736 continue; |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1737 |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1738 len = (int)STRLEN(plugpat) + (int)STRLEN(eap->arg) + 5; |
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
|
1739 pat = alloc(len); |
13045
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1740 if (pat == NULL) |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1741 return; |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1742 vim_snprintf(pat, len, plugpat, round == 1 ? "start" : "opt", eap->arg); |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1743 /* The first round don't give a "not found" error, in the second round |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1744 * only when nothing was found in the first round. */ |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1745 res = do_in_path(p_pp, (char_u *)pat, |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1746 DIP_ALL + DIP_DIR + (round == 2 && res == FAIL ? DIP_ERR : 0), |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1747 add_pack_plugin, eap->forceit ? &APP_ADD_DIR : &APP_BOTH); |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1748 vim_free(pat); |
afd60028f7b7
patch 8.0.1398: :packadd does not load packages from the "start" directory
Christian Brabandt <cb@256bit.org>
parents:
12992
diff
changeset
|
1749 } |
8376
e448f2a5d45b
commit https://github.com/vim/vim/commit/91715873d19a1859c08eeded7848113596e2f2bd
Christian Brabandt <cb@256bit.org>
parents:
8374
diff
changeset
|
1750 } |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1751 #endif |
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1752 |
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
1753 #if defined(FEAT_EVAL) || defined(PROTO) |
7 | 1754 /* |
1755 * ":options" | |
1756 */ | |
1757 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1758 ex_options( |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1759 exarg_T *eap UNUSED) |
7 | 1760 { |
16722
19ca17f9e155
patch 8.1.1363: ":vert options" does not make a vertical split
Bram Moolenaar <Bram@vim.org>
parents:
16634
diff
changeset
|
1761 vim_setenv((char_u *)"OPTWIN_CMD", |
19ca17f9e155
patch 8.1.1363: ":vert options" does not make a vertical split
Bram Moolenaar <Bram@vim.org>
parents:
16634
diff
changeset
|
1762 (char_u *)(cmdmod.tab ? "tab" |
19ca17f9e155
patch 8.1.1363: ":vert options" does not make a vertical split
Bram Moolenaar <Bram@vim.org>
parents:
16634
diff
changeset
|
1763 : (cmdmod.split & WSP_VERT) ? "vert" : "")); |
7 | 1764 cmd_source((char_u *)SYS_OPTWIN_FILE, NULL); |
1765 } | |
1766 #endif | |
1767 | |
10722
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1768 #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
|
1769 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1770 # 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
|
1771 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1772 * 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
|
1773 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1774 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1775 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
|
1776 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1777 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
|
1778 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1779 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
|
1780 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
|
1781 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
|
1782 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
|
1783 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1784 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1785 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1786 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1787 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1788 * 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
|
1789 * line? |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1790 * "#!(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
|
1791 * "#!(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
|
1792 * "# 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
|
1793 * "# 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
|
1794 * 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
|
1795 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1796 static int |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1797 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
|
1798 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1799 FILE *file; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1800 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
|
1801 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
|
1802 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1803 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
|
1804 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
|
1805 lines = 5; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1806 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1807 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
|
1808 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
|
1809 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1810 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
|
1811 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1812 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
|
1813 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1814 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
|
1815 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1816 /* Check shebang. */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1817 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
|
1818 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1819 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
|
1820 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1821 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1822 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
|
1823 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1824 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
|
1825 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1826 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1827 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1828 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
|
1829 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
|
1830 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1831 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
|
1832 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1833 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1834 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
|
1835 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1836 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
|
1837 break; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1838 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1839 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1840 fclose(file); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1841 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1842 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
|
1843 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1844 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1845 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1846 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1847 * 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
|
1848 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1849 static void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1850 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
|
1851 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1852 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
|
1853 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
|
1854 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1855 # 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
|
1856 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1857 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1858 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
|
1859 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1860 # 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
|
1861 /* user didn't choose a preference, 'pyx' is used */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1862 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
|
1863 # 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
|
1864 v = 2; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1865 # 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
|
1866 v = 3; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1867 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1868 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1869 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1870 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1871 * 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
|
1872 * unobtrusive message. |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1873 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1874 if (eap == NULL) |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1875 vim_memset(&ex, 0, sizeof(ex)); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1876 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1877 ex = *eap; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1878 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
|
1879 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
|
1880 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1881 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
|
1882 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1883 # 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
|
1884 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
|
1885 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1886 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
|
1887 _("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
|
1888 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1889 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
|
1890 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1891 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1892 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1893 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1894 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1895 # 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
|
1896 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
|
1897 # else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1898 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
|
1899 _("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
|
1900 fname); |
15543
dd725a8ab112
patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1901 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
|
1902 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1903 return; |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1904 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1905 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1906 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1907 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1908 * ":pyxfile {fname}" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1909 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1910 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1911 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
|
1912 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1913 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
|
1914 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1915 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1916 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1917 * ":pyx" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1918 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1919 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1920 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
|
1921 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1922 # 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
|
1923 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1924 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
|
1925 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
|
1926 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1927 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
|
1928 # 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
|
1929 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
|
1930 # 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
|
1931 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
|
1932 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1933 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1934 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1935 /* |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1936 * ":pyxdo" |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1937 */ |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1938 void |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1939 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
|
1940 { |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1941 # 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
|
1942 init_pyxversion(); |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1943 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
|
1944 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
|
1945 else |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1946 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
|
1947 # 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
|
1948 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
|
1949 # 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
|
1950 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
|
1951 # endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1952 } |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1953 |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1954 #endif |
7598ce51bf2a
patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents:
10569
diff
changeset
|
1955 |
7 | 1956 /* |
1957 * ":source {fname}" | |
1958 */ | |
1959 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1960 ex_source(exarg_T *eap) |
7 | 1961 { |
1962 #ifdef FEAT_BROWSE | |
1963 if (cmdmod.browse) | |
1964 { | |
1965 char_u *fname = NULL; | |
1966 | |
29 | 1967 fname = do_browse(0, (char_u *)_("Source Vim script"), eap->arg, |
13802
378f9f8e6d8f
patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents:
13782
diff
changeset
|
1968 NULL, NULL, |
378f9f8e6d8f
patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents:
13782
diff
changeset
|
1969 (char_u *)_(BROWSE_FILTER_MACROS), NULL); |
7 | 1970 if (fname != NULL) |
1971 { | |
1972 cmd_source(fname, eap); | |
1973 vim_free(fname); | |
1974 } | |
1975 } | |
1976 else | |
1977 #endif | |
1978 cmd_source(eap->arg, eap); | |
1979 } | |
1980 | |
1981 static void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
1982 cmd_source(char_u *fname, exarg_T *eap) |
7 | 1983 { |
1984 if (*fname == NUL) | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
1985 emsg(_(e_argreq)); |
7 | 1986 |
1987 else if (eap != NULL && eap->forceit) | |
4352 | 1988 /* ":source!": read Normal mode commands |
716 | 1989 * Need to execute the commands directly. This is required at least |
1990 * for: | |
7 | 1991 * - ":g" command busy |
1992 * - after ":argdo", ":windo" or ":bufdo" | |
1993 * - another command follows | |
1994 * - inside a loop | |
1995 */ | |
1996 openscript(fname, global_busy || listcmd_busy || eap->nextcmd != NULL | |
1997 #ifdef FEAT_EVAL | |
1998 || eap->cstack->cs_idx >= 0 | |
1999 #endif | |
2000 ); | |
2001 | |
2002 /* ":source" read ex commands */ | |
819 | 2003 else if (do_source(fname, FALSE, DOSO_NONE) == FAIL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2004 semsg(_(e_notopen), fname); |
7 | 2005 } |
2006 | |
2007 /* | |
2008 * ":source" and associated commands. | |
2009 */ | |
2010 /* | |
2011 * Structure used to store info for each sourced file. | |
2012 * It is shared between do_source() and getsourceline(). | |
2013 * This is required, because it needs to be handed to do_cmdline() and | |
2014 * sourcing can be done recursively. | |
2015 */ | |
2016 struct source_cookie | |
2017 { | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2018 FILE *fp; // opened file for sourcing |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2019 char_u *nextline; // if not NULL: line that was read ahead |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2020 linenr_T sourcing_lnum; // line number of the source file |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2021 int finished; // ":finish" used |
15840
734b1928a5aa
patch 8.1.0927: USE_CR is never defined
Bram Moolenaar <Bram@vim.org>
parents:
15597
diff
changeset
|
2022 #ifdef USE_CRNL |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2023 int fileformat; // EOL_UNKNOWN, EOL_UNIX or EOL_DOS |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2024 int error; // TRUE if LF found after CR-LF |
7 | 2025 #endif |
2026 #ifdef FEAT_EVAL | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2027 linenr_T breakpoint; // next line with breakpoint or zero |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2028 char_u *fname; // name of sourced file |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2029 int dbg_tick; // debug_tick when breakpoint was set |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2030 int level; // top nesting level of sourced file |
7 | 2031 #endif |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2032 vimconv_T conv; // type of conversion |
7 | 2033 }; |
2034 | |
2035 #ifdef FEAT_EVAL | |
2036 /* | |
2037 * Return the address holding the next breakpoint line for a source cookie. | |
2038 */ | |
2039 linenr_T * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2040 source_breakpoint(void *cookie) |
7 | 2041 { |
2042 return &((struct source_cookie *)cookie)->breakpoint; | |
2043 } | |
2044 | |
2045 /* | |
2046 * Return the address holding the debug tick for a source cookie. | |
2047 */ | |
2048 int * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2049 source_dbg_tick(void *cookie) |
7 | 2050 { |
2051 return &((struct source_cookie *)cookie)->dbg_tick; | |
2052 } | |
2053 | |
2054 /* | |
2055 * Return the nesting level for a source cookie. | |
2056 */ | |
2057 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2058 source_level(void *cookie) |
7 | 2059 { |
2060 return ((struct source_cookie *)cookie)->level; | |
2061 } | |
2062 #endif | |
2063 | |
7799
af3c41a3c53f
commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents:
7726
diff
changeset
|
2064 static char_u *get_one_sourceline(struct source_cookie *sp); |
7 | 2065 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
2066 #if (defined(MSWIN) && defined(FEAT_CSCOPE)) || defined(HAVE_FD_CLOEXEC) |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2067 # define USE_FOPEN_NOINH |
7 | 2068 /* |
2069 * Special function to open a file without handle inheritance. | |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2070 * When possible the handle is closed on exec(). |
7 | 2071 */ |
2072 static FILE * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2073 fopen_noinh_readbin(char *filename) |
7 | 2074 { |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
2075 # ifdef MSWIN |
2058
fb1222c880fc
updated for version 7.2.344
Bram Moolenaar <bram@zimbu.org>
parents:
2057
diff
changeset
|
2076 int fd_tmp = mch_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0); |
fb1222c880fc
updated for version 7.2.344
Bram Moolenaar <bram@zimbu.org>
parents:
2057
diff
changeset
|
2077 # else |
fb1222c880fc
updated for version 7.2.344
Bram Moolenaar <bram@zimbu.org>
parents:
2057
diff
changeset
|
2078 int fd_tmp = mch_open(filename, O_RDONLY, 0); |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2079 # endif |
7 | 2080 |
2081 if (fd_tmp == -1) | |
2082 return NULL; | |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2083 |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2084 # ifdef HAVE_FD_CLOEXEC |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2085 { |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2086 int fdflags = fcntl(fd_tmp, F_GETFD); |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2087 if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) |
7009 | 2088 (void)fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC); |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2089 } |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2090 # endif |
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2091 |
7 | 2092 return fdopen(fd_tmp, READBIN); |
2093 } | |
2094 #endif | |
2095 | |
2096 /* | |
2097 * do_source: Read the file "fname" and execute its lines as EX commands. | |
2098 * | |
2099 * This function may be called recursively! | |
2100 * | |
2101 * return FAIL if file could not be opened, OK otherwise | |
2102 */ | |
2103 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2104 do_source( |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2105 char_u *fname, |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2106 int check_other, /* check for .vimrc and _vimrc */ |
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2107 int is_vimrc) /* DOSO_ value */ |
7 | 2108 { |
2109 struct source_cookie cookie; | |
2110 char_u *save_sourcing_name; | |
2111 linenr_T save_sourcing_lnum; | |
2112 char_u *p; | |
2113 char_u *fname_exp; | |
1802 | 2114 char_u *firstline = NULL; |
7 | 2115 int retval = FAIL; |
2116 #ifdef FEAT_EVAL | |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2117 sctx_T save_current_sctx; |
7 | 2118 static scid_T last_current_SID = 0; |
15008
67e3103d6e18
patch 8.1.0515: reloading a script gives errors for existing functions
Bram Moolenaar <Bram@vim.org>
parents:
15002
diff
changeset
|
2119 static int last_current_SID_seq = 0; |
14927
162d79d273e6
patch 8.1.0475: memory not freed on exit when quit in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
2120 funccal_entry_T funccalp_entry; |
7 | 2121 int save_debug_break_level = debug_break_level; |
170 | 2122 scriptitem_T *si = NULL; |
7 | 2123 # ifdef UNIX |
9387
f094d4085014
commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents:
9383
diff
changeset
|
2124 stat_T st; |
7 | 2125 int stat_ok; |
2126 # endif | |
2127 #endif | |
2128 #ifdef STARTUPTIME | |
2129 struct timeval tv_rel; | |
2130 struct timeval tv_start; | |
2131 #endif | |
170 | 2132 #ifdef FEAT_PROFILE |
2133 proftime_T wait_start; | |
2134 #endif | |
15442
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2135 int trigger_source_post = FALSE; |
7 | 2136 |
2137 p = expand_env_save(fname); | |
2138 if (p == NULL) | |
2139 return retval; | |
2140 fname_exp = fix_fname(p); | |
2141 vim_free(p); | |
2142 if (fname_exp == NULL) | |
2143 return retval; | |
2144 if (mch_isdir(fname_exp)) | |
2145 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2146 smsg(_("Cannot source a directory: \"%s\""), fname); |
7 | 2147 goto theend; |
2148 } | |
2149 | |
1061 | 2150 /* Apply SourceCmd autocommands, they should get the file and source it. */ |
2151 if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL) | |
2152 && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp, | |
2153 FALSE, curbuf)) | |
1515 | 2154 { |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
2155 #ifdef FEAT_EVAL |
1515 | 2156 retval = aborting() ? FAIL : OK; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
2157 #else |
1515 | 2158 retval = OK; |
13380
69517d67421f
patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
13302
diff
changeset
|
2159 #endif |
15442
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2160 if (retval == OK) |
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2161 // Apply SourcePost autocommands. |
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2162 apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, |
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2163 FALSE, curbuf); |
1515 | 2164 goto theend; |
2165 } | |
1061 | 2166 |
2167 /* Apply SourcePre autocommands, they may get the file. */ | |
716 | 2168 apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf); |
2169 | |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2170 #ifdef USE_FOPEN_NOINH |
7 | 2171 cookie.fp = fopen_noinh_readbin((char *)fname_exp); |
2172 #else | |
2173 cookie.fp = mch_fopen((char *)fname_exp, READBIN); | |
2174 #endif | |
2175 if (cookie.fp == NULL && check_other) | |
2176 { | |
2177 /* | |
2178 * Try again, replacing file name ".vimrc" by "_vimrc" or vice versa, | |
2179 * and ".exrc" by "_exrc" or vice versa. | |
2180 */ | |
2181 p = gettail(fname_exp); | |
2182 if ((*p == '.' || *p == '_') | |
2183 && (STRICMP(p + 1, "vimrc") == 0 | |
2184 || STRICMP(p + 1, "gvimrc") == 0 | |
2185 || STRICMP(p + 1, "exrc") == 0)) | |
2186 { | |
2187 if (*p == '_') | |
2188 *p = '.'; | |
2189 else | |
2190 *p = '_'; | |
2052
057029bf3470
updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents:
2051
diff
changeset
|
2191 #ifdef USE_FOPEN_NOINH |
7 | 2192 cookie.fp = fopen_noinh_readbin((char *)fname_exp); |
2193 #else | |
2194 cookie.fp = mch_fopen((char *)fname_exp, READBIN); | |
2195 #endif | |
2196 } | |
2197 } | |
2198 | |
2199 if (cookie.fp == NULL) | |
2200 { | |
2201 if (p_verbose > 0) | |
2202 { | |
294 | 2203 verbose_enter(); |
7 | 2204 if (sourcing_name == NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2205 smsg(_("could not source \"%s\""), fname); |
7 | 2206 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2207 smsg(_("line %ld: could not source \"%s\""), |
274 | 2208 sourcing_lnum, fname); |
294 | 2209 verbose_leave(); |
7 | 2210 } |
2211 goto theend; | |
2212 } | |
2213 | |
2214 /* | |
2215 * The file exists. | |
2216 * - In verbose mode, give a message. | |
2217 * - For a vimrc file, may want to set 'compatible', call vimrc_found(). | |
2218 */ | |
2219 if (p_verbose > 1) | |
2220 { | |
294 | 2221 verbose_enter(); |
7 | 2222 if (sourcing_name == NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2223 smsg(_("sourcing \"%s\""), fname); |
7 | 2224 else |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2225 smsg(_("line %ld: sourcing \"%s\""), |
274 | 2226 sourcing_lnum, fname); |
294 | 2227 verbose_leave(); |
7 | 2228 } |
819 | 2229 if (is_vimrc == DOSO_VIMRC) |
2230 vimrc_found(fname_exp, (char_u *)"MYVIMRC"); | |
2231 else if (is_vimrc == DOSO_GVIMRC) | |
2232 vimrc_found(fname_exp, (char_u *)"MYGVIMRC"); | |
7 | 2233 |
2234 #ifdef USE_CRNL | |
2235 /* If no automatic file format: Set default to CR-NL. */ | |
2236 if (*p_ffs == NUL) | |
2237 cookie.fileformat = EOL_DOS; | |
2238 else | |
2239 cookie.fileformat = EOL_UNKNOWN; | |
2240 cookie.error = FALSE; | |
2241 #endif | |
2242 | |
2243 cookie.nextline = NULL; | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2244 cookie.sourcing_lnum = 0; |
7 | 2245 cookie.finished = FALSE; |
2246 | |
2247 #ifdef FEAT_EVAL | |
2248 /* | |
2249 * Check if this script has a breakpoint. | |
2250 */ | |
2251 cookie.breakpoint = dbg_find_breakpoint(TRUE, fname_exp, (linenr_T)0); | |
2252 cookie.fname = fname_exp; | |
2253 cookie.dbg_tick = debug_tick; | |
2254 | |
2255 cookie.level = ex_nesting_level; | |
2256 #endif | |
2257 | |
2258 /* | |
2259 * Keep the sourcing name/lnum, for recursive calls. | |
2260 */ | |
2261 save_sourcing_name = sourcing_name; | |
2262 sourcing_name = fname_exp; | |
2263 save_sourcing_lnum = sourcing_lnum; | |
2264 sourcing_lnum = 0; | |
2265 | |
2266 #ifdef STARTUPTIME | |
2053
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2267 if (time_fd != NULL) |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2268 time_push(&tv_rel, &tv_start); |
7 | 2269 #endif |
2270 | |
2271 #ifdef FEAT_EVAL | |
170 | 2272 # ifdef FEAT_PROFILE |
790 | 2273 if (do_profiling == PROF_YES) |
170 | 2274 prof_child_enter(&wait_start); /* entering a child now */ |
2275 # endif | |
2276 | |
2277 /* Don't use local function variables, if called from a function. | |
2278 * Also starts profiling timer for nested script. */ | |
14927
162d79d273e6
patch 8.1.0475: memory not freed on exit when quit in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
2279 save_funccal(&funccalp_entry); |
170 | 2280 |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2281 save_current_sctx = current_sctx; |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2282 current_sctx.sc_lnum = 0; |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2283 current_sctx.sc_version = 1; |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2284 |
15008
67e3103d6e18
patch 8.1.0515: reloading a script gives errors for existing functions
Bram Moolenaar <Bram@vim.org>
parents:
15002
diff
changeset
|
2285 // Check if this script was sourced before to finds its SID. |
67e3103d6e18
patch 8.1.0515: reloading a script gives errors for existing functions
Bram Moolenaar <Bram@vim.org>
parents:
15002
diff
changeset
|
2286 // If it's new, generate a new SID. |
67e3103d6e18
patch 8.1.0515: reloading a script gives errors for existing functions
Bram Moolenaar <Bram@vim.org>
parents:
15002
diff
changeset
|
2287 // Always use a new sequence number. |
67e3103d6e18
patch 8.1.0515: reloading a script gives errors for existing functions
Bram Moolenaar <Bram@vim.org>
parents:
15002
diff
changeset
|
2288 current_sctx.sc_seq = ++last_current_SID_seq; |
7 | 2289 # ifdef UNIX |
2290 stat_ok = (mch_stat((char *)fname_exp, &st) >= 0); | |
2291 # endif | |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2292 for (current_sctx.sc_sid = script_items.ga_len; current_sctx.sc_sid > 0; |
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2293 --current_sctx.sc_sid) |
170 | 2294 { |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2295 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
170 | 2296 if (si->sn_name != NULL |
7 | 2297 && ( |
2298 # ifdef UNIX | |
161 | 2299 /* Compare dev/ino when possible, it catches symbolic |
2300 * links. Also compare file names, the inode may change | |
2301 * when the file was edited. */ | |
1882 | 2302 ((stat_ok && si->sn_dev_valid) |
170 | 2303 && (si->sn_dev == st.st_dev |
2304 && si->sn_ino == st.st_ino)) || | |
7 | 2305 # endif |
170 | 2306 fnamecmp(si->sn_name, fname_exp) == 0)) |
7 | 2307 break; |
170 | 2308 } |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2309 if (current_sctx.sc_sid == 0) |
7 | 2310 { |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2311 current_sctx.sc_sid = ++last_current_SID; |
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2312 if (ga_grow(&script_items, |
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2313 (int)(current_sctx.sc_sid - script_items.ga_len)) == FAIL) |
170 | 2314 goto almosttheend; |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2315 while (script_items.ga_len < current_sctx.sc_sid) |
7 | 2316 { |
170 | 2317 ++script_items.ga_len; |
2318 SCRIPT_ITEM(script_items.ga_len).sn_name = NULL; | |
2319 # ifdef FEAT_PROFILE | |
2320 SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE; | |
2321 # endif | |
2322 } | |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2323 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
170 | 2324 si->sn_name = fname_exp; |
15448
4880dc2ccc3f
patch 8.1.0732: cannot build without the eval feature
Bram Moolenaar <Bram@vim.org>
parents:
15442
diff
changeset
|
2325 fname_exp = vim_strsave(si->sn_name); // used for autocmd |
7 | 2326 # ifdef UNIX |
170 | 2327 if (stat_ok) |
2328 { | |
1882 | 2329 si->sn_dev_valid = TRUE; |
170 | 2330 si->sn_dev = st.st_dev; |
2331 si->sn_ino = st.st_ino; | |
2332 } | |
2333 else | |
1882 | 2334 si->sn_dev_valid = FALSE; |
7 | 2335 # endif |
170 | 2336 |
7 | 2337 /* Allocate the local script variables to use for this script. */ |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2338 new_script_vars(current_sctx.sc_sid); |
7 | 2339 } |
2340 | |
170 | 2341 # ifdef FEAT_PROFILE |
790 | 2342 if (do_profiling == PROF_YES) |
170 | 2343 { |
2344 int forceit; | |
2345 | |
2346 /* Check if we do profiling for this script. */ | |
2347 if (!si->sn_prof_on && has_profiling(TRUE, si->sn_name, &forceit)) | |
2348 { | |
2349 script_do_profile(si); | |
2350 si->sn_pr_force = forceit; | |
2351 } | |
2352 if (si->sn_prof_on) | |
2353 { | |
2354 ++si->sn_pr_count; | |
2355 profile_start(&si->sn_pr_start); | |
2356 profile_zero(&si->sn_pr_children); | |
2357 } | |
2358 } | |
2359 # endif | |
7 | 2360 #endif |
2361 | |
12658
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2362 cookie.conv.vc_type = CONV_NONE; /* no conversion */ |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2363 |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2364 /* Read the first line so we can check for a UTF-8 BOM. */ |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
2365 firstline = getsourceline(0, (void *)&cookie, 0, TRUE); |
12658
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2366 if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2367 && firstline[1] == 0xbb && firstline[2] == 0xbf) |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2368 { |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2369 /* Found BOM; setup conversion, skip over BOM and recode the line. */ |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2370 convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2371 p = string_convert(&cookie.conv, firstline + 3, NULL); |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2372 if (p == NULL) |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2373 p = vim_strsave(firstline + 3); |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2374 if (p != NULL) |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2375 { |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2376 vim_free(firstline); |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2377 firstline = p; |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2378 } |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2379 } |
20aacdca367d
patch 8.0.1207: profiling skips the first and last script line
Christian Brabandt <cb@256bit.org>
parents:
12495
diff
changeset
|
2380 |
7 | 2381 /* |
2382 * Call do_cmdline, which will call getsourceline() to get the lines. | |
2383 */ | |
1802 | 2384 do_cmdline(firstline, getsourceline, (void *)&cookie, |
7 | 2385 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); |
2386 retval = OK; | |
170 | 2387 |
2388 #ifdef FEAT_PROFILE | |
790 | 2389 if (do_profiling == PROF_YES) |
170 | 2390 { |
2391 /* Get "si" again, "script_items" may have been reallocated. */ | |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2392 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
170 | 2393 if (si->sn_prof_on) |
2394 { | |
2395 profile_end(&si->sn_pr_start); | |
2396 profile_sub_wait(&wait_start, &si->sn_pr_start); | |
2397 profile_add(&si->sn_pr_total, &si->sn_pr_start); | |
720 | 2398 profile_self(&si->sn_pr_self, &si->sn_pr_start, |
2399 &si->sn_pr_children); | |
170 | 2400 } |
2401 } | |
7 | 2402 #endif |
2403 | |
2404 if (got_int) | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2405 emsg(_(e_interr)); |
7 | 2406 sourcing_name = save_sourcing_name; |
2407 sourcing_lnum = save_sourcing_lnum; | |
2408 if (p_verbose > 1) | |
2409 { | |
294 | 2410 verbose_enter(); |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2411 smsg(_("finished sourcing %s"), fname); |
7 | 2412 if (sourcing_name != NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2413 smsg(_("continuing in %s"), sourcing_name); |
294 | 2414 verbose_leave(); |
7 | 2415 } |
2416 #ifdef STARTUPTIME | |
2053
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2417 if (time_fd != NULL) |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2418 { |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2419 vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname); |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2420 time_msg((char *)IObuff, &tv_start); |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2421 time_pop(&tv_rel); |
94f44da44d2e
updated for version 7.2.339
Bram Moolenaar <bram@zimbu.org>
parents:
2052
diff
changeset
|
2422 } |
7 | 2423 #endif |
2424 | |
15442
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2425 if (!got_int) |
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2426 trigger_source_post = TRUE; |
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2427 |
7 | 2428 #ifdef FEAT_EVAL |
2429 /* | |
2430 * After a "finish" in debug mode, need to break at first command of next | |
2431 * sourced file. | |
2432 */ | |
2433 if (save_debug_break_level > ex_nesting_level | |
2434 && debug_break_level == ex_nesting_level) | |
2435 ++debug_break_level; | |
2436 #endif | |
2437 | |
170 | 2438 #ifdef FEAT_EVAL |
2439 almosttheend: | |
14700
0a3b9ecf7cb8
patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents:
14681
diff
changeset
|
2440 current_sctx = save_current_sctx; |
14927
162d79d273e6
patch 8.1.0475: memory not freed on exit when quit in autocmd
Bram Moolenaar <Bram@vim.org>
parents:
14862
diff
changeset
|
2441 restore_funccal(); |
170 | 2442 # ifdef FEAT_PROFILE |
790 | 2443 if (do_profiling == PROF_YES) |
170 | 2444 prof_child_exit(&wait_start); /* leaving a child now */ |
2445 # endif | |
2446 #endif | |
2447 fclose(cookie.fp); | |
2448 vim_free(cookie.nextline); | |
1802 | 2449 vim_free(firstline); |
170 | 2450 convert_setup(&cookie.conv, NULL, NULL); |
2451 | |
15442
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2452 if (trigger_source_post) |
15448
4880dc2ccc3f
patch 8.1.0732: cannot build without the eval feature
Bram Moolenaar <Bram@vim.org>
parents:
15442
diff
changeset
|
2453 apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, FALSE, curbuf); |
15442
3e2e1608efa4
patch 8.1.0729: there is a SourcePre autocommand event but not a SourcePost
Bram Moolenaar <Bram@vim.org>
parents:
15286
diff
changeset
|
2454 |
7 | 2455 theend: |
2456 vim_free(fname_exp); | |
2457 return retval; | |
2458 } | |
2459 | |
2460 #if defined(FEAT_EVAL) || defined(PROTO) | |
356 | 2461 |
7 | 2462 /* |
2463 * ":scriptnames" | |
2464 */ | |
2465 void | |
15085
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2466 ex_scriptnames(exarg_T *eap) |
7 | 2467 { |
2468 int i; | |
2469 | |
15085
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2470 if (eap->addr_count > 0) |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2471 { |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2472 // :script {scriptId}: edit the script |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2473 if (eap->line2 < 1 || eap->line2 > script_items.ga_len) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2474 emsg(_(e_invarg)); |
15085
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2475 else |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2476 { |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2477 eap->arg = SCRIPT_ITEM(eap->line2).sn_name; |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2478 do_exedit(eap, NULL); |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2479 } |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2480 return; |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2481 } |
1783c0b6bc2e
patch 8.1.0553: it is not easy to edit a script that was sourced
Bram Moolenaar <Bram@vim.org>
parents:
15008
diff
changeset
|
2482 |
170 | 2483 for (i = 1; i <= script_items.ga_len && !got_int; ++i) |
2484 if (SCRIPT_ITEM(i).sn_name != NULL) | |
2921 | 2485 { |
2486 home_replace(NULL, SCRIPT_ITEM(i).sn_name, | |
2487 NameBuff, MAXPATHL, TRUE); | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2488 smsg("%3d: %s", i, NameBuff); |
3429 | 2489 } |
7 | 2490 } |
2491 | |
2492 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO) | |
2493 /* | |
2494 * Fix slashes in the list of script names for 'shellslash'. | |
2495 */ | |
2496 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2497 scriptnames_slash_adjust(void) |
7 | 2498 { |
2499 int i; | |
2500 | |
170 | 2501 for (i = 1; i <= script_items.ga_len; ++i) |
2502 if (SCRIPT_ITEM(i).sn_name != NULL) | |
2503 slash_adjust(SCRIPT_ITEM(i).sn_name); | |
7 | 2504 } |
2505 # endif | |
2506 | |
2507 /* | |
2508 * Get a pointer to a script name. Used for ":verbose set". | |
2509 */ | |
2510 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2511 get_scriptname(scid_T id) |
7 | 2512 { |
2513 if (id == SID_MODELINE) | |
681 | 2514 return (char_u *)_("modeline"); |
7 | 2515 if (id == SID_CMDARG) |
681 | 2516 return (char_u *)_("--cmd argument"); |
7 | 2517 if (id == SID_CARG) |
681 | 2518 return (char_u *)_("-c argument"); |
7 | 2519 if (id == SID_ENV) |
681 | 2520 return (char_u *)_("environment variable"); |
2521 if (id == SID_ERROR) | |
2522 return (char_u *)_("error handler"); | |
170 | 2523 return SCRIPT_ITEM(id).sn_name; |
2524 } | |
2525 | |
356 | 2526 # if defined(EXITFREE) || defined(PROTO) |
2527 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2528 free_scriptnames(void) |
356 | 2529 { |
2530 int i; | |
2531 | |
2532 for (i = script_items.ga_len; i > 0; --i) | |
2533 vim_free(SCRIPT_ITEM(i).sn_name); | |
2534 ga_clear(&script_items); | |
2535 } | |
2536 # endif | |
2537 | |
7 | 2538 #endif |
2539 | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2540 linenr_T |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2541 get_sourced_lnum(char_u *(*fgetline)(int, void *, int, int), void *cookie) |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2542 { |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2543 return fgetline == getsourceline |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2544 ? ((struct source_cookie *)cookie)->sourcing_lnum |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2545 : sourcing_lnum; |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2546 } |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2547 |
7 | 2548 /* |
2549 * Get one full line from a sourced file. | |
2550 * Called by do_cmdline() when it's called from do_source(). | |
2551 * | |
2552 * Return a pointer to the line in allocated memory. | |
2553 * Return NULL for end-of-file or some error. | |
2554 */ | |
2555 char_u * | |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
2556 getsourceline(int c UNUSED, void *cookie, int indent UNUSED, int do_concat) |
7 | 2557 { |
2558 struct source_cookie *sp = (struct source_cookie *)cookie; | |
2559 char_u *line; | |
3336 | 2560 char_u *p; |
7 | 2561 |
2562 #ifdef FEAT_EVAL | |
2563 /* If breakpoints have been added/deleted need to check for it. */ | |
2564 if (sp->dbg_tick < debug_tick) | |
2565 { | |
2566 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum); | |
2567 sp->dbg_tick = debug_tick; | |
2568 } | |
170 | 2569 # ifdef FEAT_PROFILE |
790 | 2570 if (do_profiling == PROF_YES) |
170 | 2571 script_line_end(); |
2572 # endif | |
7 | 2573 #endif |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2574 |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2575 // Set the current sourcing line number. |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2576 sourcing_lnum = sp->sourcing_lnum + 1; |
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2577 |
7 | 2578 /* |
2579 * Get current line. If there is a read-ahead line, use it, otherwise get | |
2580 * one now. | |
2581 */ | |
2582 if (sp->finished) | |
2583 line = NULL; | |
2584 else if (sp->nextline == NULL) | |
2585 line = get_one_sourceline(sp); | |
2586 else | |
2587 { | |
2588 line = sp->nextline; | |
2589 sp->nextline = NULL; | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2590 ++sp->sourcing_lnum; |
205 | 2591 } |
170 | 2592 #ifdef FEAT_PROFILE |
790 | 2593 if (line != NULL && do_profiling == PROF_YES) |
205 | 2594 script_line_start(); |
2595 #endif | |
7 | 2596 |
2597 /* Only concatenate lines starting with a \ when 'cpoptions' doesn't | |
2598 * contain the 'C' flag. */ | |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
2599 if (line != NULL && do_concat && vim_strchr(p_cpo, CPO_CONCAT) == NULL) |
7 | 2600 { |
2601 /* compensate for the one line read-ahead */ | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2602 --sp->sourcing_lnum; |
3332 | 2603 |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2604 // Get the next line and concatenate it when it starts with a |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2605 // backslash. We always need to read the next line, keep it in |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2606 // sp->nextline. |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2607 /* Also check for a comment in between continuation lines: "\ */ |
3332 | 2608 sp->nextline = get_one_sourceline(sp); |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2609 if (sp->nextline != NULL |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2610 && (*(p = skipwhite(sp->nextline)) == '\\' |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2611 || (p[0] == '"' && p[1] == '\\' && p[2] == ' '))) |
7 | 2612 { |
3332 | 2613 garray_T ga; |
2614 | |
3378 | 2615 ga_init2(&ga, (int)sizeof(char_u), 400); |
3332 | 2616 ga_concat(&ga, line); |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2617 if (*p == '\\') |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2618 ga_concat(&ga, p + 1); |
3332 | 2619 for (;;) |
2620 { | |
2621 vim_free(sp->nextline); | |
2622 sp->nextline = get_one_sourceline(sp); | |
2623 if (sp->nextline == NULL) | |
2624 break; | |
2625 p = skipwhite(sp->nextline); | |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2626 if (*p == '\\') |
3378 | 2627 { |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2628 // Adjust the growsize to the current length to speed up |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2629 // concatenating many lines. |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2630 if (ga.ga_len > 400) |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2631 { |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2632 if (ga.ga_len > 8000) |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2633 ga.ga_growsize = 8000; |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2634 else |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2635 ga.ga_growsize = ga.ga_len; |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2636 } |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2637 ga_concat(&ga, p + 1); |
3378 | 2638 } |
14714
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2639 else if (p[0] != '"' || p[1] != '\\' || p[2] != ' ') |
bdbb049c2aa8
patch 8.1.0369: continuation lines cannot contain comments
Christian Brabandt <cb@256bit.org>
parents:
14700
diff
changeset
|
2640 break; |
3332 | 2641 } |
2642 ga_append(&ga, NUL); | |
7 | 2643 vim_free(line); |
3332 | 2644 line = ga.ga_data; |
7 | 2645 } |
2646 } | |
2647 | |
2648 if (line != NULL && sp->conv.vc_type != CONV_NONE) | |
2649 { | |
3336 | 2650 char_u *s; |
2651 | |
7 | 2652 /* Convert the encoding of the script line. */ |
2653 s = string_convert(&sp->conv, line, NULL); | |
2654 if (s != NULL) | |
2655 { | |
2656 vim_free(line); | |
2657 line = s; | |
2658 } | |
2659 } | |
2660 | |
2661 #ifdef FEAT_EVAL | |
2662 /* Did we encounter a breakpoint? */ | |
2663 if (sp->breakpoint != 0 && sp->breakpoint <= sourcing_lnum) | |
2664 { | |
2665 dbg_breakpoint(sp->fname, sourcing_lnum); | |
2666 /* Find next breakpoint. */ | |
2667 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum); | |
2668 sp->dbg_tick = debug_tick; | |
2669 } | |
2670 #endif | |
2671 | |
2672 return line; | |
2673 } | |
2674 | |
2675 static char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2676 get_one_sourceline(struct source_cookie *sp) |
7 | 2677 { |
2678 garray_T ga; | |
2679 int len; | |
2680 int c; | |
2681 char_u *buf; | |
2682 #ifdef USE_CRNL | |
2683 int has_cr; /* CR-LF found */ | |
2684 #endif | |
2685 int have_read = FALSE; | |
2686 | |
2687 /* use a growarray to store the sourced line */ | |
154 | 2688 ga_init2(&ga, 1, 250); |
7 | 2689 |
2690 /* | |
2691 * Loop until there is a finished line (or end-of-file). | |
2692 */ | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2693 ++sp->sourcing_lnum; |
7 | 2694 for (;;) |
2695 { | |
154 | 2696 /* make room to read at least 120 (more) characters */ |
2697 if (ga_grow(&ga, 120) == FAIL) | |
7 | 2698 break; |
2699 buf = (char_u *)ga.ga_data; | |
2700 | |
15840
734b1928a5aa
patch 8.1.0927: USE_CR is never defined
Bram Moolenaar <Bram@vim.org>
parents:
15597
diff
changeset
|
2701 if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len, |
41 | 2702 sp->fp) == NULL) |
15840
734b1928a5aa
patch 8.1.0927: USE_CR is never defined
Bram Moolenaar <Bram@vim.org>
parents:
15597
diff
changeset
|
2703 break; |
154 | 2704 len = ga.ga_len + (int)STRLEN(buf + ga.ga_len); |
7 | 2705 #ifdef USE_CRNL |
2706 /* Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the | |
2707 * CTRL-Z by its own, or after a NL. */ | |
2708 if ( (len == 1 || (len >= 2 && buf[len - 2] == '\n')) | |
2709 && sp->fileformat == EOL_DOS | |
2710 && buf[len - 1] == Ctrl_Z) | |
2711 { | |
2712 buf[len - 1] = NUL; | |
2713 break; | |
2714 } | |
2715 #endif | |
2716 | |
2717 have_read = TRUE; | |
2718 ga.ga_len = len; | |
2719 | |
2720 /* If the line was longer than the buffer, read more. */ | |
41 | 2721 if (ga.ga_maxlen - ga.ga_len == 1 && buf[len - 1] != '\n') |
7 | 2722 continue; |
2723 | |
2724 if (len >= 1 && buf[len - 1] == '\n') /* remove trailing NL */ | |
2725 { | |
2726 #ifdef USE_CRNL | |
2727 has_cr = (len >= 2 && buf[len - 2] == '\r'); | |
2728 if (sp->fileformat == EOL_UNKNOWN) | |
2729 { | |
2730 if (has_cr) | |
2731 sp->fileformat = EOL_DOS; | |
2732 else | |
2733 sp->fileformat = EOL_UNIX; | |
2734 } | |
2735 | |
2736 if (sp->fileformat == EOL_DOS) | |
2737 { | |
2738 if (has_cr) /* replace trailing CR */ | |
2739 { | |
2740 buf[len - 2] = '\n'; | |
2741 --len; | |
2742 --ga.ga_len; | |
2743 } | |
2744 else /* lines like ":map xx yy^M" will have failed */ | |
2745 { | |
2746 if (!sp->error) | |
16 | 2747 { |
11158
501f46f7644c
patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents:
11129
diff
changeset
|
2748 msg_source(HL_ATTR(HLF_W)); |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2749 emsg(_("W15: Warning: Wrong line separator, ^M may be missing")); |
16 | 2750 } |
7 | 2751 sp->error = TRUE; |
2752 sp->fileformat = EOL_UNIX; | |
2753 } | |
2754 } | |
2755 #endif | |
2756 /* The '\n' is escaped if there is an odd number of ^V's just | |
2757 * before it, first set "c" just before the 'V's and then check | |
2758 * len&c parities (is faster than ((len-c)%2 == 0)) -- Acevedo */ | |
2759 for (c = len - 2; c >= 0 && buf[c] == Ctrl_V; c--) | |
2760 ; | |
2761 if ((len & 1) != (c & 1)) /* escaped NL, read more */ | |
2762 { | |
17251
984eef966002
patch 8.1.1625: script line numbers are not exactly right
Bram Moolenaar <Bram@vim.org>
parents:
17184
diff
changeset
|
2763 ++sp->sourcing_lnum; |
7 | 2764 continue; |
2765 } | |
2766 | |
2767 buf[len - 1] = NUL; /* remove the NL */ | |
2768 } | |
2769 | |
2770 /* | |
2771 * Check for ^C here now and then, so recursive :so can be broken. | |
2772 */ | |
2773 line_breakcheck(); | |
2774 break; | |
2775 } | |
2776 | |
2777 if (have_read) | |
2778 return (char_u *)ga.ga_data; | |
2779 | |
2780 vim_free(ga.ga_data); | |
2781 return NULL; | |
2782 } | |
2783 | |
2784 /* | |
2785 * ":scriptencoding": Set encoding conversion for a sourced script. | |
2786 */ | |
2787 void | |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2788 ex_scriptencoding(exarg_T *eap) |
7 | 2789 { |
2790 struct source_cookie *sp; | |
2791 char_u *name; | |
2792 | |
2793 if (!getline_equal(eap->getline, eap->cookie, getsourceline)) | |
2794 { | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2795 emsg(_("E167: :scriptencoding used outside of a sourced file")); |
7 | 2796 return; |
2797 } | |
2798 | |
2799 if (*eap->arg != NUL) | |
2800 { | |
2801 name = enc_canonize(eap->arg); | |
2802 if (name == NULL) /* out of memory */ | |
2803 return; | |
2804 } | |
2805 else | |
2806 name = eap->arg; | |
2807 | |
2808 /* Setup for conversion from the specified encoding to 'encoding'. */ | |
2809 sp = (struct source_cookie *)getline_cookie(eap->getline, eap->cookie); | |
2810 convert_setup(&sp->conv, name, p_enc); | |
2811 | |
2812 if (name != eap->arg) | |
2813 vim_free(name); | |
2814 } | |
2815 | |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2816 /* |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2817 * ":scriptversion": Set Vim script version for a sourced script. |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2818 */ |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2819 void |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2820 ex_scriptversion(exarg_T *eap UNUSED) |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2821 { |
16225
9cbc5ff516ee
patch 8.1.1117: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
16223
diff
changeset
|
2822 #ifdef FEAT_EVAL |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2823 int nr; |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2824 |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2825 if (!getline_equal(eap->getline, eap->cookie, getsourceline)) |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2826 { |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2827 emsg(_("E984: :scriptversion used outside of a sourced file")); |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2828 return; |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2829 } |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2830 |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2831 nr = getdigits(&eap->arg); |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2832 if (nr == 0 || *eap->arg != NUL) |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2833 emsg(_(e_invarg)); |
16366
6ee80f3b5ea9
patch 8.1.1188: not all Vim variables require the v: prefix
Bram Moolenaar <Bram@vim.org>
parents:
16225
diff
changeset
|
2834 else if (nr > 3) |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2835 semsg(_("E999: scriptversion not supported: %d"), nr); |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2836 else |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2837 current_sctx.sc_version = nr; |
16225
9cbc5ff516ee
patch 8.1.1117: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
16223
diff
changeset
|
2838 #endif |
16223
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2839 } |
abb67309c1ca
patch 8.1.1116: cannot enforce a Vim script style
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
2840 |
7 | 2841 #if defined(FEAT_EVAL) || defined(PROTO) |
2842 /* | |
2843 * ":finish": Mark a sourced file as finished. | |
2844 */ | |
2845 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2846 ex_finish(exarg_T *eap) |
7 | 2847 { |
2848 if (getline_equal(eap->getline, eap->cookie, getsourceline)) | |
2849 do_finish(eap, FALSE); | |
2850 else | |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
2851 emsg(_("E168: :finish used outside of a sourced file")); |
7 | 2852 } |
2853 | |
2854 /* | |
2855 * Mark a sourced file as finished. Possibly makes the ":finish" pending. | |
2856 * Also called for a pending finish at the ":endtry" or after returning from | |
2857 * an extra do_cmdline(). "reanimate" is used in the latter case. | |
2858 */ | |
2859 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2860 do_finish(exarg_T *eap, int reanimate) |
7 | 2861 { |
2862 int idx; | |
2863 | |
2864 if (reanimate) | |
2865 ((struct source_cookie *)getline_cookie(eap->getline, | |
2866 eap->cookie))->finished = FALSE; | |
2867 | |
2868 /* | |
2869 * Cleanup (and inactivate) conditionals, but stop when a try conditional | |
2870 * not in its finally clause (which then is to be executed next) is found. | |
2871 * In this case, make the ":finish" pending for execution at the ":endtry". | |
2872 * Otherwise, finish normally. | |
2873 */ | |
2874 idx = cleanup_conditionals(eap->cstack, 0, TRUE); | |
2875 if (idx >= 0) | |
2876 { | |
2877 eap->cstack->cs_pending[idx] = CSTP_FINISH; | |
2878 report_make_pending(CSTP_FINISH, NULL); | |
2879 } | |
2880 else | |
2881 ((struct source_cookie *)getline_cookie(eap->getline, | |
2882 eap->cookie))->finished = TRUE; | |
2883 } | |
2884 | |
2885 | |
2886 /* | |
2887 * Return TRUE when a sourced file had the ":finish" command: Don't give error | |
2888 * message for missing ":endif". | |
2889 * Return FALSE when not sourcing a file. | |
2890 */ | |
2891 int | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2892 source_finished( |
17178
40c4cb095d53
patch 8.1.1588: in :let-heredoc line continuation is recognized
Bram Moolenaar <Bram@vim.org>
parents:
17151
diff
changeset
|
2893 char_u *(*fgetline)(int, void *, int, int), |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2894 void *cookie) |
7 | 2895 { |
944 | 2896 return (getline_equal(fgetline, cookie, getsourceline) |
7 | 2897 && ((struct source_cookie *)getline_cookie( |
944 | 2898 fgetline, cookie))->finished); |
7 | 2899 } |
2900 #endif | |
2901 | |
2902 /* | |
2903 * ":checktime [buffer]" | |
2904 */ | |
2905 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2906 ex_checktime(exarg_T *eap) |
7 | 2907 { |
2908 buf_T *buf; | |
2909 int save_no_check_timestamps = no_check_timestamps; | |
2910 | |
2911 no_check_timestamps = 0; | |
2912 if (eap->addr_count == 0) /* default is all buffers */ | |
2913 check_timestamps(FALSE); | |
2914 else | |
2915 { | |
2916 buf = buflist_findnr((int)eap->line2); | |
2917 if (buf != NULL) /* cannot happen? */ | |
2918 (void)buf_check_timestamp(buf, FALSE); | |
2919 } | |
2920 no_check_timestamps = save_no_check_timestamps; | |
2921 } | |
2922 | |
2923 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
2924 && (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
|
2925 # define HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
2926 static char_u * |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
2927 get_locale_val(int what) |
7 | 2928 { |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
2929 char_u *loc; |
7 | 2930 |
8212
05b88224cea1
commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents:
8206
diff
changeset
|
2931 /* 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
|
2932 loc = (char_u *)setlocale(what, NULL); |
7 | 2933 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
2934 # ifdef MSWIN |
7 | 2935 if (loc != NULL) |
2936 { | |
2937 char_u *p; | |
2938 | |
823 | 2939 /* setocale() returns something like "LC_COLLATE=<name>;LC_..." when |
2940 * one of the values (e.g., LC_CTYPE) differs. */ | |
7 | 2941 p = vim_strchr(loc, '='); |
2942 if (p != NULL) | |
2943 { | |
2944 loc = ++p; | |
2945 while (*p != NUL) /* remove trailing newline */ | |
2946 { | |
823 | 2947 if (*p < ' ' || *p == ';') |
7 | 2948 { |
2949 *p = NUL; | |
2950 break; | |
2951 } | |
2952 ++p; | |
2953 } | |
2954 } | |
2955 } | |
2956 # endif | |
2957 | |
2958 return loc; | |
2959 } | |
2960 #endif | |
2961 | |
2962 | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
2963 #ifdef MSWIN |
7 | 2964 /* |
2965 * On MS-Windows locale names are strings like "German_Germany.1252", but | |
2966 * gettext expects "de". Try to translate one into another here for a few | |
2967 * supported languages. | |
2968 */ | |
2969 static char_u * | |
2970 gettext_lang(char_u *name) | |
2971 { | |
2972 int i; | |
2973 static char *(mtable[]) = { | |
2974 "afrikaans", "af", | |
2975 "czech", "cs", | |
2976 "dutch", "nl", | |
2977 "german", "de", | |
2978 "english_united kingdom", "en_GB", | |
2979 "spanish", "es", | |
2980 "french", "fr", | |
2981 "italian", "it", | |
2982 "japanese", "ja", | |
2983 "korean", "ko", | |
2984 "norwegian", "no", | |
2985 "polish", "pl", | |
2986 "russian", "ru", | |
2987 "slovak", "sk", | |
2988 "swedish", "sv", | |
2989 "ukrainian", "uk", | |
2990 "chinese_china", "zh_CN", | |
2991 "chinese_taiwan", "zh_TW", | |
2992 NULL}; | |
2993 | |
2994 for (i = 0; mtable[i] != NULL; i += 2) | |
2995 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
|
2996 return (char_u *)mtable[i + 1]; |
7 | 2997 return name; |
2998 } | |
2999 #endif | |
3000 | |
3001 #if defined(FEAT_MULTI_LANG) || defined(PROTO) | |
3002 /* | |
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
|
3003 * 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
|
3004 * 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
|
3005 */ |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
3006 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
|
3007 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
|
3008 { |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
3009 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
|
3010 } |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
3011 |
9ae60773dd03
patch 8.1.0512: 'helplang' default is inconsistent for C and C.UTF-8
Bram Moolenaar <Bram@vim.org>
parents:
14927
diff
changeset
|
3012 /* |
7 | 3013 * Obtain the current messages language. Used to set the default for |
3014 * 'helplang'. May return NULL or an empty string. | |
3015 */ | |
3016 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3017 get_mess_lang(void) |
7 | 3018 { |
3019 char_u *p; | |
3020 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
3021 # ifdef HAVE_GET_LOCALE_VAL |
7 | 3022 # if defined(LC_MESSAGES) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
3023 p = get_locale_val(LC_MESSAGES); |
7 | 3024 # else |
3025 /* This is necessary for Win32, where LC_MESSAGES is not defined and $LANG | |
823 | 3026 * may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME |
3027 * and LC_MONETARY may be set differently for a Japanese working in the | |
3028 * US. */ | |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
3029 p = get_locale_val(LC_COLLATE); |
7 | 3030 # endif |
3031 # else | |
3032 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
|
3033 if (!is_valid_mess_lang(p)) |
7 | 3034 { |
3035 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
|
3036 if (!is_valid_mess_lang(p)) |
7 | 3037 p = mch_getenv((char_u *)"LANG"); |
3038 } | |
3039 # endif | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
3040 # ifdef MSWIN |
7 | 3041 p = gettext_lang(p); |
3042 # 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
|
3043 return is_valid_mess_lang(p) ? p : NULL; |
7 | 3044 } |
3045 #endif | |
3046 | |
45 | 3047 /* Complicated #if; matches with where get_mess_env() is used below. */ |
3048 #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
3049 && defined(LC_MESSAGES))) \ | |
3050 || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ | |
3051 && !defined(LC_MESSAGES)) | |
7 | 3052 /* |
3053 * Get the language used for messages from the environment. | |
3054 */ | |
3055 static char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3056 get_mess_env(void) |
7 | 3057 { |
3058 char_u *p; | |
3059 | |
3060 p = mch_getenv((char_u *)"LC_ALL"); | |
3061 if (p == NULL || *p == NUL) | |
3062 { | |
3063 p = mch_getenv((char_u *)"LC_MESSAGES"); | |
3064 if (p == NULL || *p == NUL) | |
3065 { | |
3066 p = mch_getenv((char_u *)"LANG"); | |
3067 if (p != NULL && VIM_ISDIGIT(*p)) | |
3068 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
|
3069 # ifdef HAVE_GET_LOCALE_VAL |
7 | 3070 if (p == NULL || *p == NUL) |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
3071 p = get_locale_val(LC_CTYPE); |
7 | 3072 # endif |
3073 } | |
3074 } | |
3075 return p; | |
3076 } | |
3077 #endif | |
3078 | |
3079 #if defined(FEAT_EVAL) || defined(PROTO) | |
3080 | |
3081 /* | |
3082 * Set the "v:lang" variable according to the current locale setting. | |
3083 * Also do "v:lc_time"and "v:ctype". | |
3084 */ | |
3085 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3086 set_lang_var(void) |
7 | 3087 { |
3088 char_u *loc; | |
3089 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
3090 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
3091 loc = get_locale_val(LC_CTYPE); |
7 | 3092 # else |
3093 /* setlocale() not supported: use the default value */ | |
3094 loc = (char_u *)"C"; | |
3095 # endif | |
3096 set_vim_var_string(VV_CTYPE, loc, -1); | |
3097 | |
3098 /* When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall | |
3099 * 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
|
3100 # 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
|
3101 loc = get_locale_val(LC_MESSAGES); |
7 | 3102 # else |
3103 loc = get_mess_env(); | |
3104 # endif | |
3105 set_vim_var_string(VV_LANG, loc, -1); | |
3106 | |
2419
f579b934f51d
Fix build warnings and problems for tiny/small Win32 build. (Mike Williams)
Bram Moolenaar <bram@vim.org>
parents:
2250
diff
changeset
|
3107 # ifdef HAVE_GET_LOCALE_VAL |
8080
b6cb94ad97a4
commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents:
7979
diff
changeset
|
3108 loc = get_locale_val(LC_TIME); |
7 | 3109 # endif |
3110 set_vim_var_string(VV_LC_TIME, loc, -1); | |
3111 } | |
3112 #endif | |
3113 | |
15597
536dd2bc5ac9
patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
15595
diff
changeset
|
3114 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) \ |
7 | 3115 /* |
3116 * ":language": Set the language (locale). | |
3117 */ | |
3118 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3119 ex_language(exarg_T *eap) |
7 | 3120 { |
3121 char *loc; | |
3122 char_u *p; | |
3123 char_u *name; | |
3124 int what = LC_ALL; | |
3125 char *whatstr = ""; | |
3126 #ifdef LC_MESSAGES | |
3127 # define VIM_LC_MESSAGES LC_MESSAGES | |
3128 #else | |
3129 # define VIM_LC_MESSAGES 6789 | |
3130 #endif | |
3131 | |
3132 name = eap->arg; | |
3133 | |
3134 /* Check for "messages {name}", "ctype {name}" or "time {name}" argument. | |
3135 * Allow abbreviation, but require at least 3 characters to avoid | |
3136 * confusion with a two letter language name "me" or "ct". */ | |
3137 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
|
3138 if ((*p == NUL || VIM_ISWHITE(*p)) && p - eap->arg >= 3) |
7 | 3139 { |
3140 if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0) | |
3141 { | |
3142 what = VIM_LC_MESSAGES; | |
3143 name = skipwhite(p); | |
3144 whatstr = "messages "; | |
3145 } | |
3146 else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0) | |
3147 { | |
3148 what = LC_CTYPE; | |
3149 name = skipwhite(p); | |
3150 whatstr = "ctype "; | |
3151 } | |
3152 else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0) | |
3153 { | |
3154 what = LC_TIME; | |
3155 name = skipwhite(p); | |
3156 whatstr = "time "; | |
3157 } | |
3158 } | |
3159 | |
3160 if (*name == NUL) | |
3161 { | |
3162 #ifndef LC_MESSAGES | |
3163 if (what == VIM_LC_MESSAGES) | |
3164 p = get_mess_env(); | |
3165 else | |
3166 #endif | |
3167 p = (char_u *)setlocale(what, NULL); | |
3168 if (p == NULL || *p == NUL) | |
3169 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
|
3170 smsg(_("Current %slanguage: \"%s\""), whatstr, p); |
7 | 3171 } |
3172 else | |
3173 { | |
3174 #ifndef LC_MESSAGES | |
3175 if (what == VIM_LC_MESSAGES) | |
3176 loc = ""; | |
3177 else | |
3178 #endif | |
1624 | 3179 { |
7 | 3180 loc = setlocale(what, (char *)name); |
1624 | 3181 #if defined(FEAT_FLOAT) && defined(LC_NUMERIC) |
3182 /* Make sure strtod() uses a decimal point, not a comma. */ | |
3183 setlocale(LC_NUMERIC, "C"); | |
3184 #endif | |
3185 } | |
7 | 3186 if (loc == NULL) |
15470
55ccc2d353bd
patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents:
15448
diff
changeset
|
3187 semsg(_("E197: Cannot set language to \"%s\""), name); |
7 | 3188 else |
3189 { | |
3190 #ifdef HAVE_NL_MSG_CAT_CNTR | |
3191 /* Need to do this for GNU gettext, otherwise cached translations | |
3192 * will be used again. */ | |
3193 extern int _nl_msg_cat_cntr; | |
3194 | |
3195 ++_nl_msg_cat_cntr; | |
3196 #endif | |
1222 | 3197 /* Reset $LC_ALL, otherwise it would overrule everything. */ |
7 | 3198 vim_setenv((char_u *)"LC_ALL", (char_u *)""); |
3199 | |
3200 if (what != LC_TIME) | |
3201 { | |
3202 /* Tell gettext() what to translate to. It apparently doesn't | |
3203 * use the currently effective locale. Also do this when | |
3204 * FEAT_GETTEXT isn't defined, so that shell commands use this | |
3205 * value. */ | |
3206 if (what == LC_ALL) | |
534 | 3207 { |
7 | 3208 vim_setenv((char_u *)"LANG", name); |
5027
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
3209 |
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
3210 /* Clear $LANGUAGE because GNU gettext uses it. */ |
5751284311f3
updated for version 7.3.1257
Bram Moolenaar <bram@vim.org>
parents:
4833
diff
changeset
|
3211 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
|
3212 # ifdef MSWIN |
534 | 3213 /* Apparently MS-Windows printf() may cause a crash when |
3214 * we give it 8-bit text while it's expecting text in the | |
3215 * current locale. This call avoids that. */ | |
3216 setlocale(LC_CTYPE, "C"); | |
3217 # endif | |
3218 } | |
7 | 3219 if (what != LC_CTYPE) |
3220 { | |
3221 char_u *mname; | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
3222 #ifdef MSWIN |
7 | 3223 mname = gettext_lang(name); |
3224 #else | |
3225 mname = name; | |
3226 #endif | |
3227 vim_setenv((char_u *)"LC_MESSAGES", mname); | |
3228 #ifdef FEAT_MULTI_LANG | |
3229 set_helplang_default(mname); | |
3230 #endif | |
3231 } | |
3232 } | |
3233 | |
3234 # ifdef FEAT_EVAL | |
3235 /* Set v:lang, v:lc_time and v:ctype to the final result. */ | |
3236 set_lang_var(); | |
3237 # endif | |
3149 | 3238 # ifdef FEAT_TITLE |
3239 maketitle(); | |
3240 # endif | |
7 | 3241 } |
3242 } | |
3243 } | |
3244 | |
3245 # if defined(FEAT_CMDL_COMPL) || defined(PROTO) | |
2849 | 3246 |
3247 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
|
3248 |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
3249 # ifndef MSWIN |
2849 | 3250 static int did_init_locales = FALSE; |
3251 | |
3252 /* Return an array of strings for all available locales + NULL for the | |
3253 * last element. Return NULL in case of error. */ | |
3254 static char_u ** | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3255 find_locales(void) |
2849 | 3256 { |
3257 garray_T locales_ga; | |
3258 char_u *loc; | |
3259 | |
3260 /* Find all available locales by running command "locale -a". If this | |
3261 * doesn't work we won't have completion. */ | |
3262 char_u *locale_a = get_cmd_output((char_u *)"locale -a", | |
5808 | 3263 NULL, SHELL_SILENT, NULL); |
2849 | 3264 if (locale_a == NULL) |
3265 return NULL; | |
3266 ga_init2(&locales_ga, sizeof(char_u *), 20); | |
3267 | |
3268 /* Transform locale_a string where each locale is separated by "\n" | |
3269 * into an array of locale strings. */ | |
3270 loc = (char_u *)strtok((char *)locale_a, "\n"); | |
3271 | |
3272 while (loc != NULL) | |
3273 { | |
3274 if (ga_grow(&locales_ga, 1) == FAIL) | |
3275 break; | |
3276 loc = vim_strsave(loc); | |
3277 if (loc == NULL) | |
3278 break; | |
3279 | |
3280 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc; | |
3281 loc = (char_u *)strtok(NULL, "\n"); | |
3282 } | |
3283 vim_free(locale_a); | |
3284 if (ga_grow(&locales_ga, 1) == FAIL) | |
3285 { | |
3286 ga_clear(&locales_ga); | |
3287 return NULL; | |
3288 } | |
3289 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL; | |
3290 return (char_u **)locales_ga.ga_data; | |
3291 } | |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3292 # endif |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3293 |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3294 /* |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3295 * 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
|
3296 */ |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3297 static void |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3298 init_locales(void) |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3299 { |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15842
diff
changeset
|
3300 # ifndef MSWIN |
10569
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3301 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
|
3302 { |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3303 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
|
3304 locales = find_locales(); |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3305 } |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3306 # endif |
0bf064e7917a
patch 8.0.0174: executing "locale -a" on MS-Windows needlessly
Christian Brabandt <cb@256bit.org>
parents:
10262
diff
changeset
|
3307 } |
2849 | 3308 |
3309 # if defined(EXITFREE) || defined(PROTO) | |
3310 void | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3311 free_locales(void) |
2849 | 3312 { |
3313 int i; | |
3314 if (locales != NULL) | |
3315 { | |
3316 for (i = 0; locales[i] != NULL; i++) | |
3317 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
|
3318 VIM_CLEAR(locales); |
2849 | 3319 } |
3320 } | |
3321 # endif | |
3322 | |
7 | 3323 /* |
3324 * Function given to ExpandGeneric() to obtain the possible arguments of the | |
3325 * ":language" command. | |
3326 */ | |
3327 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3328 get_lang_arg(expand_T *xp UNUSED, int idx) |
7 | 3329 { |
3330 if (idx == 0) | |
3331 return (char_u *)"messages"; | |
3332 if (idx == 1) | |
3333 return (char_u *)"ctype"; | |
3334 if (idx == 2) | |
3335 return (char_u *)"time"; | |
2849 | 3336 |
3337 init_locales(); | |
3338 if (locales == NULL) | |
3339 return NULL; | |
3340 return locales[idx - 3]; | |
3341 } | |
3342 | |
3343 /* | |
3344 * Function given to ExpandGeneric() to obtain the available locales. | |
3345 */ | |
3346 char_u * | |
7819
f86adafb28d4
commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents:
7807
diff
changeset
|
3347 get_locales(expand_T *xp UNUSED, int idx) |
2849 | 3348 { |
3349 init_locales(); | |
3350 if (locales == NULL) | |
3351 return NULL; | |
3352 return locales[idx]; | |
7 | 3353 } |
3354 # endif | |
3355 | |
3356 #endif |