Mercurial > vim
annotate src/scriptfile.c @ 18993:dcbc559510f6 v8.2.0057
patch 8.2.0057: cannot build with small features
Commit: https://github.com/vim/vim/commit/09d4640f6c4333da5167327629d355062f6629cd
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 29 23:53:01 2019 +0100
patch 8.2.0057: cannot build with small features
Problem: Cannot build with small features.
Solution: Add #ifdefs.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 30 Dec 2019 00:00:03 +0100 |
parents | 847cc7932c42 |
children | 6b2d93436388 |
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; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
35 #ifdef FEAT_EVAL |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
36 entry->es_info.ufunc = NULL; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
37 #endif |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
38 ++exestack.ga_len; |
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 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
41 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
42 * 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
|
43 * 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
|
44 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
45 estack_T * |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
46 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
|
47 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
48 estack_T *entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
49 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
50 // 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
|
51 // 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
|
52 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
|
53 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
54 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
|
55 entry->es_type = type; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
56 entry->es_name = name; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
57 entry->es_lnum = lnum; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
58 #ifdef FEAT_EVAL |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
59 entry->es_info.ufunc = NULL; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
60 #endif |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
61 ++exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
62 return entry; |
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 return NULL; |
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 |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
67 #if defined(FEAT_EVAL) || defined(PROTO) |
18991
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 * 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
|
70 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
71 void |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
72 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
|
73 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
74 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
|
75 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
|
76 ? 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
|
77 if (entry != NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
78 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
|
79 } |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
80 #endif |
18991
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 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
83 * 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
|
84 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
85 void |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
86 estack_pop(void) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
87 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
88 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
|
89 --exestack.ga_len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
90 } |
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 /* |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
93 * 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
|
94 */ |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
95 char_u * |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
96 estack_sfile(void) |
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 int len; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
99 int idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
100 estack_T *entry; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
101 char *res; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
102 int done; |
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 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
|
105 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
|
106 return NULL; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
107 #ifdef FEAT_EVAL |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
108 if (entry->es_info.ufunc == NULL) |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
109 #endif |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
110 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
|
111 |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
112 #ifdef FEAT_EVAL |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
113 // 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
|
114 // "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
|
115 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
|
116 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
|
117 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
118 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
|
119 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
|
120 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
121 ++idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
122 break; |
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 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
|
125 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
126 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
127 res = (char *)alloc(len); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
128 if (res != NULL) |
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 STRCPY(res, "function "); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
131 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
|
132 { |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
133 done = STRLEN(res); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
134 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
|
135 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
|
136 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
|
137 ++idx; |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
138 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
139 done = STRLEN(res); |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
140 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
|
141 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
|
142 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
143 return (char_u *)res; |
18993
dcbc559510f6
patch 8.2.0057: cannot build with small features
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
144 #endif |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
145 } |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
146 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
147 /* |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
148 * ":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
|
149 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
150 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
151 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
|
152 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
153 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
|
154 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
|
155 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
|
156 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
|
157 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
158 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
|
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_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, "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
|
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_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
|
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 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
|
169 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
170 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
|
171 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
|
172 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
173 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
|
174 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
175 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
|
176 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
|
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 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
|
180 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 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
|
184 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 (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
|
186 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 * 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
|
190 * "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
|
191 * "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
|
192 * 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
|
193 * 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
|
194 * 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
|
195 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 * 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
|
197 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 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
|
200 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
|
201 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
|
202 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 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
|
204 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
214 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
|
215 #ifdef AMIGA |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 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
|
217 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
|
218 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
219 // 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
|
220 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
|
221 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
222 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
223 // 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
|
224 // value. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
225 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
|
226 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
|
227 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
|
228 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
229 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
|
230 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
232 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
|
233 (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
|
234 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
235 } |
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 // 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
|
238 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
|
239 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
|
240 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
241 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
|
242 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 // 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
|
244 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
|
245 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
|
246 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 // 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
|
248 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
|
249 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
250 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
|
251 && 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
|
252 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 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
|
254 || (!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
|
255 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 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
|
259 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 (*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
|
261 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
|
262 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
|
263 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 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
|
265 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 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
|
267 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
|
268 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 // 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
|
270 np = name; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 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
|
272 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 // 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
|
274 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
|
275 "\t "); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 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
|
278 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 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
|
281 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
283 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
284 // 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
|
285 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
|
286 (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
|
287 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 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
|
289 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 (*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
|
291 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
|
292 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
|
293 break; |
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 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
|
296 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
299 } |
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 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
|
302 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
|
303 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
|
304 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 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
|
306 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 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
|
308 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
|
309 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
|
310 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 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
|
313 verbose_leave(); |
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 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 #ifdef AMIGA |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 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
|
319 #endif |
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 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
|
322 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 |
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 * 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
|
326 * 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
|
327 * 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
|
328 * 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
|
329 * 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
|
330 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
331 * 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
|
332 * 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
|
333 * 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
|
334 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
335 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
336 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
|
337 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
|
338 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
|
339 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 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
|
341 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
342 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
343 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
|
344 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
|
345 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
346 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
|
347 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
|
348 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
349 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
|
350 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
|
351 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
352 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
|
353 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
354 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
|
355 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
|
356 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
|
357 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
358 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
|
359 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
|
360 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
|
361 } |
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 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
|
364 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
365 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
|
366 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
|
367 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
|
368 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
369 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
|
370 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
|
371 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
|
372 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
373 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
374 return done; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
375 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
378 * 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
|
379 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
380 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
381 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
|
382 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
|
383 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
384 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
|
385 void *cookie) |
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 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
|
388 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 * 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
|
392 * "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
|
393 * 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
|
394 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
395 * 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
|
396 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 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
|
399 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
400 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
|
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
404 * 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
|
405 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
406 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
407 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
|
408 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
409 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
|
410 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
411 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
412 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
413 #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
|
414 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
416 * 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
|
417 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
418 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
419 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
|
420 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
421 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
|
422 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
|
423 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
424 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
425 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
|
426 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 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
|
428 (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
|
429 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
|
430 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
431 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
432 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
433 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
434 * 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
|
435 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
436 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
437 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
|
438 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
439 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
|
440 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
|
441 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
|
442 int c; |
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 *new_rtp; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 int keep; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 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
|
454 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
|
455 int match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 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
|
457 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 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
|
459 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
|
460 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
|
461 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
462 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
|
463 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
465 // 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
|
466 // 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
|
467 // 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
|
468 // |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 // 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
|
470 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
|
471 *p4 = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
472 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
|
473 *p4 = c; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
474 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
|
475 return FAIL; |
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 // 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
|
478 // 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
|
479 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
|
480 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
|
481 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
|
482 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
483 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
|
484 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
485 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
|
486 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 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
|
488 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
|
489 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
490 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
|
491 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
|
492 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
|
493 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 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
|
495 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
|
496 if (match) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
497 // 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
|
498 insp = entry; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
499 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
500 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
501 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
|
502 && p > buf |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
503 && 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
|
504 && (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
|
505 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
506 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
|
507 // 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
|
508 // 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
|
509 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
|
510 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
|
511 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 } |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
515 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
|
516 // 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
|
517 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
|
518 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
519 // 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
|
520 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
|
521 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
|
522 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
|
523 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 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
|
528 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
529 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
530 // 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
|
531 // 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
|
532 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
|
533 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
|
534 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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 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
|
540 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
|
541 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
542 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
|
543 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
544 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
|
545 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
546 // 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
|
547 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
|
548 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
|
549 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
|
550 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
|
551 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
|
552 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
|
553 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
|
554 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
555 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
556 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
|
557 // 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
|
558 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
|
559 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 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
|
561 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 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
|
563 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
564 // 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
|
565 // {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
|
566 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
|
567 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
|
568 } |
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 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
|
571 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
|
572 retval = OK; |
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 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 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
|
576 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
|
577 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
|
578 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
579 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
580 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
581 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 * 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
|
583 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 static int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 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
|
586 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
587 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
|
588 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
|
589 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 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
|
591 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
|
592 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
|
593 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 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
|
595 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
596 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
|
597 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
|
598 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
|
599 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
600 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
|
601 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
|
602 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
603 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
604 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
|
605 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
606 // 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
|
607 // 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
|
608 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
|
609 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
610 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
|
611 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
|
612 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
|
613 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
|
614 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 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
|
616 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 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
|
618 retval = OK; |
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 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 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
|
622 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 } |
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 // 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
|
626 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
|
627 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
|
628 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
|
629 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
630 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
631 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
|
632 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 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
|
634 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 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
|
636 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
|
637 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
|
638 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 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
|
640 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 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
|
642 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
|
643 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 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
|
645 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
|
646 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
647 found = TRUE; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
648 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
649 } |
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 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
|
652 if (!found) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 // 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
|
654 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
|
655 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
656 } |
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 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
|
659 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
|
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 * 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
|
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 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
|
667 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 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
|
669 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
|
670 } |
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 * 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
|
674 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
675 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 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
|
677 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 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
|
679 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
|
680 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
|
681 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
683 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 * ":packloadall" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
685 * 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
|
686 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
687 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
688 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
|
689 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 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
|
691 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 // 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
|
693 // 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
|
694 // 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
|
695 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
|
696 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
|
697 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
698 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
699 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
700 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
701 * ":packadd[!] {name}" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
702 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
704 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
|
705 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
706 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
|
707 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
708 char *pat; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
709 int round; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
710 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
|
711 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
712 // 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
|
713 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
|
714 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
715 // 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
|
716 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
|
717 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
719 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
|
720 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
|
721 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
|
722 return; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 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
|
724 // 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
|
725 // 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
|
726 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
|
727 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
|
728 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
|
729 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
|
730 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
731 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
732 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
734 /* |
17978
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
735 * 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
|
736 * 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
|
737 */ |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
738 void |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
739 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
|
740 { |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
741 int i; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
742 int j; |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
743 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
|
744 |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
745 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
|
746 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
|
747 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
|
748 { |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
749 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
|
750 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
|
751 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
|
752 --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
|
753 } |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
754 } |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
755 |
8f4cc259ed7a
patch 8.1.1985: code for dealing with paths is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
756 /* |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
757 * 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
|
758 * 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
|
759 * '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
|
760 * 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
|
761 * '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
|
762 * 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
|
763 * '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
|
764 * "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
|
765 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 ExpandRTDir( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
768 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
|
769 int flags, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 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
|
771 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
|
772 char *dirnames[]) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
773 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 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
|
775 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
|
776 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
|
777 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
|
778 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
779 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
|
780 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
781 *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
|
782 *file = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 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
|
784 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
|
785 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 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
|
787 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
788 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
|
789 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
|
790 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
791 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
|
792 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
793 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
794 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
|
795 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
|
796 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
|
797 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
798 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
799 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
|
800 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
|
801 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
802 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
|
803 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
|
804 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
805 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
|
806 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
808 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
|
809 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
|
810 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
|
811 } |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 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
|
815 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
|
816 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 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
|
818 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
|
819 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
820 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
|
821 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 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
|
824 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
|
825 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
|
826 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 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
|
830 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 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
|
832 s = match; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 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
|
834 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
|
835 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
836 e -= 4; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
837 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
|
838 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
|
839 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
840 ++s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
841 *e = NUL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
842 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
|
843 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
844 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
845 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
846 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
|
847 return FAIL; |
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 // 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
|
850 // 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
|
851 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
|
852 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
853 *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
|
854 *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
|
855 return OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
859 * 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
|
860 * '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
|
861 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
862 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
863 ExpandPackAddDir( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
864 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
|
865 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
|
866 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
|
867 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
868 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
|
869 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
|
870 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
|
871 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
|
872 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
873 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
|
874 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
875 *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
|
876 *file = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 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
|
878 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
|
879 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
880 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
|
881 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
|
882 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
883 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
|
884 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
885 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 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
|
887 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
|
888 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
|
889 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 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
|
891 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
892 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
|
893 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
|
894 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
|
895 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
|
896 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
897 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
898 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
|
899 return FAIL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
900 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 // 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
|
902 // 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
|
903 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
|
904 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 *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
|
906 *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
|
907 return OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
908 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
909 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
910 static void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
911 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
|
912 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
913 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
|
914 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
|
915 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 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
|
917 // ":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
|
918 // 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
|
919 // for: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 // - ":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
|
921 // - 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
|
922 // - 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
|
923 // - 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
|
924 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
|
925 #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
|
926 || 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
|
927 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
928 ); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
929 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
930 // ":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
|
931 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
|
932 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
|
933 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
934 |
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 * ":source {fname}" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
937 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
938 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
939 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
|
940 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
941 #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
|
942 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
|
943 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
944 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
|
945 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
946 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
|
947 NULL, NULL, |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
948 (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
|
949 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
|
950 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
951 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
|
952 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
|
953 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
954 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
955 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
956 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
957 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
|
958 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
959 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
960 #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
|
961 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
962 * ":options" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
963 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
964 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
965 ex_options( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
966 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
|
967 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
968 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
|
969 (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
|
970 : (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
|
971 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
|
972 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
973 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
974 |
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 * ":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
|
977 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 * 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
|
980 * 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
|
981 * 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
|
982 * 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
|
983 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
984 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
|
985 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 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
|
987 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
|
988 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
|
989 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
|
990 #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
|
991 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
|
992 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
|
993 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
994 #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
|
995 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
|
996 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
|
997 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
|
998 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
|
999 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 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
|
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 #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
|
1004 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 * 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
|
1006 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 linenr_T * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 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
|
1009 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1010 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
|
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 * 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
|
1015 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 int * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 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
|
1018 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 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
|
1020 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 * 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
|
1024 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 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
|
1027 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 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
|
1029 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 #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
|
1033 # 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
|
1034 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 * 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
|
1036 * 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
|
1037 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 static FILE * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 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
|
1040 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 # ifdef MSWIN |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 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
|
1043 # else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 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
|
1045 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 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
|
1048 return NULL; |
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 # 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
|
1051 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 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
|
1053 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
|
1054 (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
|
1055 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 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
|
1059 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 * 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
|
1064 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 * 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
|
1066 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 * 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
|
1068 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 do_source( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 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
|
1072 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
|
1073 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
|
1074 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1075 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
|
1076 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
|
1077 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
|
1078 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
|
1079 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
|
1080 #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
|
1081 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
|
1082 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
|
1083 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
|
1084 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
|
1085 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
|
1086 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
|
1087 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1088 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
|
1089 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
|
1090 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1093 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
|
1094 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
|
1095 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 #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
|
1097 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
|
1098 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 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
|
1100 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 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
|
1102 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
|
1103 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 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
|
1105 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
|
1106 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
|
1107 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1108 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
|
1109 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 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
|
1111 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1114 // 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
|
1115 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
|
1116 && 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
|
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 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1119 #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
|
1120 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
|
1121 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1122 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1123 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1124 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
|
1125 // 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
|
1126 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
|
1127 FALSE, curbuf); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1128 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 } |
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 // 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
|
1132 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
|
1133 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1134 #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
|
1135 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
|
1136 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 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
|
1138 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 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
|
1140 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 // 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
|
1142 // 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
|
1143 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
|
1144 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
|
1145 && (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
|
1146 || 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
|
1147 || 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
|
1148 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 if (*p == '_') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 *p = '.'; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 *p = '_'; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 #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
|
1154 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
|
1155 #else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1156 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
|
1157 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 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
|
1162 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 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
|
1164 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 verbose_enter(); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1166 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
|
1167 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
|
1168 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 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
|
1170 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
|
1171 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1172 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 goto theend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1175 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1176 // 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
|
1177 // - 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
|
1178 // - 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
|
1179 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
|
1180 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 verbose_enter(); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1182 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
|
1183 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
|
1184 else |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1185 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
|
1186 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 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
|
1189 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
|
1190 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
|
1191 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
|
1192 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 #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
|
1194 // 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
|
1195 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
|
1196 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
|
1197 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1198 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
|
1199 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
|
1200 #endif |
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.nextline = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 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
|
1204 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
|
1205 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1206 #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
|
1207 // 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
|
1208 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
|
1209 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
|
1210 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
|
1211 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 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
|
1213 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1215 // 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
|
1216 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
|
1217 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 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
|
1220 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
|
1221 #endif |
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 #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
|
1224 # 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
|
1225 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
|
1226 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
|
1227 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 // 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
|
1230 // 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
|
1231 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
|
1232 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 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
|
1234 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
|
1235 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
|
1236 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 // 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
|
1238 // 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
|
1239 // 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
|
1240 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
|
1241 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 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
|
1243 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 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
|
1245 --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
|
1246 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 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
|
1248 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
|
1249 && ( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 // 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
|
1252 // 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
|
1253 // 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
|
1254 ((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
|
1255 && (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
|
1256 && 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
|
1257 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 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
|
1259 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1260 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 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
|
1262 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 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
|
1264 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
|
1265 (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
|
1266 goto almosttheend; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 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
|
1268 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 ++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
|
1270 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
|
1271 # 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
|
1272 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
|
1273 # endif |
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 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
|
1276 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
|
1277 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
|
1278 # ifdef UNIX |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 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
|
1280 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 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
|
1282 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
|
1283 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
|
1284 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 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
|
1287 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 // 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
|
1290 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
|
1291 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 # 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
|
1294 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
|
1295 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 int forceit; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 // 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
|
1299 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
|
1300 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 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
|
1302 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
|
1303 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 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
|
1305 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 ++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
|
1307 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
|
1308 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
|
1309 } |
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 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 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
|
1315 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 // 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
|
1317 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
|
1318 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
|
1319 && 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
|
1320 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 // 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
|
1322 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
|
1323 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
|
1324 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
|
1325 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
|
1326 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
|
1327 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 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
|
1329 firstline = p; |
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 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1332 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 // 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
|
1334 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
|
1335 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
|
1336 retval = OK; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 #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
|
1339 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
|
1340 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 // 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
|
1342 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
|
1343 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
|
1344 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 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
|
1346 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
|
1347 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
|
1348 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
|
1349 &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
|
1350 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1351 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 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
|
1355 emsg(_(e_interr)); |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1356 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
|
1357 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
|
1358 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 verbose_enter(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 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
|
1361 if (SOURCING_NAME != NULL) |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1362 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
|
1363 verbose_leave(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 #ifdef STARTUPTIME |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 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
|
1367 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 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
|
1369 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
|
1370 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
|
1371 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 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
|
1375 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
|
1376 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 #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
|
1378 // 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
|
1379 // sourced file. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 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
|
1381 && 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
|
1382 ++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
|
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 #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
|
1386 almosttheend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 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
|
1388 restore_funccal(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 # 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
|
1390 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
|
1391 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
|
1392 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 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
|
1395 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
|
1396 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
|
1397 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
|
1398 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 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
|
1400 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
|
1401 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 theend: |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 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
|
1404 return retval; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 } |
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 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
|
1408 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 * ":scriptnames" |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1412 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 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
|
1414 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 int i; |
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 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
|
1418 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 // :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
|
1420 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
|
1421 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
|
1422 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 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
|
1425 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
|
1426 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 return; |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 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
|
1431 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
|
1432 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1433 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
|
1434 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
|
1435 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
|
1436 } |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 # 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
|
1440 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 * 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
|
1442 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 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
|
1445 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1446 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1447 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 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
|
1449 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
|
1450 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
|
1451 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1453 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 * 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
|
1456 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1457 char_u * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1458 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
|
1459 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1460 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
|
1461 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
|
1462 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
|
1463 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
|
1464 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
|
1465 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
|
1466 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
|
1467 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
|
1468 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
|
1469 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
|
1470 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
|
1471 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1472 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1473 # 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
|
1474 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1475 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
|
1476 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1477 int i; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 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
|
1480 { |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1481 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
|
1482 # ifdef FEAT_PROFILE |
18225
6c3a8312486d
patch 8.1.2107: various memory leaks reported by asan
Bram Moolenaar <Bram@vim.org>
parents:
18080
diff
changeset
|
1483 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
|
1484 # endif |
18225
6c3a8312486d
patch 8.1.2107: various memory leaks reported by asan
Bram Moolenaar <Bram@vim.org>
parents:
18080
diff
changeset
|
1485 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 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
|
1487 } |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1488 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1489 void |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1490 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
|
1491 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1492 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
|
1493 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 # endif |
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 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 linenr_T |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 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
|
1500 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 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
|
1502 ? ((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
|
1503 : 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
|
1504 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1505 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 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
|
1507 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
|
1508 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 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
|
1510 int len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 int c; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1512 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
|
1513 #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
|
1514 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
|
1515 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 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
|
1517 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 // 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
|
1519 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
|
1520 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 // 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
|
1522 ++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
|
1523 for (;;) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1524 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 // 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
|
1526 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
|
1527 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 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
|
1529 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1530 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
|
1531 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
|
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 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
|
1534 #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
|
1535 // 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
|
1536 // 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
|
1537 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
|
1538 && 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
|
1539 && 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
|
1540 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1541 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
|
1542 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1543 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1544 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1545 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 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
|
1547 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
|
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 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
|
1550 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
|
1551 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1552 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 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
|
1554 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1555 #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
|
1556 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
|
1557 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
|
1558 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1559 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
|
1560 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
|
1561 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1562 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
|
1563 } |
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->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
|
1566 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1567 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
|
1568 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 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
|
1570 --len; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1571 --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
|
1572 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1573 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
|
1574 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1575 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
|
1576 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 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
|
1578 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
|
1579 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1580 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
|
1581 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
|
1582 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1583 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1584 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1585 // 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
|
1586 // 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
|
1587 // 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
|
1588 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
|
1589 ; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 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
|
1591 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1592 ++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
|
1593 continue; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1594 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1596 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
|
1597 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1598 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 // 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
|
1600 line_breakcheck(); |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1601 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1602 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 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
|
1605 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
|
1606 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1607 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
|
1608 return NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 * 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
|
1613 * 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
|
1614 * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1615 * 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
|
1616 * 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
|
1617 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1618 char_u * |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1619 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
|
1620 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1621 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
|
1622 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
|
1623 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
|
1624 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1625 #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
|
1626 // 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
|
1627 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
|
1628 { |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1629 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
|
1630 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
|
1631 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1632 # 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
|
1633 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
|
1634 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
|
1635 # endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1636 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1637 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1638 // 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
|
1639 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
|
1640 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1641 // 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
|
1642 // one now. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1643 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
|
1644 line = NULL; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1645 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
|
1646 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
|
1647 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1649 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
|
1650 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
|
1651 ++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
|
1652 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1653 #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
|
1654 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
|
1655 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
|
1656 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1657 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1658 // 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
|
1659 // 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
|
1660 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
|
1661 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1662 // 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
|
1663 --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
|
1664 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1665 // 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
|
1666 // 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
|
1667 // sp->nextline. |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 /* 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
|
1669 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
|
1670 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
|
1671 && (*(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
|
1672 || (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
|
1673 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1674 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
|
1675 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1676 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
|
1677 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
|
1678 if (*p == '\\') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 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
|
1680 for (;;) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1681 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1682 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
|
1683 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
|
1684 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
|
1685 break; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 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
|
1687 if (*p == '\\') |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1689 // 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
|
1690 // 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
|
1691 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
|
1692 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1693 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
|
1694 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
|
1695 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1696 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
|
1697 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1698 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
|
1699 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1700 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
|
1701 break; |
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 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
|
1704 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
|
1705 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
|
1706 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1707 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1708 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1709 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
|
1710 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 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
|
1712 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1713 // 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
|
1714 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
|
1715 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
|
1716 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1717 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
|
1718 line = s; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1719 } |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1722 #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
|
1723 // 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
|
1724 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
|
1725 { |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1726 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
|
1727 // Find next breakpoint. |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18410
diff
changeset
|
1728 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
|
1729 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
|
1730 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1732 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1733 return line; |
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 |
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 * ":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
|
1738 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1740 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
|
1741 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1742 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
|
1743 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
|
1744 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1745 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
|
1746 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 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
|
1748 return; |
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 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1751 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
|
1752 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 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
|
1754 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
|
1755 return; |
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 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1758 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
|
1759 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1760 // 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
|
1761 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
|
1762 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
|
1763 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1764 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
|
1765 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
|
1766 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1767 |
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 * ":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
|
1770 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1771 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1772 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
|
1773 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1774 #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
|
1775 int nr; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1776 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1777 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
|
1778 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1779 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
|
1780 return; |
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 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
|
1784 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
|
1785 emsg(_(e_invarg)); |
18080
a6d218f99ff7
patch 8.1.2035: recognizing octal numbers is confusing
Bram Moolenaar <Bram@vim.org>
parents:
17978
diff
changeset
|
1786 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
|
1787 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
|
1788 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1789 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
|
1790 #endif |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1791 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1792 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 #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
|
1794 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1795 * ":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
|
1796 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1797 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1798 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
|
1799 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1800 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
|
1801 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
|
1802 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1803 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
|
1804 } |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1807 * 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
|
1808 * 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
|
1809 * 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
|
1810 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1811 void |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1812 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
|
1813 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1814 int idx; |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1815 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1816 if (reanimate) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1817 ((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
|
1818 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
|
1819 |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1820 // 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
|
1821 // 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
|
1822 // 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
|
1823 // 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
|
1824 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
|
1825 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
|
1826 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1827 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
|
1828 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
|
1829 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1830 else |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1831 ((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
|
1832 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
|
1833 } |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1834 |
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 /* |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1837 * 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
|
1838 * 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
|
1839 * 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
|
1840 */ |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1841 int |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1842 source_finished( |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1843 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
|
1844 void *cookie) |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 { |
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1846 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
|
1847 && ((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
|
1848 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
|
1849 } |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1850 |
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 * 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
|
1853 * 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
|
1854 * 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
|
1855 */ |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1856 char_u * |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1857 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
|
1858 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1859 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
|
1860 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
|
1861 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1862 // 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
|
1863 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
|
1864 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
|
1865 return NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1866 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
|
1867 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
|
1868 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
|
1869 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
|
1870 *p = '/'; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1871 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
|
1872 return scriptname; |
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 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1875 /* |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1876 * 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
|
1877 * 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
|
1878 */ |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1879 int |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1880 script_autoload( |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1881 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
|
1882 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
|
1883 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1884 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
|
1885 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
|
1886 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
|
1887 int i; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1888 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1889 // 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
|
1890 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
|
1891 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
|
1892 return FALSE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1893 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1894 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
|
1895 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
|
1896 return FALSE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1897 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1898 // 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
|
1899 // "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
|
1900 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
|
1901 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
|
1902 break; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1903 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
|
1904 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
|
1905 else |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1906 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1907 // 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
|
1908 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
|
1909 { |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1910 ((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
|
1911 tofree = NULL; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1912 } |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1913 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1914 // 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
|
1915 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
|
1916 ret = TRUE; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1917 } |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1918 |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1919 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
|
1920 return ret; |
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17861
diff
changeset
|
1921 } |
17861
0a5c615cd949
patch 8.1.1927: code for dealing with script files is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1922 #endif |