Mercurial > vim
annotate src/scriptfile.c @ 18991:847cc7932c42 v8.2.0056
patch 8.2.0056: execution stack is incomplete and inefficient
Commit: https://github.com/vim/vim/commit/1a47ae32cdc19b0fd5a82e19fe5fddf45db1a506
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 29 23:04:25 2019 +0100
patch 8.2.0056: execution stack is incomplete and inefficient
Problem: Execution stack is incomplete and inefficient.
Solution: Introduce a proper execution stack and use it instead of
sourcing_name/sourcing_lnum. Create a string only when used.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 29 Dec 2019 23:15:04 +0100 |
parents | b5b2e3b824c2 |
children | dcbc559510f6 |
rev | line source |
---|---|
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * scriptfile.c: functions for dealing with the runtime directories/files |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
16 #if defined(FEAT_EVAL) || defined(PROTO) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
17 // The names of packages that once were loaded are remembered. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
18 static garray_T ga_loaded = {0, 0, sizeof(char_u *), 4, NULL}; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
19 #endif |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
20 |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
21 /* |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
22 * Initialize the execution stack. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
23 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
24 void |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
25 estack_init(void) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
26 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
27 estack_T *entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
28 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
29 if (ga_grow(&exestack, 10) == FAIL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
30 mch_exit(0); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
31 entry = ((estack_T *)exestack.ga_data) + exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
32 entry->es_type = ETYPE_TOP; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
33 entry->es_name = NULL; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
34 entry->es_lnum = 0; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
35 entry->es_info.ufunc = NULL; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
36 ++exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
37 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
38 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
39 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
40 * Add an item to the execution stack. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
41 * Returns the new entry or NULL when out of memory. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
42 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
43 estack_T * |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
44 estack_push(etype_T type, char_u *name, long lnum) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
45 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
46 estack_T *entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
47 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
48 // If memory allocation fails then we'll pop more than we push, eventually |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
49 // at the top level it will be OK again. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
50 if (ga_grow(&exestack, 1) == OK) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
51 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
52 entry = ((estack_T *)exestack.ga_data) + exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
53 entry->es_type = type; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
54 entry->es_name = name; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
55 entry->es_lnum = lnum; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
56 entry->es_info.ufunc = NULL; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
57 ++exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
58 return entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
59 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
60 return NULL; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
61 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
62 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
63 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
64 * Add a user function to the execution stack. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
65 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
66 void |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
67 estack_push_ufunc(etype_T type, ufunc_T *ufunc, long lnum) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
68 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
69 estack_T *entry = estack_push(type, |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
70 ufunc->uf_name_exp != NULL |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
71 ? ufunc->uf_name_exp : ufunc->uf_name, lnum); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
72 if (entry != NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
73 entry->es_info.ufunc = ufunc; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
74 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
75 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
76 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
77 * Take an item off of the execution stack. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
78 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
79 void |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
80 estack_pop(void) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
81 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
82 if (exestack.ga_len > 1) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
83 --exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
84 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
85 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
86 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
87 * Get the current value for <sfile> in allocated memory. |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
88 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
89 char_u * |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
90 estack_sfile(void) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
91 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
92 int len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
93 int idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
94 estack_T *entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
95 char *res; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
96 int done; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
97 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
98 entry = ((estack_T *)exestack.ga_data) + exestack.ga_len - 1; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
99 if (entry->es_name == NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
100 return NULL; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
101 if (entry->es_info.ufunc == NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
102 return vim_strsave(entry->es_name); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
103 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
104 // For a function we compose the call stack, as it was done in the past: |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
105 // "function One[123]..Two[456]..Three" |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
106 len = STRLEN(entry->es_name) + 10; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
107 for (idx = exestack.ga_len - 2; idx >= 0; --idx) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
108 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
109 entry = ((estack_T *)exestack.ga_data) + idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
110 if (entry->es_name == NULL || entry->es_info.ufunc == NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
111 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
112 ++idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
113 break; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
114 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
115 len += STRLEN(entry->es_name) + 15; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
116 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
117 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
118 res = (char *)alloc(len); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
119 if (res != NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
120 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
121 STRCPY(res, "function "); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
122 while (idx < exestack.ga_len - 1) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
123 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
124 done = STRLEN(res); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
125 entry = ((estack_T *)exestack.ga_data) + idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
126 vim_snprintf(res + done, len - done, "%s[%ld]..", |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
127 entry->es_name, entry->es_lnum); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
128 ++idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
129 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
130 done = STRLEN(res); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
131 entry = ((estack_T *)exestack.ga_data) + idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
132 vim_snprintf(res + done, len - done, "%s", entry->es_name); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
133 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
134 return (char_u *)res; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
135 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
136 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
137 /* |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
138 * ":runtime [what] {name}" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
139 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
140 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
141 ex_runtime(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
142 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
143 char_u *arg = eap->arg; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
144 char_u *p = skiptowhite(arg); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
145 int len = (int)(p - arg); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
146 int flags = eap->forceit ? DIP_ALL : 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
147 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
148 if (STRNCMP(arg, "START", len) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
149 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
150 flags += DIP_START + DIP_NORTP; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
151 arg = skipwhite(arg + len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
152 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
153 else if (STRNCMP(arg, "OPT", len) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
154 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
155 flags += DIP_OPT + DIP_NORTP; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
156 arg = skipwhite(arg + len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
157 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
158 else if (STRNCMP(arg, "PACK", len) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
159 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
160 flags += DIP_START + DIP_OPT + DIP_NORTP; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
161 arg = skipwhite(arg + len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
162 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
163 else if (STRNCMP(arg, "ALL", len) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
164 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
165 flags += DIP_START + DIP_OPT; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
166 arg = skipwhite(arg + len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
167 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
168 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
169 source_runtime(arg, flags); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
170 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
171 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
172 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
173 source_callback(char_u *fname, void *cookie UNUSED) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
174 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
175 (void)do_source(fname, FALSE, DOSO_NONE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
176 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
177 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
178 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 * Find the file "name" in all directories in "path" and invoke |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
180 * "callback(fname, cookie)". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 * "name" can contain wildcards. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 * When "flags" has DIP_ALL: source all files, otherwise only the first one. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 * When "flags" has DIP_DIR: find directories instead of files. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 * When "flags" has DIP_ERR: give an error message if there is no match. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 * return FAIL when no file could be sourced, OK otherwise. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 do_in_path( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 char_u *path, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
191 char_u *name, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
193 void (*callback)(char_u *fname, void *ck), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
194 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
195 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 char_u *rtp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 char_u *np; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 char_u *buf; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 char_u *rtp_copy; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 char_u *tail; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 int num_files; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 char_u **files; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
204 int did_one = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 #ifdef AMIGA |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 struct Process *proc = (struct Process *)FindTask(0L); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
207 APTR save_winptr = proc->pr_WindowPtr; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 // Avoid a requester here for a volume that doesn't exist. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
210 proc->pr_WindowPtr = (APTR)-1L; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
212 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
213 // Make a copy of 'runtimepath'. Invoking the callback may change the |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
214 // value. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
215 rtp_copy = vim_strsave(path); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 buf = alloc(MAXPATHL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
217 if (buf != NULL && rtp_copy != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
218 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
219 if (p_verbose > 1 && name != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
220 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
221 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
222 smsg(_("Searching for \"%s\" in \"%s\""), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
223 (char *)name, (char *)path); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
224 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
225 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
227 // Loop over all entries in 'runtimepath'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
228 rtp = rtp_copy; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
229 while (*rtp != NUL && ((flags & DIP_ALL) || !did_one)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
230 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 size_t buflen; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
232 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
233 // Copy the path from 'runtimepath' to buf[]. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
234 copy_option_part(&rtp, buf, MAXPATHL, ","); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
235 buflen = STRLEN(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
236 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
237 // Skip after or non-after directories. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
238 if (flags & (DIP_NOAFTER | DIP_AFTER)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
239 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
240 int is_after = buflen >= 5 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
241 && STRCMP(buf + buflen - 5, "after") == 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
242 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 if ((is_after && (flags & DIP_NOAFTER)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
244 || (!is_after && (flags & DIP_AFTER))) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
246 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
248 if (name == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
249 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
250 (*callback)(buf, (void *) &cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 if (!did_one) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 did_one = (cookie == NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
254 else if (buflen + STRLEN(name) + 2 < MAXPATHL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
255 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 add_pathsep(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 tail = buf + STRLEN(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 // Loop over all patterns in "name" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 np = name; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 while (*np != NUL && ((flags & DIP_ALL) || !did_one)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
263 // Append the pattern from "name" to buf[]. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 copy_option_part(&np, tail, (int)(MAXPATHL - (tail - buf)), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 "\t "); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
267 if (p_verbose > 2) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 smsg(_("Searching for \"%s\""), buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
274 // Expand wildcards, invoke the callback for each match. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 if (gen_expand_wildcards(1, &buf, &num_files, &files, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 (flags & DIP_DIR) ? EW_DIR : EW_FILE) == OK) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
278 for (i = 0; i < num_files; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 (*callback)(files[i], cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
281 did_one = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 if (!(flags & DIP_ALL)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
283 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
284 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
285 FreeWild(num_files, files); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
286 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
287 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 vim_free(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 vim_free(rtp_copy); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 if (!did_one && name != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
295 char *basepath = path == p_rtp ? "runtimepath" : "packpath"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 if (flags & DIP_ERR) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 semsg(_(e_dirnotf), basepath, name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
299 else if (p_verbose > 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
300 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
301 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
302 smsg(_("not found in '%s': \"%s\""), basepath, name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
303 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
304 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
306 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 #ifdef AMIGA |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
308 proc->pr_WindowPtr = save_winptr; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
310 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 return did_one ? OK : FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
313 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
314 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 * Find "name" in "path". When found, invoke the callback function for |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 * it: callback(fname, "cookie") |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 * When "flags" has DIP_ALL repeat for all matches, otherwise only the first |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 * one is used. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 * Returns OK when at least one match found, FAIL otherwise. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 * If "name" is NULL calls callback for each entry in "path". Cookie is |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
322 * passed by reference in this case, setting it to NULL indicates that callback |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 * has done its job. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
324 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
325 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
326 do_in_path_and_pp( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
327 char_u *path, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 char_u *name, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
329 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
330 void (*callback)(char_u *fname, void *ck), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
331 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
332 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
333 int done = FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
334 char_u *s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
335 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
336 char *start_dir = "pack/*/start/*/%s"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
337 char *opt_dir = "pack/*/opt/*/%s"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
338 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 if ((flags & DIP_NORTP) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 done = do_in_path(path, name, flags, callback, cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
341 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
342 if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
343 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
344 len = (int)(STRLEN(start_dir) + STRLEN(name)); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
345 s = alloc(len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
346 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
347 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
348 vim_snprintf((char *)s, len, start_dir, name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
349 done = do_in_path(p_pp, s, flags, callback, cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
350 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
351 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
352 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
353 if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
354 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
355 len = (int)(STRLEN(opt_dir) + STRLEN(name)); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
356 s = alloc(len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
357 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
358 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
359 vim_snprintf((char *)s, len, opt_dir, name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
360 done = do_in_path(p_pp, s, flags, callback, cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
361 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
362 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
363 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
364 return done; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
365 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
366 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
367 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
368 * Just like do_in_path_and_pp(), using 'runtimepath' for "path". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
369 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
370 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
371 do_in_runtimepath( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
372 char_u *name, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
373 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
374 void (*callback)(char_u *fname, void *ck), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
375 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
376 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
377 return do_in_path_and_pp(p_rtp, name, flags, callback, cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
378 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
379 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
380 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
381 * Source the file "name" from all directories in 'runtimepath'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
382 * "name" can contain wildcards. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
383 * When "flags" has DIP_ALL: source all files, otherwise only the first one. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
384 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
385 * return FAIL when no file could be sourced, OK otherwise. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
386 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
387 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
388 source_runtime(char_u *name, int flags) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
389 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
390 return source_in_path(p_rtp, name, flags); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
392 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
393 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
394 * Just like source_runtime(), but use "path" instead of 'runtimepath'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
395 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
396 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 source_in_path(char_u *path, char_u *name, int flags) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 return do_in_path_and_pp(path, name, flags, source_callback, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
400 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
401 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
402 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
403 #if defined(FEAT_EVAL) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
404 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
405 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
406 * Expand wildcards in "pat" and invoke do_source() for each match. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
407 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
408 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
409 source_all_matches(char_u *pat) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
410 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
411 int num_files; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
412 char_u **files; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
413 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
414 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 if (gen_expand_wildcards(1, &pat, &num_files, &files, EW_FILE) == OK) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
416 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 for (i = 0; i < num_files; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
418 (void)do_source(files[i], FALSE, DOSO_NONE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
419 FreeWild(num_files, files); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
420 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
421 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
422 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
423 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
424 * Add the package directory to 'runtimepath'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
425 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
426 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 add_pack_dir_to_rtp(char_u *fname) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
428 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
429 char_u *p4, *p3, *p2, *p1, *p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 char_u *entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
431 char_u *insp = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
432 int c; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
433 char_u *new_rtp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
434 int keep; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
435 size_t oldlen; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
436 size_t addlen; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
437 size_t new_rtp_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
438 char_u *afterdir = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
439 size_t afterlen = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 char_u *after_insp = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
441 char_u *ffname = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
442 size_t fname_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 char_u *buf = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 char_u *rtp_ffname; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 int match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
446 int retval = FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 p4 = p3 = p2 = p1 = get_past_head(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
449 for (p = p1; *p; MB_PTR_ADV(p)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 if (vim_ispathsep_nocolon(*p)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
451 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
452 p4 = p3; p3 = p2; p2 = p1; p1 = p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
453 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
454 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
455 // now we have: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 // rtp/pack/name/start/name |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
457 // p4 p3 p2 p1 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 // |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
459 // find the part up to "pack" in 'runtimepath' |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
460 c = *++p4; // append pathsep in order to expand symlink |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
461 *p4 = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
462 ffname = fix_fname(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
463 *p4 = c; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 if (ffname == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
465 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
466 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
467 // Find "ffname" in "p_rtp", ignoring '/' vs '\' differences. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 // Also stop at the first "after" directory. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 fname_len = STRLEN(ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
470 buf = alloc(MAXPATHL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
471 if (buf == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
472 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
473 for (entry = p_rtp; *entry != NUL; ) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
474 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
475 char_u *cur_entry = entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
476 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 copy_option_part(&entry, buf, MAXPATHL, ","); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 if (insp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
479 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
480 add_pathsep(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
481 rtp_ffname = fix_fname(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
482 if (rtp_ffname == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
483 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
484 match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
485 vim_free(rtp_ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
486 if (match) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 // Insert "ffname" after this entry (and comma). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
488 insp = entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
489 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
490 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
491 if ((p = (char_u *)strstr((char *)buf, "after")) != NULL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
492 && p > buf |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
493 && vim_ispathsep(p[-1]) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 && (vim_ispathsep(p[5]) || p[5] == NUL || p[5] == ',')) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
495 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
496 if (insp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
497 // Did not find "ffname" before the first "after" directory, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
498 // insert it before this entry. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
499 insp = cur_entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
500 after_insp = cur_entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
501 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
502 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
503 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
504 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
505 if (insp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
506 // Both "fname" and "after" not found, append at the end. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
507 insp = p_rtp + STRLEN(p_rtp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
508 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
509 // check if rtp/pack/name/start/name/after exists |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
510 afterdir = concat_fnames(fname, (char_u *)"after", TRUE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
511 if (afterdir != NULL && mch_isdir(afterdir)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 afterlen = STRLEN(afterdir) + 1; // add one for comma |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
513 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
514 oldlen = STRLEN(p_rtp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
515 addlen = STRLEN(fname) + 1; // add one for comma |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
516 new_rtp = alloc(oldlen + addlen + afterlen + 1); // add one for NUL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
517 if (new_rtp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
518 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
519 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
520 // We now have 'rtp' parts: {keep}{keep_after}{rest}. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
521 // Create new_rtp, first: {keep},{fname} |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
522 keep = (int)(insp - p_rtp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
523 mch_memmove(new_rtp, p_rtp, keep); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
524 new_rtp_len = keep; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
525 if (*insp == NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
526 new_rtp[new_rtp_len++] = ','; // add comma before |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
527 mch_memmove(new_rtp + new_rtp_len, fname, addlen - 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
528 new_rtp_len += addlen - 1; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
529 if (*insp != NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
530 new_rtp[new_rtp_len++] = ','; // add comma after |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
531 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
532 if (afterlen > 0 && after_insp != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
533 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
534 int keep_after = (int)(after_insp - p_rtp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
535 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
536 // Add to new_rtp: {keep},{fname}{keep_after},{afterdir} |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
537 mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
538 keep_after - keep); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
539 new_rtp_len += keep_after - keep; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
540 mch_memmove(new_rtp + new_rtp_len, afterdir, afterlen - 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
541 new_rtp_len += afterlen - 1; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
542 new_rtp[new_rtp_len++] = ','; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
543 keep = keep_after; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
544 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
545 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
546 if (p_rtp[keep] != NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
547 // Append rest: {keep},{fname}{keep_after},{afterdir}{rest} |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
548 mch_memmove(new_rtp + new_rtp_len, p_rtp + keep, oldlen - keep + 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
549 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
550 new_rtp[new_rtp_len] = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
551 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
552 if (afterlen > 0 && after_insp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
553 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
554 // Append afterdir when "after" was not found: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
555 // {keep},{fname}{rest},{afterdir} |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
556 STRCAT(new_rtp, ","); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
557 STRCAT(new_rtp, afterdir); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
558 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
559 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 set_option_value((char_u *)"rtp", 0L, new_rtp, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
561 vim_free(new_rtp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
563 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
564 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
565 vim_free(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
566 vim_free(ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
567 vim_free(afterdir); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
568 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
569 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
570 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
571 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 * Load scripts in "plugin" and "ftdetect" directories of the package. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
573 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 load_pack_plugin(char_u *fname) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
576 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
577 static char *plugpat = "%s/plugin/**/*.vim"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
578 static char *ftpat = "%s/ftdetect/*.vim"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
579 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
580 char_u *ffname = fix_fname(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
581 char_u *pat = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 int retval = FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 if (ffname == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
586 len = (int)STRLEN(ffname) + (int)STRLEN(ftpat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
587 pat = alloc(len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
588 if (pat == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
589 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 vim_snprintf((char *)pat, len, plugpat, ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
591 source_all_matches(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
592 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
595 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
596 // If runtime/filetype.vim wasn't loaded yet, the scripts will be |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
597 // found when it loads. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
598 if (cmd != NULL && eval_to_number(cmd) > 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
599 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
600 do_cmdline_cmd((char_u *)"augroup filetypedetect"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
601 vim_snprintf((char *)pat, len, ftpat, ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
602 source_all_matches(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
603 do_cmdline_cmd((char_u *)"augroup END"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
604 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
605 vim_free(cmd); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
606 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
607 vim_free(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
608 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
609 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
610 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
611 vim_free(ffname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
612 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
613 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 // used for "cookie" of add_pack_plugin() |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
616 static int APP_ADD_DIR; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 static int APP_LOAD; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
618 static int APP_BOTH; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
619 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
620 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 add_pack_plugin(char_u *fname, void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 if (cookie != &APP_LOAD) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
625 char_u *buf = alloc(MAXPATHL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
626 char_u *p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
627 int found = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
628 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
629 if (buf == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
630 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
631 p = p_rtp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
632 while (*p != NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 copy_option_part(&p, buf, MAXPATHL, ","); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 if (pathcmp((char *)buf, (char *)fname, -1) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
636 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
637 found = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
638 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
640 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 vim_free(buf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
642 if (!found) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
643 // directory is not yet in 'runtimepath', add it |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 if (add_pack_dir_to_rtp(fname) == FAIL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
647 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
648 if (cookie != &APP_ADD_DIR) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
649 load_pack_plugin(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
650 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
651 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
652 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 * Add all packages in the "start" directory to 'runtimepath'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
654 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
655 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
656 add_pack_start_dirs(void) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
657 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
658 do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 add_pack_plugin, &APP_ADD_DIR); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
660 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
661 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
662 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 * Load plugins from all packages in the "start" directory. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
664 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 load_start_packages(void) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
667 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 did_source_packages = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
669 do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 add_pack_plugin, &APP_LOAD); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
671 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
674 * ":packloadall" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
675 * Find plugins in the package directories and source them. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
677 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 ex_packloadall(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
679 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
680 if (!did_source_packages || eap->forceit) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
681 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 // First do a round to add all directories to 'runtimepath', then load |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
683 // the plugins. This allows for plugins to use an autoload directory |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 // of another plugin. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
685 add_pack_start_dirs(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
686 load_start_packages(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
687 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
688 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
689 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
691 * ":packadd[!] {name}" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
693 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
694 ex_packadd(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
696 static char *plugpat = "pack/*/%s/%s"; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
697 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
698 char *pat; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
699 int round; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
700 int res = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
701 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
702 // Round 1: use "start", round 2: use "opt". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 for (round = 1; round <= 2; ++round) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
704 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
705 // Only look under "start" when loading packages wasn't done yet. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
706 if (round == 1 && did_source_packages) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
707 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
708 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
709 len = (int)STRLEN(plugpat) + (int)STRLEN(eap->arg) + 5; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
710 pat = alloc(len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
711 if (pat == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
712 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
713 vim_snprintf(pat, len, plugpat, round == 1 ? "start" : "opt", eap->arg); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
714 // The first round don't give a "not found" error, in the second round |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
715 // only when nothing was found in the first round. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
716 res = do_in_path(p_pp, (char_u *)pat, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
717 DIP_ALL + DIP_DIR + (round == 2 && res == FAIL ? DIP_ERR : 0), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 add_pack_plugin, eap->forceit ? &APP_ADD_DIR : &APP_BOTH); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
719 vim_free(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
720 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
721 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
722 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
724 /* |
17978
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
725 * Sort "gap" and remove duplicate entries. "gap" is expected to contain a |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
726 * list of file names in allocated memory. |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
727 */ |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
728 void |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
729 remove_duplicates(garray_T *gap) |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
730 { |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
731 int i; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
732 int j; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
733 char_u **fnames = (char_u **)gap->ga_data; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
734 |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
735 sort_strings(fnames, gap->ga_len); |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
736 for (i = gap->ga_len - 1; i > 0; --i) |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
737 if (fnamecmp(fnames[i - 1], fnames[i]) == 0) |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
738 { |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
739 vim_free(fnames[i]); |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
740 for (j = i + 1; j < gap->ga_len; ++j) |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
741 fnames[j - 1] = fnames[j]; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
742 --gap->ga_len; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
743 } |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
744 } |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
745 |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
746 /* |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
747 * Expand color scheme, compiler or filetype names. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
748 * Search from 'runtimepath': |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 * 'runtimepath'/{dirnames}/{pat}.vim |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
750 * When "flags" has DIP_START: search also from 'start' of 'packpath': |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
751 * 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
752 * When "flags" has DIP_OPT: search also from 'opt' of 'packpath': |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
753 * 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
754 * "dirnames" is an array with one or more directory names. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
755 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
756 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
757 ExpandRTDir( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
758 char_u *pat, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
759 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
760 int *num_file, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
761 char_u ***file, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
762 char *dirnames[]) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
763 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
764 char_u *s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
765 char_u *e; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 char_u *match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 garray_T ga; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
768 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
769 int pat_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
771 *num_file = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
772 *file = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
773 pat_len = (int)STRLEN(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 ga_init2(&ga, (int)sizeof(char *), 10); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
776 for (i = 0; dirnames[i] != NULL; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
778 s = alloc(STRLEN(dirnames[i]) + pat_len + 7); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
779 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
780 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
781 ga_clear_strings(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
784 sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 globpath(p_rtp, s, &ga, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
787 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
788 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
789 if (flags & DIP_START) { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
790 for (i = 0; dirnames[i] != NULL; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
791 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
792 s = alloc(STRLEN(dirnames[i]) + pat_len + 22); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
793 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
794 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
795 ga_clear_strings(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
796 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
797 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
798 sprintf((char *)s, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
799 globpath(p_pp, s, &ga, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
800 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
801 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
802 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
803 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
804 if (flags & DIP_OPT) { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
805 for (i = 0; dirnames[i] != NULL; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
806 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 s = alloc(STRLEN(dirnames[i]) + pat_len + 20); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
808 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
809 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
810 ga_clear_strings(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
811 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
812 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
813 sprintf((char *)s, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 globpath(p_pp, s, &ga, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
815 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
818 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
819 for (i = 0; i < ga.ga_len; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
820 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
821 match = ((char_u **)ga.ga_data)[i]; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 s = match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 e = s + STRLEN(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
824 if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
825 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
826 e -= 4; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 for (s = e; s > match; MB_PTR_BACK(match, s)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 if (s < match || vim_ispathsep(*s)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
830 ++s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 *e = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
832 mch_memmove(match, s, e - s + 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
834 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
835 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
836 if (ga.ga_len == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
837 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
838 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
839 // Sort and remove duplicates which can happen when specifying multiple |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
840 // directories in dirnames. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
841 remove_duplicates(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
842 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
843 *file = ga.ga_data; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
844 *num_file = ga.ga_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
845 return OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
846 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
847 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
848 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
849 * Expand loadplugin names: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
850 * 'packpath'/pack/ * /opt/{pat} |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
851 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
852 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
853 ExpandPackAddDir( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
854 char_u *pat, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
855 int *num_file, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 char_u ***file) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
857 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
858 char_u *s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
859 char_u *e; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
860 char_u *match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
861 garray_T ga; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
862 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
863 int pat_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
864 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
865 *num_file = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
866 *file = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
867 pat_len = (int)STRLEN(pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
868 ga_init2(&ga, (int)sizeof(char *), 10); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
869 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
870 s = alloc(pat_len + 26); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
871 if (s == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
872 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
873 ga_clear_strings(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
874 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
875 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
876 sprintf((char *)s, "pack/*/opt/%s*", pat); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 globpath(p_pp, s, &ga, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
878 vim_free(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
879 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
880 for (i = 0; i < ga.ga_len; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
881 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
882 match = ((char_u **)ga.ga_data)[i]; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
883 s = gettail(match); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
884 e = s + STRLEN(s); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
885 mch_memmove(match, s, e - s + 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
887 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
888 if (ga.ga_len == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
889 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
891 // Sort and remove duplicates which can happen when specifying multiple |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
892 // directories in dirnames. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 remove_duplicates(&ga); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
894 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
895 *file = ga.ga_data; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
896 *num_file = ga.ga_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
897 return OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
898 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
899 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
900 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 cmd_source(char_u *fname, exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
902 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
903 if (*fname == NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
904 emsg(_(e_argreq)); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
906 else if (eap != NULL && eap->forceit) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
907 // ":source!": read Normal mode commands |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
908 // Need to execute the commands directly. This is required at least |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
909 // for: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
910 // - ":g" command busy |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
911 // - after ":argdo", ":windo" or ":bufdo" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
912 // - another command follows |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
913 // - inside a loop |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
914 openscript(fname, global_busy || listcmd_busy || eap->nextcmd != NULL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
915 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 || eap->cstack->cs_idx >= 0 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
917 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
918 ); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
919 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 // ":source" read ex commands |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
921 else if (do_source(fname, FALSE, DOSO_NONE) == FAIL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
922 semsg(_(e_notopen), fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
923 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
924 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
925 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
926 * ":source {fname}" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
927 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
928 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
929 ex_source(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
930 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
931 #ifdef FEAT_BROWSE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
932 if (cmdmod.browse) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
933 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
934 char_u *fname = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
935 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
936 fname = do_browse(0, (char_u *)_("Source Vim script"), eap->arg, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
937 NULL, NULL, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
938 (char_u *)_(BROWSE_FILTER_MACROS), NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
939 if (fname != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
940 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
941 cmd_source(fname, eap); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
942 vim_free(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
943 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
944 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
945 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
946 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
947 cmd_source(eap->arg, eap); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
948 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
949 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
950 #if defined(FEAT_EVAL) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
951 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
952 * ":options" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
953 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
954 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
955 ex_options( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
956 exarg_T *eap UNUSED) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
957 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
958 vim_setenv((char_u *)"OPTWIN_CMD", |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
959 (char_u *)(cmdmod.tab ? "tab" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
960 : (cmdmod.split & WSP_VERT) ? "vert" : "")); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
961 cmd_source((char_u *)SYS_OPTWIN_FILE, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
962 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
963 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
964 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
965 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
966 * ":source" and associated commands. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
967 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
968 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
969 * Structure used to store info for each sourced file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
970 * It is shared between do_source() and getsourceline(). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
971 * This is required, because it needs to be handed to do_cmdline() and |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
972 * sourcing can be done recursively. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
973 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
974 struct source_cookie |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
975 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
976 FILE *fp; // opened file for sourcing |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
977 char_u *nextline; // if not NULL: line that was read ahead |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 linenr_T sourcing_lnum; // line number of the source file |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 int finished; // ":finish" used |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
980 #ifdef USE_CRNL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
981 int fileformat; // EOL_UNKNOWN, EOL_UNIX or EOL_DOS |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
982 int error; // TRUE if LF found after CR-LF |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
983 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
984 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
985 linenr_T breakpoint; // next line with breakpoint or zero |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 char_u *fname; // name of sourced file |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
987 int dbg_tick; // debug_tick when breakpoint was set |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 int level; // top nesting level of sourced file |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
989 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
990 vimconv_T conv; // type of conversion |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 }; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
994 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
995 * Return the address holding the next breakpoint line for a source cookie. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
996 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
997 linenr_T * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
998 source_breakpoint(void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
999 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 return &((struct source_cookie *)cookie)->breakpoint; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1001 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1002 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1004 * Return the address holding the debug tick for a source cookie. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1006 int * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 source_dbg_tick(void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1009 return &((struct source_cookie *)cookie)->dbg_tick; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1010 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1011 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1012 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1013 * Return the nesting level for a source cookie. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 source_level(void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 return ((struct source_cookie *)cookie)->level; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1020 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 #if (defined(MSWIN) && defined(FEAT_CSCOPE)) || defined(HAVE_FD_CLOEXEC) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 # define USE_FOPEN_NOINH |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 * Special function to open a file without handle inheritance. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 * When possible the handle is closed on exec(). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 static FILE * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 fopen_noinh_readbin(char *filename) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 # ifdef MSWIN |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 int fd_tmp = mch_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 # else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1034 int fd_tmp = mch_open(filename, O_RDONLY, 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1036 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 if (fd_tmp == -1) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 return NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 # ifdef HAVE_FD_CLOEXEC |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 int fdflags = fcntl(fd_tmp, F_GETFD); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 (void)fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 return fdopen(fd_tmp, READBIN); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 * do_source: Read the file "fname" and execute its lines as EX commands. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1054 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 * This function may be called recursively! |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 * return FAIL if file could not be opened, OK otherwise |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1059 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 do_source( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 char_u *fname, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 int check_other, // check for .vimrc and _vimrc |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 int is_vimrc) // DOSO_ value |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1064 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 struct source_cookie cookie; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 char_u *p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 char_u *fname_exp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1068 char_u *firstline = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 int retval = FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 sctx_T save_current_sctx; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1072 static scid_T last_current_SID = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1073 static int last_current_SID_seq = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1074 funccal_entry_T funccalp_entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1075 int save_debug_break_level = debug_break_level; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1076 scriptitem_T *si = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1077 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1078 stat_T st; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1079 int stat_ok; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1080 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1081 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1083 struct timeval tv_rel; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1084 struct timeval tv_start; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1085 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1086 #ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1087 proftime_T wait_start; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1088 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1089 int trigger_source_post = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1090 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 p = expand_env_save(fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 if (p == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1093 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 fname_exp = fix_fname(p); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1095 vim_free(p); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 if (fname_exp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1098 if (mch_isdir(fname_exp)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 smsg(_("Cannot source a directory: \"%s\""), fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1102 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1103 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 // Apply SourceCmd autocommands, they should get the file and source it. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1105 if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1106 && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1107 FALSE, curbuf)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1108 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 retval = aborting() ? FAIL : OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1111 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1114 if (retval == OK) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1115 // Apply SourcePost autocommands. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1116 apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1117 FALSE, curbuf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1119 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1120 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 // Apply SourcePre autocommands, they may get the file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1122 apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1123 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1124 #ifdef USE_FOPEN_NOINH |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1125 cookie.fp = fopen_noinh_readbin((char *)fname_exp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1126 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1127 cookie.fp = mch_fopen((char *)fname_exp, READBIN); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1128 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 if (cookie.fp == NULL && check_other) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1130 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1131 // Try again, replacing file name ".vimrc" by "_vimrc" or vice versa, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1132 // and ".exrc" by "_exrc" or vice versa. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1133 p = gettail(fname_exp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1134 if ((*p == '.' || *p == '_') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1135 && (STRICMP(p + 1, "vimrc") == 0 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1136 || STRICMP(p + 1, "gvimrc") == 0 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 || STRICMP(p + 1, "exrc") == 0)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1138 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 if (*p == '_') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1140 *p = '.'; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1142 *p = '_'; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1143 #ifdef USE_FOPEN_NOINH |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 cookie.fp = fopen_noinh_readbin((char *)fname_exp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 cookie.fp = mch_fopen((char *)fname_exp, READBIN); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 if (cookie.fp == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 if (p_verbose > 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 verbose_enter(); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1156 if (SOURCING_NAME == NULL) |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 smsg(_("could not source \"%s\""), fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 smsg(_("line %ld: could not source \"%s\""), |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1160 SOURCING_LNUM, fname); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1166 // The file exists. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1167 // - In verbose mode, give a message. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1168 // - For a vimrc file, may want to set 'compatible', call vimrc_found(). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 if (p_verbose > 1) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1171 verbose_enter(); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1172 if (SOURCING_NAME == NULL) |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 smsg(_("sourcing \"%s\""), fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 else |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1175 smsg(_("line %ld: sourcing \"%s\""), SOURCING_LNUM, fname); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1176 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 if (is_vimrc == DOSO_VIMRC) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 vimrc_found(fname_exp, (char_u *)"MYVIMRC"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 else if (is_vimrc == DOSO_GVIMRC) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 vimrc_found(fname_exp, (char_u *)"MYGVIMRC"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1182 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1183 #ifdef USE_CRNL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 // If no automatic file format: Set default to CR-NL. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 if (*p_ffs == NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 cookie.fileformat = EOL_DOS; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 cookie.fileformat = EOL_UNKNOWN; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1189 cookie.error = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 cookie.nextline = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 cookie.sourcing_lnum = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 cookie.finished = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 // Check if this script has a breakpoint. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1198 cookie.breakpoint = dbg_find_breakpoint(TRUE, fname_exp, (linenr_T)0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 cookie.fname = fname_exp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1200 cookie.dbg_tick = debug_tick; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1202 cookie.level = ex_nesting_level; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 // Keep the sourcing name/lnum, for recursive calls. |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1206 estack_push(ETYPE_SCRIPT, fname_exp, 0); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1207 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1208 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1209 if (time_fd != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1210 time_push(&tv_rel, &tv_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1211 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1213 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 # ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1215 if (do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1216 prof_child_enter(&wait_start); // entering a child now |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1217 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 // Don't use local function variables, if called from a function. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1220 // Also starts profiling timer for nested script. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1221 save_funccal(&funccalp_entry); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1222 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1223 save_current_sctx = current_sctx; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1224 current_sctx.sc_lnum = 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 current_sctx.sc_version = 1; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1227 // Check if this script was sourced before to finds its SID. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 // If it's new, generate a new SID. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 // Always use a new sequence number. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 current_sctx.sc_seq = ++last_current_SID_seq; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 stat_ok = (mch_stat((char *)fname_exp, &st) >= 0); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1234 for (current_sctx.sc_sid = script_items.ga_len; current_sctx.sc_sid > 0; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 --current_sctx.sc_sid) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1236 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1238 if (si->sn_name != NULL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1239 && ( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1241 // Compare dev/ino when possible, it catches symbolic |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 // links. Also compare file names, the inode may change |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 // when the file was edited. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 ((stat_ok && si->sn_dev_valid) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 && (si->sn_dev == st.st_dev |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1246 && si->sn_ino == st.st_ino)) || |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1248 fnamecmp(si->sn_name, fname_exp) == 0)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1249 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 if (current_sctx.sc_sid == 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1252 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 current_sctx.sc_sid = ++last_current_SID; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1254 if (ga_grow(&script_items, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 (int)(current_sctx.sc_sid - script_items.ga_len)) == FAIL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 goto almosttheend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 while (script_items.ga_len < current_sctx.sc_sid) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 ++script_items.ga_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1260 SCRIPT_ITEM(script_items.ga_len).sn_name = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 # ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 SCRIPT_ITEM(script_items.ga_len).sn_prof_on = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1264 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1265 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1266 si->sn_name = fname_exp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 fname_exp = vim_strsave(si->sn_name); // used for autocmd |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 if (stat_ok) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 si->sn_dev_valid = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 si->sn_dev = st.st_dev; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 si->sn_ino = st.st_ino; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1276 si->sn_dev_valid = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 // Allocate the local script variables to use for this script. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 new_script_vars(current_sctx.sc_sid); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 # ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 if (do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 int forceit; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1287 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 // Check if we do profiling for this script. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 if (!si->sn_prof_on && has_profiling(TRUE, si->sn_name, &forceit)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1290 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 script_do_profile(si); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 si->sn_pr_force = forceit; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 if (si->sn_prof_on) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1295 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 ++si->sn_pr_count; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 profile_start(&si->sn_pr_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 profile_zero(&si->sn_pr_children); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1299 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1300 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1303 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 cookie.conv.vc_type = CONV_NONE; // no conversion |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 // Read the first line so we can check for a UTF-8 BOM. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1307 firstline = getsourceline(0, (void *)&cookie, 0, TRUE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 && firstline[1] == 0xbb && firstline[2] == 0xbf) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1310 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 // Found BOM; setup conversion, skip over BOM and recode the line. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 p = string_convert(&cookie.conv, firstline + 3, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 if (p == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1315 p = vim_strsave(firstline + 3); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 if (p != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1318 vim_free(firstline); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 firstline = p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1320 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1323 // Call do_cmdline, which will call getsourceline() to get the lines. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 do_cmdline(firstline, getsourceline, (void *)&cookie, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 #ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 if (do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 // Get "si" again, "script_items" may have been reallocated. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1332 si = &SCRIPT_ITEM(current_sctx.sc_sid); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 if (si->sn_prof_on) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1334 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 profile_end(&si->sn_pr_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 profile_sub_wait(&wait_start, &si->sn_pr_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 profile_add(&si->sn_pr_total, &si->sn_pr_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 profile_self(&si->sn_pr_self, &si->sn_pr_start, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 &si->sn_pr_children); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1342 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1343 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 if (got_int) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 emsg(_(e_interr)); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1346 estack_pop(); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1347 if (p_verbose > 1) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1348 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 smsg(_("finished sourcing %s"), fname); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1351 if (SOURCING_NAME != NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1352 smsg(_("continuing in %s"), SOURCING_NAME); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 if (time_fd != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 time_msg((char *)IObuff, &tv_start); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 time_pop(&tv_rel); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1361 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 if (!got_int) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 trigger_source_post = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 // After a "finish" in debug mode, need to break at first command of next |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 // sourced file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 if (save_debug_break_level > ex_nesting_level |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 && debug_break_level == ex_nesting_level) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 ++debug_break_level; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1375 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 almosttheend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 current_sctx = save_current_sctx; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 restore_funccal(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1379 # ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 if (do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 prof_child_exit(&wait_start); // leaving a child now |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1382 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 fclose(cookie.fp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 vim_free(cookie.nextline); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 vim_free(firstline); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 convert_setup(&cookie.conv, NULL, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 if (trigger_source_post) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, FALSE, curbuf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1391 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1392 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 vim_free(fname_exp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1395 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 #if defined(FEAT_EVAL) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 * ":scriptnames" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 ex_scriptnames(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1406 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 if (eap->addr_count > 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1408 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 // :script {scriptId}: edit the script |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 if (eap->line2 < 1 || eap->line2 > script_items.ga_len) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 emsg(_(e_invarg)); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1412 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 eap->arg = SCRIPT_ITEM(eap->line2).sn_name; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 do_exedit(eap, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1417 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 for (i = 1; i <= script_items.ga_len && !got_int; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 if (SCRIPT_ITEM(i).sn_name != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1422 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 home_replace(NULL, SCRIPT_ITEM(i).sn_name, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 NameBuff, MAXPATHL, TRUE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 smsg("%3d: %s", i, NameBuff); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1428 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1431 * Fix slashes in the list of script names for 'shellslash'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1432 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1433 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1434 scriptnames_slash_adjust(void) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1435 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1436 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1437 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1438 for (i = 1; i <= script_items.ga_len; ++i) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 if (SCRIPT_ITEM(i).sn_name != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1440 slash_adjust(SCRIPT_ITEM(i).sn_name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1442 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 * Get a pointer to a script name. Used for ":verbose set". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1446 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1447 char_u * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 get_scriptname(scid_T id) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1449 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1450 if (id == SID_MODELINE) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1451 return (char_u *)_("modeline"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 if (id == SID_CMDARG) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1453 return (char_u *)_("--cmd argument"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 if (id == SID_CARG) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 return (char_u *)_("-c argument"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1456 if (id == SID_ENV) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1457 return (char_u *)_("environment variable"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1458 if (id == SID_ERROR) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1459 return (char_u *)_("error handler"); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1460 return SCRIPT_ITEM(id).sn_name; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1461 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1462 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1463 # if defined(EXITFREE) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1464 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1465 free_scriptnames(void) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1466 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1467 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1469 for (i = script_items.ga_len; i > 0; --i) |
18225
6c3a8312486d
patch 8.1.2107: various memory leaks reported by asan
Bram Moolenaar <Bram@vim.org>
parents:
18080
diff
changeset
|
1470 { |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1471 vim_free(SCRIPT_ITEM(i).sn_name); |
18410
b5b2e3b824c2
patch 8.1.2199: build failure when using normal features without GUI
Bram Moolenaar <Bram@vim.org>
parents:
18225
diff
changeset
|
1472 # ifdef FEAT_PROFILE |
18225
6c3a8312486d
patch 8.1.2107: various memory leaks reported by asan
Bram Moolenaar <Bram@vim.org>
parents:
18080
diff
changeset
|
1473 ga_clear(&SCRIPT_ITEM(i).sn_prl_ga); |
18410
b5b2e3b824c2
patch 8.1.2199: build failure when using normal features without GUI
Bram Moolenaar <Bram@vim.org>
parents:
18225
diff
changeset
|
1474 # endif |
18225
6c3a8312486d
patch 8.1.2107: various memory leaks reported by asan
Bram Moolenaar <Bram@vim.org>
parents:
18080
diff
changeset
|
1475 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1476 ga_clear(&script_items); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1477 } |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1478 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1479 void |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1480 free_autoload_scriptnames(void) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1481 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1482 ga_clear_strings(&ga_loaded); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1483 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1484 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1485 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1487 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1488 linenr_T |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1489 get_sourced_lnum(char_u *(*fgetline)(int, void *, int, int), void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 return fgetline == getsourceline |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 ? ((struct source_cookie *)cookie)->sourcing_lnum |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1493 : SOURCING_LNUM; |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1495 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 static char_u * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 get_one_sourceline(struct source_cookie *sp) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 garray_T ga; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1500 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 int c; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1502 char_u *buf; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1503 #ifdef USE_CRNL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 int has_cr; // CR-LF found |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1505 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 int have_read = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1507 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1508 // use a growarray to store the sourced line |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 ga_init2(&ga, 1, 250); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1510 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 // Loop until there is a finished line (or end-of-file). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1512 ++sp->sourcing_lnum; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1513 for (;;) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1514 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 // make room to read at least 120 (more) characters |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 if (ga_grow(&ga, 120) == FAIL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1517 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 buf = (char_u *)ga.ga_data; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1519 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1520 if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 sp->fp) == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1522 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1523 len = ga.ga_len + (int)STRLEN(buf + ga.ga_len); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1524 #ifdef USE_CRNL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 // Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1526 // CTRL-Z by its own, or after a NL. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1527 if ( (len == 1 || (len >= 2 && buf[len - 2] == '\n')) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 && sp->fileformat == EOL_DOS |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1529 && buf[len - 1] == Ctrl_Z) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1530 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1531 buf[len - 1] = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1532 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1533 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1534 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1535 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1536 have_read = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1537 ga.ga_len = len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1538 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1539 // If the line was longer than the buffer, read more. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1540 if (ga.ga_maxlen - ga.ga_len == 1 && buf[len - 1] != '\n') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1541 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1542 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1543 if (len >= 1 && buf[len - 1] == '\n') // remove trailing NL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1544 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1545 #ifdef USE_CRNL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 has_cr = (len >= 2 && buf[len - 2] == '\r'); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1547 if (sp->fileformat == EOL_UNKNOWN) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1548 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1549 if (has_cr) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1550 sp->fileformat = EOL_DOS; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1551 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1552 sp->fileformat = EOL_UNIX; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1554 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1555 if (sp->fileformat == EOL_DOS) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1556 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 if (has_cr) // replace trailing CR |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1558 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1559 buf[len - 2] = '\n'; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1560 --len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1561 --ga.ga_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1562 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1563 else // lines like ":map xx yy^M" will have failed |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1564 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1565 if (!sp->error) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1566 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1567 msg_source(HL_ATTR(HLF_W)); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1568 emsg(_("W15: Warning: Wrong line separator, ^M may be missing")); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1570 sp->error = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1571 sp->fileformat = EOL_UNIX; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1572 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1573 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1574 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1575 // The '\n' is escaped if there is an odd number of ^V's just |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1576 // before it, first set "c" just before the 'V's and then check |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 // len&c parities (is faster than ((len-c)%2 == 0)) -- Acevedo |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1578 for (c = len - 2; c >= 0 && buf[c] == Ctrl_V; c--) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1579 ; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1580 if ((len & 1) != (c & 1)) // escaped NL, read more |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1581 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1582 ++sp->sourcing_lnum; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1583 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1584 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1585 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1586 buf[len - 1] = NUL; // remove the NL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1587 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1588 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1589 // Check for ^C here now and then, so recursive :so can be broken. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 line_breakcheck(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1591 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1592 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1593 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1594 if (have_read) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 return (char_u *)ga.ga_data; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1596 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1597 vim_free(ga.ga_data); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1598 return NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1600 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1601 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1602 * Get one full line from a sourced file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 * Called by do_cmdline() when it's called from do_source(). |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1605 * Return a pointer to the line in allocated memory. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1606 * Return NULL for end-of-file or some error. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1607 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1608 char_u * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 getsourceline(int c UNUSED, void *cookie, int indent UNUSED, int do_concat) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1610 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1611 struct source_cookie *sp = (struct source_cookie *)cookie; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 char_u *line; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1613 char_u *p; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1614 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1615 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1616 // If breakpoints have been added/deleted need to check for it. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1617 if (sp->dbg_tick < debug_tick) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1618 { |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1619 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, SOURCING_LNUM); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1620 sp->dbg_tick = debug_tick; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1621 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1622 # ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1623 if (do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1624 script_line_end(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1625 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1626 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1627 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1628 // Set the current sourcing line number. |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1629 SOURCING_LNUM = sp->sourcing_lnum + 1; |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1630 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1631 // Get current line. If there is a read-ahead line, use it, otherwise get |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1632 // one now. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1633 if (sp->finished) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1634 line = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1635 else if (sp->nextline == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1636 line = get_one_sourceline(sp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1637 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1638 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1639 line = sp->nextline; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1640 sp->nextline = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1641 ++sp->sourcing_lnum; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1642 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1643 #ifdef FEAT_PROFILE |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1644 if (line != NULL && do_profiling == PROF_YES) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1645 script_line_start(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1646 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1647 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 // Only concatenate lines starting with a \ when 'cpoptions' doesn't |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1649 // contain the 'C' flag. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1650 if (line != NULL && do_concat && vim_strchr(p_cpo, CPO_CONCAT) == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1651 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1652 // compensate for the one line read-ahead |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1653 --sp->sourcing_lnum; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1654 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1655 // Get the next line and concatenate it when it starts with a |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1656 // backslash. We always need to read the next line, keep it in |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1657 // sp->nextline. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 /* Also check for a comment in between continuation lines: "\ */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1659 sp->nextline = get_one_sourceline(sp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1660 if (sp->nextline != NULL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1661 && (*(p = skipwhite(sp->nextline)) == '\\' |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1662 || (p[0] == '"' && p[1] == '\\' && p[2] == ' '))) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1663 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1664 garray_T ga; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1665 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1666 ga_init2(&ga, (int)sizeof(char_u), 400); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1667 ga_concat(&ga, line); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 if (*p == '\\') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1669 ga_concat(&ga, p + 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1670 for (;;) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1671 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1672 vim_free(sp->nextline); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1673 sp->nextline = get_one_sourceline(sp); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1674 if (sp->nextline == NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1675 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1676 p = skipwhite(sp->nextline); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 if (*p == '\\') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1678 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 // Adjust the growsize to the current length to speed up |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1680 // concatenating many lines. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1681 if (ga.ga_len > 400) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1682 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1683 if (ga.ga_len > 8000) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1684 ga.ga_growsize = 8000; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1685 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 ga.ga_growsize = ga.ga_len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1687 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 ga_concat(&ga, p + 1); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1689 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 else if (p[0] != '"' || p[1] != '\\' || p[2] != ' ') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1691 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1692 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1693 ga_append(&ga, NUL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1694 vim_free(line); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1695 line = ga.ga_data; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1696 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1697 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1698 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1699 if (line != NULL && sp->conv.vc_type != CONV_NONE) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1700 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1701 char_u *s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1702 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1703 // Convert the encoding of the script line. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1704 s = string_convert(&sp->conv, line, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1705 if (s != NULL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1706 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1707 vim_free(line); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1708 line = s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1709 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1710 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1712 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1713 // Did we encounter a breakpoint? |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1714 if (sp->breakpoint != 0 && sp->breakpoint <= SOURCING_LNUM) |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1715 { |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1716 dbg_breakpoint(sp->fname, SOURCING_LNUM); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1717 // Find next breakpoint. |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1718 sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, SOURCING_LNUM); |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1719 sp->dbg_tick = debug_tick; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1720 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1721 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1722 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1723 return line; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1724 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1725 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1726 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1727 * ":scriptencoding": Set encoding conversion for a sourced script. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1728 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1729 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1730 ex_scriptencoding(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1732 struct source_cookie *sp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1733 char_u *name; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1734 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1735 if (!getline_equal(eap->getline, eap->cookie, getsourceline)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1736 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1737 emsg(_("E167: :scriptencoding used outside of a sourced file")); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1738 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1740 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1741 if (*eap->arg != NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1742 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1743 name = enc_canonize(eap->arg); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1744 if (name == NULL) // out of memory |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1745 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1746 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1748 name = eap->arg; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1749 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1750 // Setup for conversion from the specified encoding to 'encoding'. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1751 sp = (struct source_cookie *)getline_cookie(eap->getline, eap->cookie); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1752 convert_setup(&sp->conv, name, p_enc); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1754 if (name != eap->arg) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 vim_free(name); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1756 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1757 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1758 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1759 * ":scriptversion": Set Vim script version for a sourced script. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1760 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1761 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1762 ex_scriptversion(exarg_T *eap UNUSED) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1763 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1764 #ifdef FEAT_EVAL |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1765 int nr; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1766 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1767 if (!getline_equal(eap->getline, eap->cookie, getsourceline)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1768 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1769 emsg(_("E984: :scriptversion used outside of a sourced file")); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1770 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1771 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1772 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1773 nr = getdigits(&eap->arg); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1774 if (nr == 0 || *eap->arg != NUL) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1775 emsg(_(e_invarg)); |
18080
a6d218f99ff7
patch 8.1.2035: recognizing octal numbers is confusing
Bram Moolenaar <Bram@vim.org>
parents:
17978
diff
changeset
|
1776 else if (nr > 4) |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1777 semsg(_("E999: scriptversion not supported: %d"), nr); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1778 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1779 current_sctx.sc_version = nr; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1780 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1781 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1782 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1783 #if defined(FEAT_EVAL) || defined(PROTO) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1784 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1785 * ":finish": Mark a sourced file as finished. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1786 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1787 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1788 ex_finish(exarg_T *eap) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1789 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1790 if (getline_equal(eap->getline, eap->cookie, getsourceline)) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1791 do_finish(eap, FALSE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1792 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 emsg(_("E168: :finish used outside of a sourced file")); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1794 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1795 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1796 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1797 * Mark a sourced file as finished. Possibly makes the ":finish" pending. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1798 * Also called for a pending finish at the ":endtry" or after returning from |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1799 * an extra do_cmdline(). "reanimate" is used in the latter case. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1800 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1801 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1802 do_finish(exarg_T *eap, int reanimate) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1803 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1804 int idx; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1805 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1806 if (reanimate) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1807 ((struct source_cookie *)getline_cookie(eap->getline, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1808 eap->cookie))->finished = FALSE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1809 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1810 // Cleanup (and inactivate) conditionals, but stop when a try conditional |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1811 // not in its finally clause (which then is to be executed next) is found. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1812 // In this case, make the ":finish" pending for execution at the ":endtry". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1813 // Otherwise, finish normally. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1814 idx = cleanup_conditionals(eap->cstack, 0, TRUE); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1815 if (idx >= 0) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1816 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1817 eap->cstack->cs_pending[idx] = CSTP_FINISH; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1818 report_make_pending(CSTP_FINISH, NULL); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1819 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1820 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1821 ((struct source_cookie *)getline_cookie(eap->getline, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1822 eap->cookie))->finished = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1823 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1824 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1825 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1826 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1827 * Return TRUE when a sourced file had the ":finish" command: Don't give error |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1828 * message for missing ":endif". |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1829 * Return FALSE when not sourcing a file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1830 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1831 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1832 source_finished( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1833 char_u *(*fgetline)(int, void *, int, int), |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1834 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1835 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1836 return (getline_equal(fgetline, cookie, getsourceline) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1837 && ((struct source_cookie *)getline_cookie( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1838 fgetline, cookie))->finished); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1839 } |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1840 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1841 /* |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1842 * Return the autoload script name for a function or variable name. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1843 * Returns NULL when out of memory. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1844 * Caller must make sure that "name" contains AUTOLOAD_CHAR. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1845 */ |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1846 char_u * |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1847 autoload_name(char_u *name) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1848 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1849 char_u *p, *q = NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1850 char_u *scriptname; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1851 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1852 // Get the script file name: replace '#' with '/', append ".vim". |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1853 scriptname = alloc(STRLEN(name) + 14); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1854 if (scriptname == NULL) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1855 return NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1856 STRCPY(scriptname, "autoload/"); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1857 STRCAT(scriptname, name); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1858 for (p = scriptname + 9; (p = vim_strchr(p, AUTOLOAD_CHAR)) != NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1859 q = p, ++p) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1860 *p = '/'; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1861 STRCPY(q, ".vim"); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1862 return scriptname; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1863 } |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1864 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1865 /* |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1866 * If "name" has a package name try autoloading the script for it. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1867 * Return TRUE if a package was loaded. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1868 */ |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1869 int |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1870 script_autoload( |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1871 char_u *name, |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1872 int reload) // load script again when already loaded |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1873 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1874 char_u *p; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1875 char_u *scriptname, *tofree; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1876 int ret = FALSE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1877 int i; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1878 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1879 // If there is no '#' after name[0] there is no package name. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1880 p = vim_strchr(name, AUTOLOAD_CHAR); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1881 if (p == NULL || p == name) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1882 return FALSE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1883 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1884 tofree = scriptname = autoload_name(name); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1885 if (scriptname == NULL) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1886 return FALSE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1887 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1888 // Find the name in the list of previously loaded package names. Skip |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1889 // "autoload/", it's always the same. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1890 for (i = 0; i < ga_loaded.ga_len; ++i) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1891 if (STRCMP(((char_u **)ga_loaded.ga_data)[i] + 9, scriptname + 9) == 0) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1892 break; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1893 if (!reload && i < ga_loaded.ga_len) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1894 ret = FALSE; // was loaded already |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1895 else |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1896 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1897 // Remember the name if it wasn't loaded already. |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1898 if (i == ga_loaded.ga_len && ga_grow(&ga_loaded, 1) == OK) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1899 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1900 ((char_u **)ga_loaded.ga_data)[ga_loaded.ga_len++] = scriptname; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1901 tofree = NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1902 } |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1903 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1904 // Try loading the package from $VIMRUNTIME/autoload/<name>.vim |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1905 if (source_runtime(scriptname, 0) == OK) |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1906 ret = TRUE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1907 } |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1908 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1909 vim_free(tofree); |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1910 return ret; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1911 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 #endif |