annotate src/ex_cmds2.c @ 17744:4a3dca734d36 v8.1.1869

patch 8.1.1869: code for the argument list is spread out commit https://github.com/vim/vim/commit/4ad62155a1015751a6645aaecd94b02c94c8934b Author: Bram Moolenaar <Bram@vim.org> Date: Sat Aug 17 14:38:55 2019 +0200 patch 8.1.1869: code for the argument list is spread out Problem: Code for the argument list is spread out. Solution: Put argument list code in arglist.c. (Yegappan Lakshmanan, closes #4819)
author Bram Moolenaar <Bram@vim.org>
date Sat, 17 Aug 2019 14:45:04 +0200
parents ff097edaae89
children 04245f071792
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * ex_cmds2.c: some more functions for command line commands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 #include "version.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 * If 'autowrite' option set, try to write the file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 * Careful: autocommands may make "buf" invalid!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 {
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
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
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
409
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 if (!(p_aw || p_awa) || !p_write
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 #ifdef FEAT_QUICKFIX
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
412 /* never autowrite a "nofile" or "nowrite" buffer */
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
413 || bt_dontwrite(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 #endif
1069
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
415 || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
418 r = buf_write_all(buf, forceit);
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
419
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
420 /* Writing may succeed but the buffer still changed, e.g., when there is a
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
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
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
423 r = FAIL;
f628d19361d9 updated for version 7.0-195
vimboss
parents: 1061
diff changeset
424 return r;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 if (!(p_aw || p_awa) || !p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 buf = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 /*
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
453 * Return TRUE if buffer was changed and cannot be abandoned.
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
454 * For flags use the CCGD_ values.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
463
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 if ( !forceit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 && bufIsChanged(buf)
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
466 && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
467 && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 if ((p_confirm || cmdmod.confirm) && p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 buf_T *buf2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 int count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 if (bufIsChanged(buf2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 && (buf2->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 # ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 || cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 /* Autocommand deleted buffer, oops! It's not changed now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 return FALSE;
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
487
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 /* Autocommand deleted buffer, oops! It's not changed now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 return bufIsChanged(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 #endif
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
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
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 #if defined(FEAT_BROWSE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 * When wanting to write a file without a file name, ask the user for a name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 if (buf->b_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517
29
ac33b7c03fac updated for version 7.0018
vimboss
parents: 22
diff changeset
518 fname = do_browse(BROWSE_SAVE, (char_u *)_("Save As"),
ac33b7c03fac updated for version 7.0018
vimboss
parents: 22
diff changeset
519 NULL, NULL, NULL, NULL, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 if (setfname(buf, fname, NULL, TRUE) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 buf->b_flags |= BF_NOTEDITED;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 /*
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
531 * Ask the user what to do when abandoning a changed buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 * Must check 'write' option first!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2711
diff changeset
539 char_u buff[DIALOG_MSG_SIZE];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 int ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 buf_T *buf2;
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
542 exarg_T ea;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 if (checkall)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 ret = vim_dialog_yesnoallcancel(VIM_QUESTION, NULL, buff, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
553
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 if (ret == VIM_YES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 /* May get file name, when there is none */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 browse_save_fname(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 #endif
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
560 if (buf->b_fname != NULL && check_overwrite(&ea, buf,
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
561 buf->b_fname, buf->b_ffname, FALSE) == OK)
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
562 /* didn't hit Cancel */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 (void)buf_write_all(buf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 else if (ret == VIM_NO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 else if (ret == VIM_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 * Write all modified files that can be written.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 * Skip readonly buffers, these need to be confirmed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 * individually.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 if (bufIsChanged(buf2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 && (buf2->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 || cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 && !buf2->b_p_ro)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 /* May get file name, when there is none */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 browse_save_fname(buf2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 #endif
3486
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
593 if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
594 buf2->b_fname, buf2->b_ffname, FALSE) == OK)
f9a865d97614 updated for version 7.3.507
Bram Moolenaar <bram@vim.org>
parents: 3429
diff changeset
595 /* didn't hit Cancel */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 buf2 = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 else if (ret == VIM_DISCARDALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 * mark all buffers as unchanged
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 * Return TRUE if the buffer "buf" can be abandoned, either by making it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 * hidden, autowriting it or unloading it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 || !bufIsChanged(buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 || buf->b_nwindows > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 || autowrite(buf, forceit) == OK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 || forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
629 /*
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
630 * Add a buffer number to "bufnrs", unless it's already there.
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
631 */
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
634 {
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
635 int i;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
636
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
637 for (i = 0; i < *bufnump; ++i)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
638 if (bufnrs[i] == nr)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
639 return;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
640 bufnrs[*bufnump] = nr;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
641 *bufnump = *bufnump + 1;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
642 }
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
643
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 * Return TRUE if any buffer was changed and cannot be abandoned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 {
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
655 int ret = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 int save;
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
658 int i;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
659 int bufnum = 0;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
660 int bufcount = 0;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
661 int *bufnrs;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
662 tabpage_T *tp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
667 ++bufcount;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
668
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
669 if (bufcount == 0)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
670 return FALSE;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
673 if (bufnrs == NULL)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
674 return FALSE;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
675
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
676 /* curbuf */
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
680 FOR_ALL_WINDOWS(wp)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
681 if (wp->w_buffer != curbuf)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
682 add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
686 if (tp != curtab)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
687 for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
692 add_bufnum(bufnrs, &bufnum, buf->b_fnum);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
693
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
694 for (i = 0; i < bufnum; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 {
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
696 buf = buflist_findnr(bufnrs[i]);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
697 if (buf == NULL)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
698 continue;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
699 if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
714 if (check_changed(buf, (p_awa ? CCGD_AW : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
717 break; /* didn't save - still changes */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
721 if (i >= bufnum)
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
722 goto theend;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
725 ret = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 exiting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 * When ":confirm" used, don't give an error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 if (!(p_confirm || cmdmod.confirm))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 /* There must be a wait_return for this message, do_buffer()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 * may cause a redraw. But wait_return() is a no-op when vgetc()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 * is busy (Quit used from window menu), then make sure we don't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 * cause a scroll up. */
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
738 if (vgetc_busy > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 msg_row = cmdline_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3620
diff changeset
752 buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 save = no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 no_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 no_wait_return = save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 /* Try to find a window that contains the buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 if (buf != curbuf)
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
763 FOR_ALL_TAB_WINDOWS(tp, wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 if (wp->w_buffer == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
774 goto theend;
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
775 goto buf_found;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 }
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
777 buf_found:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 /* Open the changed buffer in the current window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782
3429
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
783 theend:
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
784 vim_free(bufnrs);
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
785 return ret;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 * return FAIL if there is no file name, OK if there is one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 * give error message for FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 if (curbuf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 * flush the contents of a buffer, unless it has no file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 buf_T *old_curbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 retval = (buf_write(buf, buf->b_ffname, buf->b_fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 (linenr_T)1, buf->b_ml.ml_line_count, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 FALSE, forceit, TRUE, FALSE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 if (curbuf != old_curbuf)
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
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
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
821 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 int i;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
832 win_T *wp;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
833 tabpage_T *tp;
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
834 buf_T *buf = curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 char_u *save_ei = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 #endif
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
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
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
857 /* Don't do syntax HL autocommands. Skipping the syntax file is a
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
858 * great speed improvement. */
f67f8a8d81ba updated for version 7.0043
vimboss
parents: 45
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 #endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
866 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
867 start_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
868 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 if (eap->cmdidx == CMD_windo
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
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
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
873 || !check_changed(curbuf, CCGD_AW
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
874 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5027
diff changeset
875 | CCGD_EXCMD))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 i = 0;
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
878 /* start at the eap->line1 argument/window/buffer */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
879 wp = firstwin;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
880 tp = first_tabpage;
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
881 switch (eap->cmdidx)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
882 {
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
883 case CMD_windo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
884 for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
885 i++;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
886 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
887 case CMD_tabdo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
888 for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
889 i++;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
890 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
891 case CMD_argdo:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
892 i = eap->line1 - 1;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
893 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
894 default:
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
895 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
896 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 /* set pcmark now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
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
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
902 || !buf->b_p_bl); buf = buf->b_next)
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
903 if (buf->b_fnum > eap->line2)
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
904 {
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
905 buf = NULL;
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
906 break;
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
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
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 listcmd_busy = TRUE; /* avoids setting pcmark below */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933
6641
ceda6d8af447 updated for version 7.4.646
Bram Moolenaar <bram@vim.org>
parents: 6474
diff changeset
934 while (!got_int && buf != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 if (eap->cmdidx == CMD_argdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 /* go to argument "i" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 if (i == ARGCOUNT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 /* Don't call do_argfile() when already there, it will try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 * reloading the file. */
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
943 if (curwin->w_arg_idx != i || !editing_arg_idx(curwin))
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
944 {
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
945 /* Clear 'shm' to avoid that the file message overwrites
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
946 * any output from the command. */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
947 p_shm_save = vim_strsave(p_shm);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
948 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 do_argfile(eap, i);
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
950 set_option_value((char_u *)"shm", 0L, p_shm_save, 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
951 vim_free(p_shm_save);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
952 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 if (curwin->w_arg_idx != i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 else if (eap->cmdidx == CMD_windo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 {
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
958 /* go to window "wp" */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
959 if (!win_valid(wp))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 break;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
961 win_goto(wp);
1115
11c004cc1a4d updated for version 7.0-241
vimboss
parents: 1069
diff changeset
962 if (curwin != wp)
11c004cc1a4d updated for version 7.0-241
vimboss
parents: 1069
diff changeset
963 break; /* something must be wrong */
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
964 wp = curwin->w_next;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
965 }
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
966 else if (eap->cmdidx == CMD_tabdo)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
967 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
968 /* go to window "tp" */
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
969 if (!valid_tabpage(tp))
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
970 break;
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
971 goto_tabpage_tp(tp, TRUE, TRUE);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 683
diff changeset
972 tp = tp->tp_next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 else if (eap->cmdidx == CMD_bufdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 /* Remember the number of the next listed buffer, in case
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 * ":bwipe" is used or autocommands do something strange. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 next_fnum = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 for (buf = curbuf->b_next; buf != NULL; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 if (buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 next_fnum = buf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
987 ++i;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
988
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 /* execute the command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 do_cmdline(eap->arg, eap->getline, eap->cookie,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 DOCMD_VERBOSE + DOCMD_NOWAIT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 if (eap->cmdidx == CMD_bufdo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 /* Done? */
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
996 if (next_fnum < 0 || next_fnum > eap->line2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 if (buf->b_fnum == next_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 break;
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1004
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1005 /* Go to the next buffer. Clear 'shm' to avoid that the file
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1006 * message overwrites any output from the command. */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1007 p_shm_save = vim_strsave(p_shm);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1008 set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum);
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1010 set_option_value((char_u *)"shm", 0L, p_shm_save, 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1011 vim_free(p_shm_save);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 if (curbuf->b_fnum != next_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 if (eap->cmdidx == CMD_windo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 /* required when 'scrollbind' has been set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 do_check_scrollbind(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 }
6474
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1043
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1044 if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1045 if (i+1 > eap->line2)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1046 break;
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1047 if (eap->cmdidx == CMD_argdo && i >= eap->line2)
a88d4dc02bf4 updated for version 7.4.566
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
1048 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 listcmd_busy = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1054 if (save_ei != NULL)
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
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
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
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
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
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
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
1085 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 #endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1087 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1088 end_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5808
diff changeset
1089 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 * ":compiler[!] {name}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 char_u *old_cur_comp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 /* List all compiler scripts. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 do_cmdline_cmd((char_u *)"echo globpath(&rtp, 'compiler/*.vim')");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 /* ) keep the indenter happy... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 /* ":compiler! {name}" sets global options */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 do_cmdline_cmd((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 "command -nargs=* CompilerSet set <args>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 /* ":compiler! {name}" sets local options.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 * To remain backwards compatible "current_compiler" is always
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 * used. A user's compiler plugin may set it, the distributed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 if (old_cur_comp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 old_cur_comp = vim_strsave(old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 do_cmdline_cmd((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 "command -nargs=* CompilerSet setlocal <args>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
72aefd4c1e0d updated for version 7.0046
vimboss
parents: 123
diff changeset
1135 do_unlet((char_u *)"b:current_compiler", TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 do_cmdline_cmd((char_u *)":delcommand CompilerSet");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 set_internal_string_var((char_u *)"b:current_compiler", p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 /* Restore "current_compiler" for ":compiler {name}". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 if (!eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 if (old_cur_comp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 vim_free(old_cur_comp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 {
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
1204 (void)do_source(fname, FALSE, DOSO_NONE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 char_u *rtp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 char_u *np;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 char_u *rtp_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 char_u *tail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 int num_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 char_u **files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 int did_one = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 #ifdef AMIGA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 struct Process *proc = (struct Process *)FindTask(0L);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 APTR save_winptr = proc->pr_WindowPtr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 /* Avoid a requester here for a volume that doesn't exist. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 proc->pr_WindowPtr = (APTR)-1L;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 /* Make a copy of 'runtimepath'. Invoking the callback may change the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 buf = alloc(MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 if (buf != NULL && rtp_copy != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1249 {
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1253 verbose_leave();
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1254 }
271
8d34af900bae updated for version 7.0072
vimboss
parents: 253
diff changeset
1255
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 /* Loop over all entries in 'runtimepath'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 /* Copy the path from 'runtimepath' to buf[]. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 add_pathsep(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 tail = buf + STRLEN(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 /* Loop over all patterns in "name" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 /* Append the pattern from "name" to buf[]. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 copy_option_part(&np, tail, (int)(MAXPATHL - (tail - buf)),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 "\t ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 if (p_verbose > 2)
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1297 {
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1300 verbose_leave();
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1301 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 /* Expand wildcards, invoke the callback for each match. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 for (i = 0; i < num_files; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 {
237
73354c21f1e4 updated for version 7.0066
vimboss
parents: 205
diff changeset
1309 (*callback)(files[i], cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 FreeWild(num_files, files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
1334 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 #ifdef AMIGA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 proc->pr_WindowPtr = save_winptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 return did_one ? OK : FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 * ":options"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 * ":source {fname}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 if (cmdmod.browse)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 char_u *fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966
29
ac33b7c03fac updated for version 7.0018
vimboss
parents: 22
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 cmd_source(fname, eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 cmd_source(eap->arg, eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 else if (eap != NULL && eap->forceit)
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
1988 /* ":source!": read Normal mode commands
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
1989 * Need to execute the commands directly. This is required at least
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
1990 * for:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 * - ":g" command busy
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 * - after ":argdo", ":windo" or ":bufdo"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 * - another command follows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 * - inside a loop
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 openscript(fname, global_busy || listcmd_busy || eap->nextcmd != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 || eap->cstack->cs_idx >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2002 /* ":source" read ex commands */
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 * ":source" and associated commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 * Structure used to store info for each sourced file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 * It is shared between do_source() and getsourceline().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 * This is required, because it needs to be handed to do_cmdline() and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 * sourcing can be done recursively.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 struct source_cookie
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 * Return the address holding the next breakpoint line for a source cookie.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 return &((struct source_cookie *)cookie)->breakpoint;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 * Return the address holding the debug tick for a source cookie.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 return &((struct source_cookie *)cookie)->dbg_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 * Return the nesting level for a source cookie.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 return ((struct source_cookie *)cookie)->level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 if (fd_tmp == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
286fd54c7ae3 patch 7.4.822
Bram Moolenaar <bram@vim.org>
parents: 6749
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 return fdopen(fd_tmp, READBIN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 * do_source: Read the file "fname" and execute its lines as EX commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 * This function may be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 * return FAIL if file could not be opened, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 struct source_cookie cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 char_u *save_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 linenr_T save_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 char_u *fname_exp;
1802
8978513bb5e3 updated for version 7.2-100
vimboss
parents: 1743
diff changeset
2114 char_u *firstline = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 int retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 int save_debug_break_level = debug_break_level;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2122 scriptitem_T *si = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 int stat_ok;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 #ifdef STARTUPTIME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 struct timeval tv_rel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 struct timeval tv_start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 #endif
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2132 #ifdef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2133 proftime_T wait_start;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 p = expand_env_save(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 fname_exp = fix_fname(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 if (fname_exp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 if (mch_isdir(fname_exp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149
1061
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2150 /* Apply SourceCmd autocommands, they should get the file and source it. */
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2151 if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL)
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2152 && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp,
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2153 FALSE, curbuf))
1515
8d8dc7e07999 updated for version 7.1-230
vimboss
parents: 1496
diff changeset
2154 {
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13302
diff changeset
2155 #ifdef FEAT_EVAL
1515
8d8dc7e07999 updated for version 7.1-230
vimboss
parents: 1496
diff changeset
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
8d8dc7e07999 updated for version 7.1-230
vimboss
parents: 1496
diff changeset
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
8d8dc7e07999 updated for version 7.1-230
vimboss
parents: 1496
diff changeset
2164 goto theend;
8d8dc7e07999 updated for version 7.1-230
vimboss
parents: 1496
diff changeset
2165 }
1061
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2166
b4d11ddb7303 updated for version 7.0-187
vimboss
parents: 944
diff changeset
2167 /* Apply SourcePre autocommands, they may get the file. */
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
2168 apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
2169
2052
057029bf3470 updated for version 7.2.338
Bram Moolenaar <bram@zimbu.org>
parents: 2051
diff changeset
2170 #ifdef USE_FOPEN_NOINH
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 cookie.fp = fopen_noinh_readbin((char *)fname_exp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 cookie.fp = mch_fopen((char *)fname_exp, READBIN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 if (cookie.fp == NULL && check_other)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 * Try again, replacing file name ".vimrc" by "_vimrc" or vice versa,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 * and ".exrc" by "_exrc" or vice versa.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 p = gettail(fname_exp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 if ((*p == '.' || *p == '_')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2183 && (STRICMP(p + 1, "vimrc") == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2184 || STRICMP(p + 1, "gvimrc") == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 || STRICMP(p + 1, "exrc") == 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 if (*p == '_')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 *p = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 cookie.fp = fopen_noinh_readbin((char *)fname_exp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 cookie.fp = mch_fopen((char *)fname_exp, READBIN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 if (cookie.fp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 if (p_verbose > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 {
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
2203 verbose_enter();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8fa8d7964cf1 updated for version 7.0073
vimboss
parents: 271
diff changeset
2208 sourcing_lnum, fname);
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
2209 verbose_leave();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 * The file exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 * - In verbose mode, give a message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 * - For a vimrc file, may want to set 'compatible', call vimrc_found().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 if (p_verbose > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 {
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
2221 verbose_enter();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8fa8d7964cf1 updated for version 7.0073
vimboss
parents: 271
diff changeset
2226 sourcing_lnum, fname);
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
2227 verbose_leave();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
2229 if (is_vimrc == DOSO_VIMRC)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
2230 vimrc_found(fname_exp, (char_u *)"MYVIMRC");
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
2231 else if (is_vimrc == DOSO_GVIMRC)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 794
diff changeset
2232 vimrc_found(fname_exp, (char_u *)"MYGVIMRC");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 #ifdef USE_CRNL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 /* If no automatic file format: Set default to CR-NL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 if (*p_ffs == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 cookie.fileformat = EOL_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 cookie.fileformat = EOL_UNKNOWN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 cookie.error = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 cookie.finished = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 * Check if this script has a breakpoint.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 cookie.breakpoint = dbg_find_breakpoint(TRUE, fname_exp, (linenr_T)0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 cookie.fname = fname_exp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 cookie.dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 cookie.level = ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 * Keep the sourcing name/lnum, for recursive calls.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 save_sourcing_name = sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 sourcing_name = fname_exp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 save_sourcing_lnum = sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 sourcing_lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 #ifdef FEAT_EVAL
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2272 # ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2273 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2274 prof_child_enter(&wait_start); /* entering a child now */
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2275 # endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2276
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2277 /* Don't use local function variables, if called from a function.
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 # ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 stat_ok = (mch_stat((char *)fname_exp, &st) >= 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2296 if (si->sn_name != NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 && (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 # ifdef UNIX
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 154
diff changeset
2299 /* Compare dev/ino when possible, it catches symbolic
6df0106fc595 updated for version 7.0049
vimboss
parents: 154
diff changeset
2300 * links. Also compare file names, the inode may change
6df0106fc595 updated for version 7.0049
vimboss
parents: 154
diff changeset
2301 * when the file was edited. */
1882
c8b87fa14d27 updated for version 7.2-179
vimboss
parents: 1876
diff changeset
2302 ((stat_ok && si->sn_dev_valid)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2303 && (si->sn_dev == st.st_dev
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2304 && si->sn_ino == st.st_ino)) ||
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 # endif
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2306 fnamecmp(si->sn_name, fname_exp) == 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 break;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2317 ++script_items.ga_len;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2318 SCRIPT_ITEM(script_items.ga_len).sn_name = NULL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2319 # ifdef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2320 SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2321 # endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 # ifdef UNIX
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2327 if (stat_ok)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2328 {
1882
c8b87fa14d27 updated for version 7.2-179
vimboss
parents: 1876
diff changeset
2329 si->sn_dev_valid = TRUE;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2330 si->sn_dev = st.st_dev;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2331 si->sn_ino = st.st_ino;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2332 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2333 else
1882
c8b87fa14d27 updated for version 7.2-179
vimboss
parents: 1876
diff changeset
2334 si->sn_dev_valid = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 # endif
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2336
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2341 # ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2342 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2343 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2344 int forceit;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2345
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2346 /* Check if we do profiling for this script. */
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2347 if (!si->sn_prof_on && has_profiling(TRUE, si->sn_name, &forceit))
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2348 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2349 script_do_profile(si);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2350 si->sn_pr_force = forceit;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2351 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2352 if (si->sn_prof_on)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2353 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2354 ++si->sn_pr_count;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2355 profile_start(&si->sn_pr_start);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2356 profile_zero(&si->sn_pr_children);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2357 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2358 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2359 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 * Call do_cmdline, which will call getsourceline() to get the lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 */
1802
8978513bb5e3 updated for version 7.2-100
vimboss
parents: 1743
diff changeset
2384 do_cmdline(firstline, getsourceline, (void *)&cookie,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 retval = OK;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2387
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2388 #ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2389 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2390 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2393 if (si->sn_prof_on)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2394 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2395 profile_end(&si->sn_pr_start);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2396 profile_sub_wait(&wait_start, &si->sn_pr_start);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2397 profile_add(&si->sn_pr_total, &si->sn_pr_start);
720
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
2398 profile_self(&si->sn_pr_self, &si->sn_pr_start,
e180933b876a updated for version 7.0219
vimboss
parents: 716
diff changeset
2399 &si->sn_pr_children);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2400 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2401 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2402 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406 sourcing_name = save_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 sourcing_lnum = save_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 if (p_verbose > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 {
294
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
1c1cbdc42f75 updated for version 7.0077
vimboss
parents: 274
diff changeset
2414 verbose_leave();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 * After a "finish" in debug mode, need to break at first command of next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431 * sourced file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 if (save_debug_break_level > ex_nesting_level
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 && debug_break_level == ex_nesting_level)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 ++debug_break_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2438 #ifdef FEAT_EVAL
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2442 # ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2443 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2444 prof_child_exit(&wait_start); /* leaving a child now */
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2445 # endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2446 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2447 fclose(cookie.fp);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2448 vim_free(cookie.nextline);
1802
8978513bb5e3 updated for version 7.2-100
vimboss
parents: 1743
diff changeset
2449 vim_free(firstline);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2450 convert_setup(&cookie.conv, NULL, NULL);
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 theend:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 vim_free(fname_exp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 #if defined(FEAT_EVAL) || defined(PROTO)
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2461
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 * ":scriptnames"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2483 for (i = 1; i <= script_items.ga_len && !got_int; ++i)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2484 if (SCRIPT_ITEM(i).sn_name != NULL)
2921
69b90e43b728 updated for version 7.3.233
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
2485 {
69b90e43b728 updated for version 7.3.233
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
2486 home_replace(NULL, SCRIPT_ITEM(i).sn_name,
69b90e43b728 updated for version 7.3.233
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
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
b35844f3eb49 updated for version 7.3.480
Bram Moolenaar <bram@vim.org>
parents: 3378
diff changeset
2489 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 * Fix slashes in the list of script names for 'shellslash'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2501 for (i = 1; i <= script_items.ga_len; ++i)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2502 if (SCRIPT_ITEM(i).sn_name != NULL)
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2503 slash_adjust(SCRIPT_ITEM(i).sn_name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 * Get a pointer to a script name. Used for ":verbose set".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 if (id == SID_MODELINE)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2514 return (char_u *)_("modeline");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 if (id == SID_CMDARG)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2516 return (char_u *)_("--cmd argument");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 if (id == SID_CARG)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2518 return (char_u *)_("-c argument");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 if (id == SID_ENV)
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2520 return (char_u *)_("environment variable");
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2521 if (id == SID_ERROR)
9364d114ed8d updated for version 7.0204
vimboss
parents: 673
diff changeset
2522 return (char_u *)_("error handler");
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2523 return SCRIPT_ITEM(id).sn_name;
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2524 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2525
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2526 # if defined(EXITFREE) || defined(PROTO)
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
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
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2529 {
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2530 int i;
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2531
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2532 for (i = script_items.ga_len; i > 0; --i)
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2533 vim_free(SCRIPT_ITEM(i).sn_name);
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2534 ga_clear(&script_items);
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2535 }
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2536 # endif
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 314
diff changeset
2537
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 * Get one full line from a sourced file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550 * Called by do_cmdline() when it's called from do_source().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 * Return a pointer to the line in allocated memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 * Return NULL for end-of-file or some error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 struct source_cookie *sp = (struct source_cookie *)cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 char_u *line;
3336
afbf45d85496 updated for version 7.3.435
Bram Moolenaar <bram@vim.org>
parents: 3332
diff changeset
2560 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 /* If breakpoints have been added/deleted need to check for it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 if (sp->dbg_tick < debug_tick)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 sp->dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2569 # ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2570 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2571 script_line_end();
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2572 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 * Get current line. If there is a read-ahead line, use it, otherwise get
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 * one now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 if (sp->finished)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 line = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 else if (sp->nextline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 line = get_one_sourceline(sp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 line = sp->nextline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
d292c40ca788 updated for version 7.0060
vimboss
parents: 177
diff changeset
2591 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 161
diff changeset
2592 #ifdef FEAT_PROFILE
790
c8680debe1cc updated for version 7.0230
vimboss
parents: 720
diff changeset
2593 if (line != NULL && do_profiling == PROF_YES)
205
d292c40ca788 updated for version 7.0060
vimboss
parents: 177
diff changeset
2594 script_line_start();
d292c40ca788 updated for version 7.0060
vimboss
parents: 177
diff changeset
2595 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 /* Only concatenate lines starting with a \ when 'cpoptions' doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
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
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 {
3332
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2613 garray_T ga;
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2614
3378
e6392f2aed4c updated for version 7.3.455
Bram Moolenaar <bram@vim.org>
parents: 3336
diff changeset
2615 ga_init2(&ga, (int)sizeof(char_u), 400);
3332
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
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
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2619 for (;;)
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2620 {
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2621 vim_free(sp->nextline);
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2622 sp->nextline = get_one_sourceline(sp);
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2623 if (sp->nextline == NULL)
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2624 break;
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
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
e6392f2aed4c updated for version 7.3.455
Bram Moolenaar <bram@vim.org>
parents: 3336
diff changeset
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
e6392f2aed4c updated for version 7.3.455
Bram Moolenaar <bram@vim.org>
parents: 3336
diff changeset
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
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2641 }
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2642 ga_append(&ga, NUL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 vim_free(line);
3332
8a731d7f0664 updated for version 7.3.433
Bram Moolenaar <bram@vim.org>
parents: 3312
diff changeset
2644 line = ga.ga_data;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 if (line != NULL && sp->conv.vc_type != CONV_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 {
3336
afbf45d85496 updated for version 7.3.435
Bram Moolenaar <bram@vim.org>
parents: 3332
diff changeset
2650 char_u *s;
afbf45d85496 updated for version 7.3.435
Bram Moolenaar <bram@vim.org>
parents: 3332
diff changeset
2651
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 /* Convert the encoding of the script line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 s = string_convert(&sp->conv, line, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 if (s != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 vim_free(line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 line = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 /* Did we encounter a breakpoint? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 if (sp->breakpoint != 0 && sp->breakpoint <= sourcing_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 dbg_breakpoint(sp->fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 /* Find next breakpoint. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 sp->dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 return line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 garray_T ga;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 #ifdef USE_CRNL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 int has_cr; /* CR-LF found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 int have_read = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 /* use a growarray to store the sourced line */
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
2688 ga_init2(&ga, 1, 250);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 * Loop until there is a finished line (or end-of-file).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 {
154
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
2696 /* make room to read at least 120 (more) characters */
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
2697 if (ga_grow(&ga, 120) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 buf = (char_u *)ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
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
1a145815483e updated for version 7.0047
vimboss
parents: 148
diff changeset
2704 len = ga.ga_len + (int)STRLEN(buf + ga.ga_len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705 #ifdef USE_CRNL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 /* Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 * CTRL-Z by its own, or after a NL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 if ( (len == 1 || (len >= 2 && buf[len - 2] == '\n'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 && sp->fileformat == EOL_DOS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 && buf[len - 1] == Ctrl_Z)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 buf[len - 1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 have_read = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 ga.ga_len = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 /* If the line was longer than the buffer, read more. */
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
2721 if (ga.ga_maxlen - ga.ga_len == 1 && buf[len - 1] != '\n')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 if (len >= 1 && buf[len - 1] == '\n') /* remove trailing NL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 #ifdef USE_CRNL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 has_cr = (len >= 2 && buf[len - 2] == '\r');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 if (sp->fileformat == EOL_UNKNOWN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 if (has_cr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 sp->fileformat = EOL_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 sp->fileformat = EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 if (sp->fileformat == EOL_DOS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 if (has_cr) /* replace trailing CR */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 buf[len - 2] = '\n';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 --len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 --ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 else /* lines like ":map xx yy^M" will have failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 if (!sp->error)
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
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
3ba373b54370 updated for version 7.0008
vimboss
parents: 15
diff changeset
2750 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 sp->error = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 sp->fileformat = EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 /* The '\n' is escaped if there is an odd number of ^V's just
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 * before it, first set "c" just before the 'V's and then check
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 * len&c parities (is faster than ((len-c)%2 == 0)) -- Acevedo */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 for (c = len - 2; c >= 0 && buf[c] == Ctrl_V; c--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 if ((len & 1) != (c & 1)) /* escaped NL, read more */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767 buf[len - 1] = NUL; /* remove the NL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2771 * Check for ^C here now and then, so recursive :so can be broken.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2772 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2773 line_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2774 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2775 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 if (have_read)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 return (char_u *)ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 vim_free(ga.ga_data);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 * ":scriptencoding": Set encoding conversion for a sourced script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 struct source_cookie *sp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 if (!getline_equal(eap->getline, eap->cookie, getsourceline))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 if (*eap->arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 name = enc_canonize(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 if (name == NULL) /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 name = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 /* Setup for conversion from the specified encoding to 'encoding'. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 sp = (struct source_cookie *)getline_cookie(eap->getline, eap->cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 convert_setup(&sp->conv, name, p_enc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 if (name != eap->arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 #if defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 * ":finish": Mark a sourced file as finished.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 if (getline_equal(eap->getline, eap->cookie, getsourceline))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 do_finish(eap, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 * Mark a sourced file as finished. Possibly makes the ":finish" pending.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 * Also called for a pending finish at the ":endtry" or after returning from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 * an extra do_cmdline(). "reanimate" is used in the latter case.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 if (reanimate)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 ((struct source_cookie *)getline_cookie(eap->getline,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 eap->cookie))->finished = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 * Cleanup (and inactivate) conditionals, but stop when a try conditional
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 * not in its finally clause (which then is to be executed next) is found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 * In this case, make the ":finish" pending for execution at the ":endtry".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 * Otherwise, finish normally.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 idx = cleanup_conditionals(eap->cstack, 0, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 if (idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 eap->cstack->cs_pending[idx] = CSTP_FINISH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878 report_make_pending(CSTP_FINISH, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2879 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 ((struct source_cookie *)getline_cookie(eap->getline,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 eap->cookie))->finished = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 * Return TRUE when a sourced file had the ":finish" command: Don't give error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 * message for missing ":endif".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 * Return FALSE when not sourcing a file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 835
diff changeset
2896 return (getline_equal(fgetline, cookie, getsourceline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 && ((struct source_cookie *)getline_cookie(
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 835
diff changeset
2898 fgetline, cookie))->finished);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 * ":checktime [buffer]"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 int save_no_check_timestamps = no_check_timestamps;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 no_check_timestamps = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 if (eap->addr_count == 0) /* default is all buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 check_timestamps(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 buf = buflist_findnr((int)eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 if (buf != NULL) /* cannot happen? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 (void)buf_check_timestamp(buf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 no_check_timestamps = save_no_check_timestamps;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 if (loc != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
2939 /* setocale() returns something like "LC_COLLATE=<name>;LC_..." when
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
2940 * one of the values (e.g., LC_CTYPE) differs. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 p = vim_strchr(loc, '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 loc = ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 while (*p != NUL) /* remove trailing newline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 {
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
2947 if (*p < ' ' || *p == ';')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 return loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 * On MS-Windows locale names are strings like "German_Germany.1252", but
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 * gettext expects "de". Try to translate one into another here for a few
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 * supported languages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 static char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 gettext_lang(char_u *name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 static char *(mtable[]) = {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 "afrikaans", "af",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 "czech", "cs",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 "dutch", "nl",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 "german", "de",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 "english_united kingdom", "en_GB",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 "spanish", "es",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 "french", "fr",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 "italian", "it",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 "japanese", "ja",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 "korean", "ko",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 "norwegian", "no",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 "polish", "pl",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 "russian", "ru",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 "slovak", "sk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 "swedish", "sv",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 "ukrainian", "uk",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 "chinese_china", "zh_CN",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 "chinese_taiwan", "zh_TW",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 NULL};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 for (i = 0; mtable[i] != NULL; i += 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 return name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 #if defined(FEAT_MULTI_LANG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 * Obtain the current messages language. Used to set the default for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 * 'helplang'. May return NULL or an empty string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 /* This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
823
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
3026 * may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
3027 * and LC_MONETARY may be set differently for a Japanese working in the
9ab23f1e137f updated for version 7.0c12
vimboss
parents: 819
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 p = mch_getenv((char_u *)"LANG");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 p = gettext_lang(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046
45
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
3047 /* Complicated #if; matches with where get_mess_env() is used below. */
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
3048 #if (defined(FEAT_EVAL) && !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
3049 && defined(LC_MESSAGES))) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
3050 || ((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
e474bae3795f updated for version 7.0027
vimboss
parents: 41
diff changeset
3051 && !defined(LC_MESSAGES))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 * Get the language used for messages from the environment.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 p = mch_getenv((char_u *)"LC_ALL");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 p = mch_getenv((char_u *)"LC_MESSAGES");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 p = mch_getenv((char_u *)"LANG");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 if (p != NULL && VIM_ISDIGIT(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 #if defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 * Set the "v:lang" variable according to the current locale setting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 * Also do "v:lc_time"and "v:ctype".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 char_u *loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 /* setlocale() not supported: use the default value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 loc = (char_u *)"C";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 set_vim_var_string(VV_CTYPE, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 /* When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 loc = get_mess_env();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 set_vim_var_string(VV_LANG, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110 set_vim_var_string(VV_LC_TIME, loc, -1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 * ":language": Set the language (locale).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 char *loc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 int what = LC_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 char *whatstr = "";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126 #ifdef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127 # define VIM_LC_MESSAGES LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 # define VIM_LC_MESSAGES 6789
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 name = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 /* Check for "messages {name}", "ctype {name}" or "time {name}" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 * Allow abbreviation, but require at least 3 characters to avoid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 * confusion with a two letter language name "me" or "ct". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 what = VIM_LC_MESSAGES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 whatstr = "messages ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 else if (STRNICMP(eap->arg, "ctype", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 what = LC_CTYPE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 whatstr = "ctype ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 else if (STRNICMP(eap->arg, "time", p - eap->arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 what = LC_TIME;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 name = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 whatstr = "time ";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 if (*name == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 #ifndef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 if (what == VIM_LC_MESSAGES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 p = get_mess_env();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 p = (char_u *)setlocale(what, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 if (p == NULL || *p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174 #ifndef LC_MESSAGES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3175 if (what == VIM_LC_MESSAGES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3176 loc = "";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 #endif
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3179 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 loc = setlocale(what, (char *)name);
1624
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3181 #if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3182 /* Make sure strtod() uses a decimal point, not a comma. */
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3183 setlocale(LC_NUMERIC, "C");
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3184 #endif
18ee39301b82 updated for version 7.2a
vimboss
parents: 1517
diff changeset
3185 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3189 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190 #ifdef HAVE_NL_MSG_CAT_CNTR
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 /* Need to do this for GNU gettext, otherwise cached translations
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3192 * will be used again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3193 extern int _nl_msg_cat_cntr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3195 ++_nl_msg_cat_cntr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3196 #endif
1222
756bed568f5d updated for version 7.1b
vimboss
parents: 1115
diff changeset
3197 /* Reset $LC_ALL, otherwise it would overrule everything. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3198 vim_setenv((char_u *)"LC_ALL", (char_u *)"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3200 if (what != LC_TIME)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3202 /* Tell gettext() what to translate to. It apparently doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3203 * use the currently effective locale. Also do this when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3204 * FEAT_GETTEXT isn't defined, so that shell commands use this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3205 * value. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3206 if (what == LC_ALL)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3207 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3213 /* Apparently MS-Windows printf() may cause a crash when
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3214 * we give it 8-bit text while it's expecting text in the
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3215 * current locale. This call avoids that. */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3216 setlocale(LC_CTYPE, "C");
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3217 # endif
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 531
diff changeset
3218 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3219 if (what != LC_CTYPE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 mname = gettext_lang(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 mname = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3227 vim_setenv((char_u *)"LC_MESSAGES", mname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229 set_helplang_default(mname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 /* Set v:lang, v:lc_time and v:ctype to the final result. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 set_lang_var();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 # endif
3149
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
3238 # ifdef FEAT_TITLE
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
3239 maketitle();
35f098371af6 updated for version 7.3.345
Bram Moolenaar <bram@vim.org>
parents: 2921
diff changeset
3240 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3246
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3250 static int did_init_locales = FALSE;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3251
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3252 /* Return an array of strings for all available locales + NULL for the
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3253 * last element. Return NULL in case of error. */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3256 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3257 garray_T locales_ga;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3258 char_u *loc;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3259
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3260 /* Find all available locales by running command "locale -a". If this
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3261 * doesn't work we won't have completion. */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3262 char_u *locale_a = get_cmd_output((char_u *)"locale -a",
5808
e5f1f2ea0b4a updated for version 7.4.248
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
3263 NULL, SHELL_SILENT, NULL);
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3264 if (locale_a == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3265 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3266 ga_init2(&locales_ga, sizeof(char_u *), 20);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3267
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3268 /* Transform locale_a string where each locale is separated by "\n"
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3269 * into an array of locale strings. */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3270 loc = (char_u *)strtok((char *)locale_a, "\n");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3271
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3272 while (loc != NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3273 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3274 if (ga_grow(&locales_ga, 1) == FAIL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3275 break;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3276 loc = vim_strsave(loc);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3277 if (loc == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3278 break;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3279
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3280 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3281 loc = (char_u *)strtok(NULL, "\n");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3282 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3283 vim_free(locale_a);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3284 if (ga_grow(&locales_ga, 1) == FAIL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3285 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3286 ga_clear(&locales_ga);
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3287 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3288 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3289 ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3290 return (char_u **)locales_ga.ga_data;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3308
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3309 # if defined(EXITFREE) || defined(PROTO)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3312 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3313 int i;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3314 if (locales != NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3315 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3316 for (i = 0; locales[i] != NULL; i++)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3319 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3320 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3321 # endif
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3322
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 * Function given to ExpandGeneric() to obtain the possible arguments of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 * ":language" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 if (idx == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331 return (char_u *)"messages";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 if (idx == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 return (char_u *)"ctype";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 if (idx == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 return (char_u *)"time";
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3336
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3337 init_locales();
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3338 if (locales == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3339 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3340 return locales[idx - 3];
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3341 }
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3342
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3343 /*
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3344 * Function given to ExpandGeneric() to obtain the available locales.
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3345 */
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
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
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3348 {
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3349 init_locales();
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3350 if (locales == NULL)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3351 return NULL;
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
3352 return locales[idx];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3356 #endif