annotate src/ex_docmd.c @ 11757:74abb6c84984 v8.0.0761

patch 8.0.0761: options not set properly for a terminal buffer commit https://github.com/vim/vim/commit/1f2903c43109b16594d141a730659317b15f388d Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 23 19:51:01 2017 +0200 patch 8.0.0761: options not set properly for a terminal buffer Problem: Options of a buffer for a terminal window are not set properly. Solution: Add "terminal" value for 'buftype'. Make 'buftype' and 'bufhidden' not depend on the quickfix feature. Also set the buffer name and show "running" or "finished" in the window title.
author Christian Brabandt <cb@256bit.org>
date Sun, 23 Jul 2017 20:00:05 +0200
parents 70bc7b107610
children 1c1cb1e9b7b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9980
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * ex_docmd.c: functions for executing an Ex command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 static int quitmore = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 static int ex_pressedreturn = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 #ifndef FEAT_PRINTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 # define ex_hardcopy ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 typedef struct ucmd
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 char_u *uc_name; /* The command name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 long_u uc_argt; /* The argument type */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 char_u *uc_rep; /* The command's replacement string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 long uc_def; /* The default value for a range/count */
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
29 int uc_compl; /* completion type */
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
30 int uc_addr_type; /* The command's address type */
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
31 # ifdef FEAT_EVAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 scid_T uc_scriptID; /* SID where the command was defined */
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
33 # ifdef FEAT_CMDL_COMPL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 char_u *uc_compl_arg; /* completion argument if any */
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
35 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 } ucmd_T;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 #define UC_BUFFER 1 /* -buffer: local to current buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
296
00b73c762d77 updated for version 7.0078
vimboss
parents: 291
diff changeset
41 static garray_T ucmds = {0, 0, sizeof(ucmd_T), 4, NULL};
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 #define USER_CMD(i) (&((ucmd_T *)(ucmds.ga_data))[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 #define USER_CMD_GA(gap, i) (&((ucmd_T *)((gap)->ga_data))[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
46 static void do_ucmd(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
47 static void ex_command(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
48 static void ex_delcommand(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 # ifdef FEAT_CMDL_COMPL
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
50 static char_u *get_user_command_name(int idx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
53 /* Wether a command index indicates a user command. */
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
54 # define IS_USER_CMDIDX(idx) ((int)(idx) < 0)
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
55
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 # define ex_command ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 # define ex_comclear ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 # define ex_delcommand ex_ni
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
60 /* Wether a command index indicates a user command. */
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
61 # define IS_USER_CMDIDX(idx) (FALSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
64 static int compute_buffer_local_count(int addr_type, int lnum, int local);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 #ifdef FEAT_EVAL
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
66 static char_u *do_one_cmd(char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 #else
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
68 static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 static int if_level = 0; /* depth in :if */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
71 static void append_command(char_u *cmd);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
72 static char_u *find_command(exarg_T *eap, int *full);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
73
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
74 static void ex_abbreviate(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
75 static void ex_map(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
76 static void ex_unmap(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
77 static void ex_mapclear(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
78 static void ex_abclear(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 #ifndef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 # define ex_emenu ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 # define ex_menu ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 # define ex_menutranslate ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 #ifdef FEAT_AUTOCMD
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
85 static void ex_autocmd(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
86 static void ex_doautocmd(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 # define ex_autocmd ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 # define ex_doautocmd ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 # define ex_doautoall ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 #ifdef FEAT_LISTCMDS
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
93 static void ex_bunload(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
94 static void ex_buffer(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
95 static void ex_bmodified(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
96 static void ex_bnext(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
97 static void ex_bprevious(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
98 static void ex_brewind(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
99 static void ex_blast(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 # define ex_bunload ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 # define ex_buffer ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 # define ex_bmodified ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 # define ex_bnext ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 # define ex_bprevious ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 # define ex_brewind ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 # define ex_blast ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 # define buflist_list ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 # define ex_checktime ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 #if !defined(FEAT_LISTCMDS) || !defined(FEAT_WINDOWS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 # define ex_buffer_all ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
114 static char_u *getargcmd(char_u **);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
115 static char_u *skip_cmd_arg(char_u *p, int rembs);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
116 static int getargopt(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 #ifndef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 # define ex_make ex_ni
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
119 # define ex_cbuffer ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 # define ex_cc ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 # define ex_cnext ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 # define ex_cfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 # define qf_list ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 # define qf_age ex_ni
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9536
diff changeset
125 # define qf_history ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 # define ex_helpgrep ex_ni
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
127 # define ex_vimgrep ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #if !defined(FEAT_QUICKFIX) || !defined(FEAT_WINDOWS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 # define ex_cclose ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 # define ex_copen ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 # define ex_cwindow ex_ni
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9284
diff changeset
133 # define ex_cbottom ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 #endif
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
135 #if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
136 # define ex_cexpr ex_ni
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
137 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
139 static int check_more(int, int);
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
140 static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int to_other_file, int address_count);
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
141 static void get_flags(exarg_T *eap);
2333
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
142 #if !defined(FEAT_PERL) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
143 || !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
144 || !defined(FEAT_TCL) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
145 || !defined(FEAT_RUBY) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
146 || !defined(FEAT_LUA) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
147 || !defined(FEAT_MZSCHEME)
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
148 # define HAVE_EX_SCRIPT_NI
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
149 static void ex_script_ni(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
150 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
151 static char_u *invalid_range(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
152 static void correct_range(exarg_T *eap);
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
153 #ifdef FEAT_QUICKFIX
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
154 static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
155 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
156 static char_u *repl_cmdline(exarg_T *eap, char_u *src, int srclen, char_u *repl, char_u **cmdlinep);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
157 static void ex_highlight(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
158 static void ex_colorscheme(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
159 static void ex_quit(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
160 static void ex_cquit(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
161 static void ex_quit_all(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 #ifdef FEAT_WINDOWS
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
163 static void ex_close(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
164 static void ex_win_close(int forceit, win_T *win, tabpage_T *tp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
165 static void ex_only(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
166 static void ex_resize(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
167 static void ex_stag(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
168 static void ex_tabclose(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
169 static void ex_tabonly(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
170 static void ex_tabnext(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
171 static void ex_tabmove(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
172 static void ex_tabs(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 # define ex_close ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 # define ex_only ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 # define ex_all ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 # define ex_resize ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 # define ex_splitview ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 # define ex_stag ex_ni
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
180 # define ex_tabnext ex_ni
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
181 # define ex_tabmove ex_ni
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
182 # define ex_tabs ex_ni
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
183 # define ex_tabclose ex_ni
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
184 # define ex_tabonly ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
187 static void ex_pclose(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
188 static void ex_ptag(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
189 static void ex_pedit(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 # define ex_pclose ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 # define ex_ptag ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 # define ex_pedit ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
195 static void ex_hide(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
196 static void ex_stop(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
197 static void ex_exit(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
198 static void ex_print(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 #ifdef FEAT_BYTEOFF
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
200 static void ex_goto(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 # define ex_goto ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
204 static void ex_shell(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
205 static void ex_preserve(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
206 static void ex_recover(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 #ifndef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 # define ex_argedit ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 # define ex_argadd ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 # define ex_argdelete ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 # define ex_listdo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
213 static void ex_mode(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
214 static void ex_wrongmodifier(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
215 static void ex_find(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
216 static void ex_open(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
217 static void ex_edit(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 #if !defined(FEAT_GUI) && !defined(FEAT_CLIENTSERVER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 # define ex_drop ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 #ifndef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 # define ex_gui ex_nogui
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
223 static void ex_nogui(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 #if defined(FEAT_GUI_W32) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
226 static void ex_tearoff(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 # define ex_tearoff ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 #endif
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
230 #if (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_GTK)) && defined(FEAT_MENU)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
231 static void ex_popup(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 # define ex_popup ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 #ifndef FEAT_GUI_MSWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 # define ex_simalt ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 #endif
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
238 #if !defined(FEAT_GUI_MSWIN) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_MOTIF)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 # define gui_mch_find_dialog ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 # define gui_mch_replace_dialog ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 #endif
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
242 #if !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 # define ex_helpfind ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 #ifndef FEAT_CSCOPE
10373
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
246 # define ex_cscope ex_ni
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
247 # define ex_scscope ex_ni
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
248 # define ex_cstag ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 #ifndef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 # define ex_syntax ex_ni
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2238
diff changeset
252 # define ex_ownsyntax ex_ni
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
253 #endif
4766
ec24ff78a79c updated for version 7.3.1130
Bram Moolenaar <bram@vim.org>
parents: 4764
diff changeset
254 #if !defined(FEAT_SYN_HL) || !defined(FEAT_PROFILE)
4764
f824cb97eb92 updated for version 7.3.1129
Bram Moolenaar <bram@vim.org>
parents: 4710
diff changeset
255 # define ex_syntime ex_ni
f824cb97eb92 updated for version 7.3.1129
Bram Moolenaar <bram@vim.org>
parents: 4710
diff changeset
256 #endif
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
257 #ifndef FEAT_SPELL
310
04bf54c587f4 updated for version 7.0082
vimboss
parents: 296
diff changeset
258 # define ex_spell ex_ni
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
259 # define ex_mkspell ex_ni
351
a89aebda7f37 updated for version 7.0091
vimboss
parents: 344
diff changeset
260 # define ex_spelldump ex_ni
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
261 # define ex_spellinfo ex_ni
372
a698eb686ded updated for version 7.0096
vimboss
parents: 358
diff changeset
262 # define ex_spellrepall ex_ni
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
263 #endif
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
264 #ifndef FEAT_PERSISTENT_UNDO
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
265 # define ex_rundo ex_ni
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
266 # define ex_wundo ex_ni
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
267 #endif
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
268 #ifndef FEAT_LUA
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
269 # define ex_lua ex_script_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
270 # define ex_luado ex_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
271 # define ex_luafile ex_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
272 #endif
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
273 #ifndef FEAT_MZSCHEME
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
274 # define ex_mzscheme ex_script_ni
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
275 # define ex_mzfile ex_ni
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
276 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 #ifndef FEAT_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 # define ex_perl ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 # define ex_perldo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 #ifndef FEAT_PYTHON
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 # define ex_python ex_script_ni
4435
9b800f0a757f updated for version 7.3.966
Bram Moolenaar <bram@vim.org>
parents: 4417
diff changeset
283 # define ex_pydo ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 # define ex_pyfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 #endif
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
286 #ifndef FEAT_PYTHON3
2350
06feaf4fe36a Rename some "python3" symbols to "py3", as the command name.
Bram Moolenaar <bram@vim.org>
parents: 2340
diff changeset
287 # define ex_py3 ex_script_ni
4417
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4365
diff changeset
288 # define ex_py3do ex_ni
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
289 # define ex_py3file ex_ni
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
290 #endif
10722
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
291 #if !defined(FEAT_PYTHON) && !defined(FEAT_PYTHON3)
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
292 # define ex_pyx ex_script_ni
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
293 # define ex_pyxdo ex_ni
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
294 # define ex_pyxfile ex_ni
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
295 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 #ifndef FEAT_TCL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 # define ex_tcl ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 # define ex_tcldo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 # define ex_tclfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 #ifndef FEAT_RUBY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 # define ex_ruby ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 # define ex_rubydo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 # define ex_rubyfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 #ifndef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 # define ex_loadkeymap ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
309 static void ex_swapname(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
310 static void ex_syncbind(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
311 static void ex_read(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
312 static void ex_pwd(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
313 static void ex_equal(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
314 static void ex_sleep(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
315 static void do_exmap(exarg_T *eap, int isabbrev);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
316 static void ex_winsize(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 #ifdef FEAT_WINDOWS
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
318 static void ex_wincmd(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 # define ex_wincmd ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 #endif
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
322 #if defined(FEAT_GUI) || defined(UNIX) || defined(VMS) || defined(MSWIN)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
323 static void ex_winpos(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 # define ex_winpos ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
327 static void ex_operators(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
328 static void ex_put(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
329 static void ex_copymove(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
330 static void ex_submagic(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
331 static void ex_join(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
332 static void ex_at(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
333 static void ex_bang(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
334 static void ex_undo(exarg_T *eap);
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
335 #ifdef FEAT_PERSISTENT_UNDO
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
336 static void ex_wundo(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
337 static void ex_rundo(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
338 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
339 static void ex_redo(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
340 static void ex_later(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
341 static void ex_redir(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
342 static void ex_redrawstatus(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
343 static void close_redir(void);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
344 static void ex_mkrc(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
345 static void ex_mark(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 #ifdef FEAT_USR_CMDS
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
347 static char_u *uc_fun_cmd(void);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
348 static char_u *find_ucmd(exarg_T *eap, char_u *p, int *full, expand_T *xp, int *compl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
350 static void ex_startinsert(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
351 static void ex_stopinsert(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 #ifdef FEAT_FIND_ID
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
353 static void ex_checkpath(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
354 static void ex_findpat(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 # define ex_findpat ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 # define ex_checkpath ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 #if defined(FEAT_FIND_ID) && defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
360 static void ex_psearch(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 # define ex_psearch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
364 static void ex_tag(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
365 static void ex_tag_cmd(exarg_T *eap, char_u *name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 # define ex_scriptnames ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 # define ex_finish ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 # define ex_echo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 # define ex_echohl ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 # define ex_execute ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 # define ex_call ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 # define ex_if ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 # define ex_endif ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 # define ex_else ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 # define ex_while ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 # define ex_continue ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 # define ex_break ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 # define ex_endwhile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 # define ex_throw ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 # define ex_try ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 # define ex_catch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 # define ex_finally ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 # define ex_endtry ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 # define ex_endfunction ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 # define ex_let ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 # define ex_unlet ex_ni
146
5cc0aca13a3f updated for version 7.0046
vimboss
parents: 128
diff changeset
388 # define ex_lockvar ex_ni
5cc0aca13a3f updated for version 7.0046
vimboss
parents: 128
diff changeset
389 # define ex_unlockvar ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 # define ex_function ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 # define ex_delfunction ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 # define ex_return ex_ni
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
393 # define ex_oldfiles ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
395 static char_u *arg_all(void);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 #ifdef FEAT_SESSION
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
397 static int makeopens(FILE *fd, char_u *dirnow);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
398 static int put_view(FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int current_arg_idx);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
399 static void ex_loadview(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
400 static char_u *get_view_file(int c);
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
401 static int did_lcd; /* whether ":lcd" was produced for a session */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 # define ex_loadview ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 # define ex_compiler ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 #ifdef FEAT_VIMINFO
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
409 static void ex_viminfo(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 # define ex_viminfo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
413 static void ex_behave(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 #ifdef FEAT_AUTOCMD
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
415 static void ex_filetype(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
416 static void ex_setfiletype(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 # define ex_filetype ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 # define ex_setfiletype ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 #ifndef FEAT_DIFF
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 14
diff changeset
422 # define ex_diffoff ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 # define ex_diffpatch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 # define ex_diffgetput ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 # define ex_diffsplit ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 # define ex_diffthis ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 # define ex_diffupdate ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
429 static void ex_digraphs(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
430 static void ex_set(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 #if !defined(FEAT_EVAL) || !defined(FEAT_AUTOCMD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 # define ex_options ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 #ifdef FEAT_SEARCH_EXTRA
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
435 static void ex_nohlsearch(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
436 static void ex_match(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 # define ex_nohlsearch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 # define ex_match ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 #ifdef FEAT_CRYPT
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
442 static void ex_X(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 # define ex_X ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 #ifdef FEAT_FOLDING
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
447 static void ex_fold(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
448 static void ex_foldopen(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
449 static void ex_folddo(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 # define ex_fold ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 # define ex_foldopen ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 # define ex_folddo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 #if !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 # define ex_language ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 #ifndef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 # define ex_sign ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 #ifndef FEAT_SUN_WORKSHOP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 # define ex_wsverb ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 #endif
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
465 #ifndef FEAT_NETBEANS_INTG
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2180
diff changeset
466 # define ex_nbclose ex_ni
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
467 # define ex_nbkey ex_ni
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2180
diff changeset
468 # define ex_nbstart ex_ni
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
469 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 # define ex_debug ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 # define ex_breakadd ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 # define ex_debuggreedy ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 # define ex_breakdel ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 # define ex_breaklist ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 #ifndef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 # define ex_history ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 #ifndef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 # define ex_jumps ex_ni
9284
78712a2f687a commit https://github.com/vim/vim/commit/2d35899721da0e9359a9fe1059554f8c4ea7f0c1
Christian Brabandt <cb@256bit.org>
parents: 9260
diff changeset
484 # define ex_clearjumps ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 # define ex_changes ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
488 #ifndef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
489 # define ex_profile ex_ni
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
490 #endif
11621
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
491 #ifndef FEAT_TERMINAL
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
492 # define ex_terminal ex_ni
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
493 #endif
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
494
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 * Declare cmdnames[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 #define DO_DECLARE_EXCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 #include "ex_cmds.h"
11374
889da8649221 patch 8.0.0572: building the command table requires Perl
Christian Brabandt <cb@256bit.org>
parents: 11258
diff changeset
500 #include "ex_cmdidxs.h"
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
501
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 static char_u dollar_command[2] = {'$', 0};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 #ifdef FEAT_EVAL
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
506 /* Struct for storing a line inside a while/for loop */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 char_u *line; /* command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 linenr_T lnum; /* sourcing_lnum of the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 } wcmd_T;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
514 * Structure used to store info for line position in a while or for loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 * This is required, because do_one_cmd() may invoke ex_function(), which
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
516 * reads more lines that may come from the while/for loop.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
517 */
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
518 struct loop_cookie
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 garray_T *lines_gap; /* growarray with line info */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 int current_line; /* last read line from growarray */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 int repeating; /* TRUE when looping a second time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 /* When "repeating" is FALSE use "getline" and "cookie" to get lines */
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
524 char_u *(*getline)(int, void *, int);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 void *cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
528 static char_u *get_loop_line(int c, void *cookie, int indent);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
529 static int store_loop_line(garray_T *gap, char_u *line);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
530 static void free_cmdlines(garray_T *gap);
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
531
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
532 /* Struct to save a few things while debugging. Used in do_cmdline() only. */
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
533 struct dbg_stuff
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
534 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
535 int trylevel;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
536 int force_abort;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
537 except_T *caught_stack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
538 char_u *vv_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
539 char_u *vv_throwpoint;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
540 int did_emsg;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
541 int got_int;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
542 int did_throw;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
543 int need_rethrow;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
544 int check_cstack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
545 except_T *current_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
546 };
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
547
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
548 static void save_dbg_stuff(struct dbg_stuff *dsp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
549 static void restore_dbg_stuff(struct dbg_stuff *dsp);
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
550
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
551 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
552 save_dbg_stuff(struct dbg_stuff *dsp)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
553 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
554 dsp->trylevel = trylevel; trylevel = 0;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
555 dsp->force_abort = force_abort; force_abort = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
556 dsp->caught_stack = caught_stack; caught_stack = NULL;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
557 dsp->vv_exception = v_exception(NULL);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
558 dsp->vv_throwpoint = v_throwpoint(NULL);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
559
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
560 /* Necessary for debugging an inactive ":catch", ":finally", ":endtry" */
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
561 dsp->did_emsg = did_emsg; did_emsg = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
562 dsp->got_int = got_int; got_int = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
563 dsp->did_throw = did_throw; did_throw = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
564 dsp->need_rethrow = need_rethrow; need_rethrow = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
565 dsp->check_cstack = check_cstack; check_cstack = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
566 dsp->current_exception = current_exception; current_exception = NULL;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
567 }
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
568
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
569 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
570 restore_dbg_stuff(struct dbg_stuff *dsp)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
571 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
572 suppress_errthrow = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
573 trylevel = dsp->trylevel;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
574 force_abort = dsp->force_abort;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
575 caught_stack = dsp->caught_stack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
576 (void)v_exception(dsp->vv_exception);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
577 (void)v_throwpoint(dsp->vv_throwpoint);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
578 did_emsg = dsp->did_emsg;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
579 got_int = dsp->got_int;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
580 did_throw = dsp->did_throw;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
581 need_rethrow = dsp->need_rethrow;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
582 check_cstack = dsp->check_cstack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
583 current_exception = dsp->current_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
584 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 * do_exmode(): Repeatedly get commands for the "Ex" mode, until the ":vi"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 * command is given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
592 do_exmode(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
593 int improved) /* TRUE for "improved Ex" mode */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 int save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 int prev_msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 linenr_T prev_line;
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10875
diff changeset
598 varnumber_T changedtick;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
599
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
600 if (improved)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
601 exmode_active = EXMODE_VIM;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
602 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
603 exmode_active = EXMODE_NORMAL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
604 State = NORMAL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
605
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
606 /* When using ":global /pat/ visual" and then "Q" we return to continue
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
607 * the :global command. */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
608 if (global_busy)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
609 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 save_msg_scroll = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 ++RedrawingDisabled; /* don't redisplay the window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 ++no_wait_return; /* don't wait for return */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 /* Ignore scrollbar and mouse events in Ex mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 ++hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 MSG(_("Entering Ex mode. Type \"visual\" to go to Normal mode."));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 while (exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 {
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
622 /* Check for a ":normal" command and no more characters left. */
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
623 if (ex_normal_busy > 0 && typebuf.tb_len == 0)
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
624 {
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
625 exmode_active = FALSE;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
626 break;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
627 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 msg_scroll = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 ex_pressedreturn = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 ex_no_reprint = FALSE;
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10889
diff changeset
632 changedtick = CHANGEDTICK(curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 prev_msg_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 prev_line = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 if (improved)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 do_cmdline(NULL, getexline, NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 do_cmdline(NULL, getexmodeline, NULL, DOCMD_NOWAIT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 lines_left = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
644 if ((prev_line != curwin->w_cursor.lnum
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10889
diff changeset
645 || changedtick != CHANGEDTICK(curbuf)) && !ex_no_reprint)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
646 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
647 if (curbuf->b_ml.ml_flags & ML_EMPTY)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
648 EMSG(_(e_emptybuf));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
649 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
650 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
651 if (ex_pressedreturn)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
652 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
653 /* go up one line, to overwrite the ":<CR>" line, so the
1441
21b11491a33f updated for version 7.1-156
vimboss
parents: 1427
diff changeset
654 * output doesn't contain empty lines. */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
655 msg_row = prev_msg_row;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
656 if (prev_msg_row == Rows - 1)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
657 msg_row--;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
658 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
659 msg_col = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
660 print_line_no_prefix(curwin->w_cursor.lnum, FALSE, FALSE);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
661 msg_clr_eos();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
662 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
663 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
664 else if (ex_pressedreturn && !ex_no_reprint) /* must be at EOF */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
665 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
666 if (curbuf->b_ml.ml_flags & ML_EMPTY)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
667 EMSG(_(e_emptybuf));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
668 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
669 EMSG(_("E501: At end-of-file"));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
670 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 --hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 update_screen(CLEAR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 * Execute a simple command line. Used for translated commands like "*".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
687 do_cmdline_cmd(char_u *cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 return do_cmdline(cmd, NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 * do_cmdline(): execute one Ex command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 * 1. Execute "cmdline" when it is not NULL.
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
697 * If "cmdline" is NULL, or more lines are needed, fgetline() is used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 * 2. Split up in parts separated with '|'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 * This function can be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 * flags:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 * DOCMD_VERBOSE - The command will be included in the error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 * DOCMD_NOWAIT - Don't call wait_return() and friends.
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
705 * DOCMD_REPEAT - Repeat execution until fgetline() returns NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 * DOCMD_KEYTYPED - Don't reset KeyTyped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 * return FAIL if cmdline could not be executed, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
713 do_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
714 char_u *cmdline,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
715 char_u *(*fgetline)(int, void *, int),
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
716 void *cookie, /* argument for fgetline() */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
717 int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 char_u *next_cmdline; /* next cmd to execute */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 char_u *cmdline_copy = NULL; /* copy of cmd line */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
721 int used_getline = FALSE; /* used "fgetline" to obtain command */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 static int recursive = 0; /* recursive depth */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 int msg_didout_before_start = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 int count = 0; /* line number count */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 int did_inc = FALSE; /* incremented RedrawingDisabled */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 int retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 struct condstack cstack; /* conditional stack */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
729 garray_T lines_ga; /* keep lines for ":while"/":for" */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 int current_line = 0; /* active line in lines_ga */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 char_u *fname = NULL; /* function or script name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732 linenr_T *breakpoint = NULL; /* ptr to breakpoint field in cookie */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 int *dbg_tick = NULL; /* ptr to dbg_tick field in cookie */
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
734 struct dbg_stuff debug_saved; /* saved things for debug mode */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 int initial_trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 struct msglist **saved_msg_list = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 struct msglist *private_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
739 /* "fgetline" and "cookie" passed to do_one_cmd() */
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
740 char_u *(*cmd_getline)(int, void *, int);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 void *cmd_cookie;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
742 struct loop_cookie cmd_loop_cookie;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 void *real_cookie;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
744 int getline_is_func;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 #else
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
746 # define cmd_getline fgetline
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 # define cmd_cookie cookie
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 static int call_depth = 0; /* recursiveness */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 /* For every pair of do_cmdline()/do_one_cmd() calls, use an extra memory
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 * location for storing error messages to be converted to an exception.
84
60834e43d187 updated for version 7.0034
vimboss
parents: 77
diff changeset
754 * This ensures that the do_errthrow() call in do_one_cmd() does not
60834e43d187 updated for version 7.0034
vimboss
parents: 77
diff changeset
755 * combine the messages stored by an earlier invocation of do_one_cmd()
60834e43d187 updated for version 7.0034
vimboss
parents: 77
diff changeset
756 * with the command name of the later one. This would happen when
60834e43d187 updated for version 7.0034
vimboss
parents: 77
diff changeset
757 * BufWritePost autocommands are executed after a write error. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 saved_msg_list = msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 msg_list = &private_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 private_msg_list = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 /* It's possible to create an endless loop with ":execute", catch that
10488
89200fa1d174 commit https://github.com/vim/vim/commit/777b30f827bcbe10a40640b1bf0361cb93a16be1
Christian Brabandt <cb@256bit.org>
parents: 10484
diff changeset
764 * here. The value of 200 allows nested function calls, ":source", etc.
89200fa1d174 commit https://github.com/vim/vim/commit/777b30f827bcbe10a40640b1bf0361cb93a16be1
Christian Brabandt <cb@256bit.org>
parents: 10484
diff changeset
765 * Allow 200 or 'maxfuncdepth', whatever is larger. */
10490
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
766 if (call_depth >= 200
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
767 #ifdef FEAT_EVAL
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
768 && call_depth >= p_mfd
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
769 #endif
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
770 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 EMSG(_("E169: Command too recursive"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 /* When converting to an exception, we do not include the command name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 * since this is not an error of the specific command. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 do_errthrow((struct condstack *)NULL, (char_u *)NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 msg_list = saved_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 ++call_depth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 cstack.cs_idx = -1;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
785 cstack.cs_looplevel = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 cstack.cs_trylevel = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 cstack.cs_emsg_silent_list = NULL;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
788 cstack.cs_lflags = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
791 real_cookie = getline_cookie(fgetline, cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 /* Inside a function use a higher nesting level. */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
794 getline_is_func = getline_equal(fgetline, cookie, get_func_line);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
795 if (getline_is_func && ex_nesting_level == func_level(real_cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 ++ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 /* Get the function or script name and the address where the next breakpoint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 * line and the debug tick for a function or script are stored. */
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
800 if (getline_is_func)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 fname = func_name(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 breakpoint = func_breakpoint(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 dbg_tick = func_dbg_tick(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 }
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
806 else if (getline_equal(fgetline, cookie, getsourceline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 fname = sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 breakpoint = source_breakpoint(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 dbg_tick = source_dbg_tick(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 * Initialize "force_abort" and "suppress_errthrow" at the top level.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 if (!recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 force_abort = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 suppress_errthrow = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 * If requested, store and reset the global values controlling the
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
824 * exception handling (used when debugging). Otherwise clear it to avoid
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
825 * a bogus compiler warning when the optimizer uses inline functions...
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 */
878
64be6e0b070a updated for version 7.0-004
vimboss
parents: 866
diff changeset
827 if (flags & DOCMD_EXCRESET)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
828 save_dbg_stuff(&debug_saved);
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
829 else
7133
48ce650e8a27 commit https://github.com/vim/vim/commit/69b67f7e774dc212e8c97495ee81c601b8a89ac2
Christian Brabandt <cb@256bit.org>
parents: 7109
diff changeset
830 vim_memset(&debug_saved, 0, sizeof(debug_saved));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 initial_trylevel = trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 * "did_throw" will be set to TRUE when an exception is being thrown.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
836 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 did_throw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 * "did_emsg" will be set to TRUE when emsg() is used, in which case we
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
841 * cancel the whole command line, and any if/endif or loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 * If force_abort is set, we cancel everything.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 * KeyTyped is only set when calling vgetc(). Reset it here when not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 * calling vgetc() (sourced command lines).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
850 if (!(flags & DOCMD_KEYTYPED)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
851 && !getline_equal(fgetline, cookie, getexline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 KeyTyped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 * Continue executing command lines:
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
856 * - when inside an ":if", ":while" or ":for"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 * - for multiple commands on one line, separated with '|'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 * - when repeating until there are no more lines (for ":source")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 next_cmdline = cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
863 #ifdef FEAT_EVAL
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
864 getline_is_func = getline_equal(fgetline, cookie, get_func_line);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
865 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
866
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
867 /* stop skipping cmds for an error msg after all endif/while/for */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 if (next_cmdline == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 && !force_abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 && cstack.cs_idx < 0
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
872 && !(getline_is_func && func_has_abort(real_cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
878 * 1. If repeating a line in a loop, get a line from lines_ga.
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
879 * 2. If no line given: Get an allocated line with fgetline().
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 * 3. If a line is given: Make a copy, so we can mess with it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 /* 1. If repeating, get a previous line from lines_ga. */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
885 if (cstack.cs_looplevel > 0 && current_line < lines_ga.ga_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 /* Each '|' separated command is stored separately in lines_ga, to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 * be able to jump to it. Don't use next_cmdline now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 vim_free(cmdline_copy);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 cmdline_copy = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 /* Check if a function has returned or, unless it has an unclosed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 * try conditional, aborted. */
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
894 if (getline_is_func)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
895 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
896 # ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
897 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
898 func_line_end(real_cookie);
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
899 # endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
900 if (func_has_ended(real_cookie))
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
901 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
902 retval = FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
903 break;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
904 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
905 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
906 #ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
907 else if (do_profiling == PROF_YES
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
908 && getline_equal(fgetline, cookie, getsourceline))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
909 script_line_end();
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
910 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 /* Check if a sourced file hit a ":finish" command. */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
913 if (source_finished(fgetline, cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 /* If breakpoints have been added/deleted need to check for it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 if (breakpoint != NULL && dbg_tick != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 && *dbg_tick != debug_tick)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
924 getline_equal(fgetline, cookie, getsourceline),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 next_cmdline = ((wcmd_T *)(lines_ga.ga_data))[current_line].line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 sourcing_lnum = ((wcmd_T *)(lines_ga.ga_data))[current_line].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 /* Did we encounter a breakpoint? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 if (breakpoint != NULL && *breakpoint != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 && *breakpoint <= sourcing_lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 dbg_breakpoint(fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 /* Find next breakpoint. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
939 getline_equal(fgetline, cookie, getsourceline),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 fname, sourcing_lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
943 # ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
944 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
945 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
946 if (getline_is_func)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
947 func_line_start(real_cookie);
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
948 else if (getline_equal(fgetline, cookie, getsourceline))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
949 script_line_start();
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
950 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
951 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
954 if (cstack.cs_looplevel > 0)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
955 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
956 /* Inside a while/for loop we need to store the lines and use them
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
957 * again. Pass a different "fgetline" function to do_one_cmd()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 * below, so that it stores lines in or reads them from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 * "lines_ga". Makes it possible to define a function inside a
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
960 * while/for loop. */
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
961 cmd_getline = get_loop_line;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
962 cmd_cookie = (void *)&cmd_loop_cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
963 cmd_loop_cookie.lines_gap = &lines_ga;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
964 cmd_loop_cookie.current_line = current_line;
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
965 cmd_loop_cookie.getline = fgetline;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
966 cmd_loop_cookie.cookie = cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
967 cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 {
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
971 cmd_getline = fgetline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 cmd_cookie = cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
976 /* 2. If no line given, get an allocated line with fgetline(). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 if (next_cmdline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 * Need to set msg_didout for the first line after an ":if",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 * otherwise the ":if" will be overwritten.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
983 if (count == 1 && getline_equal(fgetline, cookie, getexline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 msg_didout = TRUE;
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
985 if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 )) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 /* Don't call wait_return for aborted command line. The NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 * returned for the end of a sourced file or executed function
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 * doesn't do this. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 if (KeyTyped && !(flags & DOCMD_REPEAT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 used_getline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 * Keep the first typed line. Clear it when more lines are typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 if (flags & DOCMD_KEEPLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 vim_free(repeat_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 if (count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 repeat_cmdline = vim_strsave(next_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 repeat_cmdline = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 /* 3. Make a copy of the command so we can mess with it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 else if (cmdline_copy == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 next_cmdline = vim_strsave(next_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 if (next_cmdline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 EMSG(_(e_outofmem));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 cmdline_copy = next_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1031 * Save the current line when inside a ":while" or ":for", and when
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1032 * the command looks like a ":while" or ":for", because we may need it
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1033 * later. When there is a '|' and another command, it is stored
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1034 * separately, because we need to be able to jump back to it from an
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1035 * :endwhile/:endfor.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1037 if (current_line == lines_ga.ga_len
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1038 && (cstack.cs_looplevel || has_loop_cmd(next_cmdline)))
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1039 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1040 if (store_loop_line(&lines_ga, next_cmdline) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 did_endif = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 if (count++ == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 * All output from the commands is put below each other, without
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 * waiting for a return. Don't do this when executing commands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054 * from a script or when being called recursive (e.g. for ":e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 * +command file").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 if (!(flags & DOCMD_NOWAIT) && !recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 msg_didout_before_start = msg_didout;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 msg_didany = FALSE; /* no output yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 msg_scroll = TRUE; /* put messages below each other */
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4236
diff changeset
1063 ++no_wait_return; /* don't wait for return until finished */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 ++RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 did_inc = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 if (p_verbose >= 15 && sourcing_name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 ++no_wait_return;
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1072 verbose_enter_scroll();
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1073
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 smsg((char_u *)_("line %ld: %s"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 (long)sourcing_lnum, cmdline_copy);
291
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1076 if (msg_silent == 0)
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1077 msg_puts((char_u *)"\n"); /* don't overwrite this */
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1078
0ad8528b8c05 updated for version 7.0077
vimboss
parents: 280
diff changeset
1079 verbose_leave_scroll();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 * 2. Execute one '|' separated command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 * do_one_cmd() will return NULL if there is no trailing '|'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 * "cmdline_copy" can change, e.g. for '%' and '#' expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 ++recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 next_cmdline = do_one_cmd(&cmdline_copy, flags & DOCMD_VERBOSE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 &cstack,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 cmd_getline, cmd_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 --recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 #ifdef FEAT_EVAL
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1097 if (cmd_cookie == (void *)&cmd_loop_cookie)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1098 /* Use "current_line" from "cmd_loop_cookie", it may have been
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 * incremented when defining a function. */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1100 current_line = cmd_loop_cookie.current_line;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 if (next_cmdline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 vim_free(cmdline_copy);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 cmdline_copy = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 * If the command was typed, remember it for the ':' register.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 * Do this AFTER executing the command to make :@: work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1112 if (getline_equal(fgetline, cookie, getexline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 && new_last_cmdline != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 vim_free(last_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 last_cmdline = new_last_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 new_last_cmdline = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 /* need to copy the command after the '|' to cmdline_copy, for the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 * next do_one_cmd() */
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
1125 STRMOVE(cmdline_copy, next_cmdline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 next_cmdline = cmdline_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 /* reset did_emsg for a function that is not aborted by an error */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 if (did_emsg && !force_abort
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1133 && getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 && !func_has_abort(real_cookie))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1137 if (cstack.cs_looplevel > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 ++current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1142 * An ":endwhile", ":endfor" and ":continue" is handled here.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1143 * If we were executing commands, jump back to the ":while" or
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1144 * ":for".
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1145 * If we were not executing commands, decrement cs_looplevel.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1147 if (cstack.cs_lflags & (CSL_HAD_CONT | CSL_HAD_ENDLOOP))
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1148 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1149 cstack.cs_lflags &= ~(CSL_HAD_CONT | CSL_HAD_ENDLOOP);
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1150
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1151 /* Jump back to the matching ":while" or ":for". Be careful
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1152 * not to use a cs_line[] from an entry that isn't a ":while"
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1153 * or ":for": It would make "current_line" invalid and can
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1154 * cause a crash. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 if (!did_emsg && !got_int && !did_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 && cstack.cs_idx >= 0
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1157 && (cstack.cs_flags[cstack.cs_idx]
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1158 & (CSF_WHILE | CSF_FOR))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 && cstack.cs_line[cstack.cs_idx] >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 && (cstack.cs_flags[cstack.cs_idx] & CSF_ACTIVE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 current_line = cstack.cs_line[cstack.cs_idx];
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1163 /* remember we jumped there */
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1164 cstack.cs_lflags |= CSL_HAD_LOOP;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 line_breakcheck(); /* check if CTRL-C typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1167 /* Check for the next breakpoint at or after the ":while"
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1168 * or ":for". */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 if (breakpoint != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1172 getline_equal(fgetline, cookie, getsourceline),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 }
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1178 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 {
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1180 /* can only get here with ":endwhile" or ":endfor" */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 if (cstack.cs_idx >= 0)
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1182 rewind_conditionals(&cstack, cstack.cs_idx - 1,
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1183 CSF_WHILE | CSF_FOR, &cstack.cs_looplevel);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1188 * For a ":while" or ":for" we need to remember the line number.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1190 else if (cstack.cs_lflags & CSL_HAD_LOOP)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1191 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1192 cstack.cs_lflags &= ~CSL_HAD_LOOP;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 cstack.cs_line[cstack.cs_idx] = current_line - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 * When not inside any ":while" loop, clear remembered lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1200 if (cstack.cs_looplevel == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 if (lines_ga.ga_len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 sourcing_lnum =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 ((wcmd_T *)lines_ga.ga_data)[lines_ga.ga_len - 1].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 free_cmdlines(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 current_line = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1212 * A ":finally" makes did_emsg, got_int, and did_throw pending for
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1213 * being restored at the ":endtry". Reset them here and set the
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1214 * ACTIVE and FINALLY flags, so that the finally clause gets executed.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1215 * This includes the case where a missing ":endif", ":endwhile" or
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1216 * ":endfor" was detected by the ":finally" itself.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1218 if (cstack.cs_lflags & CSL_HAD_FINA)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1219 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1220 cstack.cs_lflags &= ~CSL_HAD_FINA;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1221 report_make_pending(cstack.cs_pending[cstack.cs_idx]
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1222 & (CSTP_ERROR | CSTP_INTERRUPT | CSTP_THROW),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 did_throw ? (void *)current_exception : NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 did_emsg = got_int = did_throw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 cstack.cs_flags[cstack.cs_idx] |= CSF_ACTIVE | CSF_FINALLY;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 /* Update global "trylevel" for recursive calls to do_cmdline() from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 * within this loop. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 trylevel = initial_trylevel + cstack.cs_trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 /*
1190
4e90dc161511 updated for version 7.1b
vimboss
parents: 1132
diff changeset
1233 * If the outermost try conditional (across function calls and sourced
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 * files) is aborted because of an error, an interrupt, or an uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 * exception, cancel everything. If it is left normally, reset
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 * force_abort to get the non-EH compatible abortion behavior for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 * the rest of the script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 if (trylevel == 0 && !did_emsg && !got_int && !did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 force_abort = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 /* Convert an interrupt to an exception if appropriate. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 (void)do_intthrow(&cstack);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 #endif /* FEAT_EVAL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 * Continue executing command lines when:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 * - no CTRL-C typed, no aborting error, no exception thrown or try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 * conditionals need to be checked for executing finally clauses or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 * catching an interrupt exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 * - didn't get an error message or lines are not typed
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1253 * - there is a command after '|', inside a :if, :while, :for or :try, or
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 * looping for ":source" command or function call.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 while (!((got_int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 || (did_emsg && force_abort) || did_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 && cstack.cs_trylevel == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 )
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1265 && !(did_emsg
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1266 #ifdef FEAT_EVAL
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1267 /* Keep going when inside try/catch, so that the error can be
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4236
diff changeset
1268 * deal with, except when it is a syntax error, it may cause
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1269 * the :endtry to be missed. */
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1270 && (cstack.cs_trylevel == 0 || did_emsg_syntax)
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1271 #endif
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1272 && used_getline
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1273 && (getline_equal(fgetline, cookie, getexmodeline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1274 || getline_equal(fgetline, cookie, getexline)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 && (next_cmdline != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 || cstack.cs_idx >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 || (flags & DOCMD_REPEAT)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 vim_free(cmdline_copy);
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1282 did_emsg_syntax = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 free_cmdlines(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 ga_clear(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 if (cstack.cs_idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 * If a sourced file or executed function ran to its end, report the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 * unclosed conditional.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 if (!got_int && !did_throw
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1294 && ((getline_equal(fgetline, cookie, getsourceline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1295 && !source_finished(fgetline, cookie))
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1296 || (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 && !func_has_ended(real_cookie))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 EMSG(_(e_endtry));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 else if (cstack.cs_flags[cstack.cs_idx] & CSF_WHILE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 EMSG(_(e_endwhile));
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1303 else if (cstack.cs_flags[cstack.cs_idx] & CSF_FOR)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1304 EMSG(_(e_endfor));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 EMSG(_(e_endif));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 * Reset "trylevel" in case of a ":finish" or ":return" or a missing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 * ":endtry" in a sourced file or executed function. If the try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 * conditional is in its finally clause, ignore anything pending.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 * If it is in a catch clause, finish the caught exception.
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1314 * Also cleanup any "cs_forinfo" structures.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 do
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1317 {
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1318 int idx = cleanup_conditionals(&cstack, 0, TRUE);
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1319
111
a3d7e800ddec updated for version 7.0041
vimboss
parents: 98
diff changeset
1320 if (idx >= 0)
a3d7e800ddec updated for version 7.0041
vimboss
parents: 98
diff changeset
1321 --idx; /* remove try block not in its finally clause */
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1322 rewind_conditionals(&cstack, idx, CSF_WHILE | CSF_FOR,
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1323 &cstack.cs_looplevel);
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1324 }
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1325 while (cstack.cs_idx >= 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 trylevel = initial_trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1329 /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1330 * lack was reported above and the error message is to be converted to an
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 * exception, do this now after rewinding the cstack. */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1332 do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 ? (char_u *)"endfunction" : (char_u *)NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 if (trylevel == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 * When an exception is being thrown out of the outermost try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 * conditional, discard the uncaught exception, disable the conversion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 * of interrupts or errors to exceptions, and ensure that no more
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 * commands are executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 if (did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 void *p = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 char_u *saved_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 int saved_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 struct msglist *messages = NULL, *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 * If the uncaught exception is a user exception, report it as an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 * error. If it is an error exception, display the saved error
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 * message now. For an interrupt exception, do nothing; the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 * interrupt message is given elsewhere.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 switch (current_exception->type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 case ET_USER:
272
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
1359 vim_snprintf((char *)IObuff, IOSIZE,
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
1360 _("E605: Exception not caught: %s"),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 current_exception->value);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 p = vim_strsave(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 case ET_ERROR:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 messages = current_exception->messages;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 current_exception->messages = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 case ET_INTERRUPT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 saved_sourcing_name = sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 saved_sourcing_lnum = sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 sourcing_name = current_exception->throw_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 sourcing_lnum = current_exception->throw_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 current_exception->throw_name = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 discard_current_exception(); /* uses IObuff if 'verbose' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 suppress_errthrow = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 force_abort = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 if (messages != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 next = messages->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 emsg(messages->msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 vim_free(messages->msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 vim_free(messages);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 messages = next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 while (messages != NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 else if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 emsg(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 vim_free(sourcing_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 sourcing_name = saved_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 sourcing_lnum = saved_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 * On an interrupt or an aborting error not converted to an exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 * disable the conversion of errors to exceptions. (Interrupts are not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 * converted any more, here.) This enables also the interrupt message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 * when force_abort is set and did_emsg unset in case of an interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 * from a finally clause after an error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 else if (got_int || (did_emsg && force_abort))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 suppress_errthrow = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 * The current cstack will be freed when do_cmdline() returns. An uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 * exception will have to be rethrown in the previous cstack. If a function
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 * has just returned or a script file was just finished and the previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 * cstack belongs to the same function or, respectively, script file, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 * will have to be checked for finally clauses to be executed due to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 * ":return" or ":finish". This is done in do_one_cmd().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 if (did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 need_rethrow = TRUE;
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1425 if ((getline_equal(fgetline, cookie, getsourceline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 && ex_nesting_level > source_level(real_cookie))
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1427 || (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 && ex_nesting_level > func_level(real_cookie) + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 if (!did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 check_cstack = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 /* When leaving a function, reduce nesting level. */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1436 if (getline_equal(fgetline, cookie, get_func_line))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 --ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 * Go to debug mode when returning from a function in which we are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 * single-stepping.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1442 if ((getline_equal(fgetline, cookie, getsourceline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1443 || getline_equal(fgetline, cookie, get_func_line))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 && ex_nesting_level + 1 <= debug_break_level)
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1445 do_debug(getline_equal(fgetline, cookie, getsourceline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 ? (char_u *)_("End of sourced file")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 : (char_u *)_("End of function"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 * Restore the exception environment (done after returning from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 * debugger).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 if (flags & DOCMD_EXCRESET)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
1455 restore_dbg_stuff(&debug_saved);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 msg_list = saved_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 #endif /* FEAT_EVAL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 * If there was too much output to fit on the command line, ask the user to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 * hit return before redrawing the screen. With the ":global" command we do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 * this only once after the command is finished.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 if (did_inc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 * When just finished an ":if"-":else" which was typed, no need to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 * wait for hit-return. Also for an error situation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 if (retval == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 || (did_endif && KeyTyped && !did_emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 msg_didany = FALSE; /* don't wait when restarting edit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 else if (need_wait_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 * The msg_start() above clears msg_didout. The wait_return we do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 * here should not overwrite the command that may be shown before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 * doing that.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 msg_didout |= msg_didout_before_start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495
3976
67e3b2753a6e updated for version 7.3.743
Bram Moolenaar <bram@vim.org>
parents: 3972
diff changeset
1496 #ifdef FEAT_EVAL
67e3b2753a6e updated for version 7.3.743
Bram Moolenaar <bram@vim.org>
parents: 3972
diff changeset
1497 did_endif = FALSE; /* in case do_cmdline used recursively */
67e3b2753a6e updated for version 7.3.743
Bram Moolenaar <bram@vim.org>
parents: 3972
diff changeset
1498 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 * Reset if_level, in case a sourced script file contains more ":if" than
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 * ":endif" (could be ":if x | foo | endif").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 if_level = 0;
3972
6e1fe64cf440 updated for version 7.3.741
Bram Moolenaar <bram@vim.org>
parents: 3963
diff changeset
1504 #endif
3963
1773d5aa6437 updated for version 7.3.737
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
1505
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 --call_depth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1512 * Obtain a line when inside a ":while" or ":for" loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1515 get_loop_line(int c, void *cookie, int indent)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 {
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1517 struct loop_cookie *cp = (struct loop_cookie *)cookie;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 wcmd_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 char_u *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 if (cp->current_line + 1 >= cp->lines_gap->ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 if (cp->repeating)
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1524 return NULL; /* trying to read past ":endwhile"/":endfor" */
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1525
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1526 /* First time inside the ":while"/":for": get line normally. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 if (cp->getline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 line = getcmdline(c, 0L, indent);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 line = cp->getline(c, cp->cookie, indent);
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
1531 if (line != NULL && store_loop_line(cp->lines_gap, line) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 ++cp->current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 return line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 KeyTyped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 ++cp->current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 sourcing_lnum = wp->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 return vim_strsave(wp->line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 * Store a line in "gap" so that a ":while" loop can execute it again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1548 store_loop_line(garray_T *gap, char_u *line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 if (ga_grow(gap, 1) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 ((wcmd_T *)(gap->ga_data))[gap->ga_len].line = vim_strsave(line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 ((wcmd_T *)(gap->ga_data))[gap->ga_len].lnum = sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 ++gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1559 * Free the lines stored for a ":while" or ":for" loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1562 free_cmdlines(garray_T *gap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 while (gap->ga_len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 vim_free(((wcmd_T *)(gap->ga_data))[gap->ga_len - 1].line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 --gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 /*
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1573 * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1574 * "func". * Otherwise return TRUE when "fgetline" equals "func".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1577 getline_equal(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1578 char_u *(*fgetline)(int, void *, int),
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1579 void *cookie UNUSED, /* argument for fgetline() */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1580 char_u *(*func)(int, void *, int))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 #ifdef FEAT_EVAL
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
1583 char_u *(*gp)(int, void *, int);
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1584 struct loop_cookie *cp;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1585
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1586 /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
1190
4e90dc161511 updated for version 7.1b
vimboss
parents: 1132
diff changeset
1587 * function that's originally used to obtain the lines. This may be
4e90dc161511 updated for version 7.1b
vimboss
parents: 1132
diff changeset
1588 * nested several levels. */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1589 gp = fgetline;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1590 cp = (struct loop_cookie *)cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1591 while (gp == get_loop_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 gp = cp->getline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 cp = cp->cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 return gp == func;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 #else
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1598 return fgetline == func;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 #if defined(FEAT_EVAL) || defined(FEAT_MBYTE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 /*
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1604 * If "fgetline" is get_loop_line(), return the cookie used by the original
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 * getline function. Otherwise return "cookie".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 void *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1608 getline_cookie(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1609 char_u *(*fgetline)(int, void *, int) UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1610 void *cookie) /* argument for fgetline() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 # ifdef FEAT_EVAL
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
1613 char_u *(*gp)(int, void *, int);
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1614 struct loop_cookie *cp;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1615
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1616 /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
1190
4e90dc161511 updated for version 7.1b
vimboss
parents: 1132
diff changeset
1617 * cookie that's originally used to obtain the lines. This may be nested
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 * several levels. */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1619 gp = fgetline;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1620 cp = (struct loop_cookie *)cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1621 while (gp == get_loop_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 gp = cp->getline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 cp = cp->cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 return cp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 return cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1633
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1634 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1635 * Helper function to apply an offset for buffer commands, i.e. ":bdelete",
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1636 * ":bwipeout", etc.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1637 * Returns the buffer number.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1638 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1639 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1640 compute_buffer_local_count(int addr_type, int lnum, int offset)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1641 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1642 buf_T *buf;
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1643 buf_T *nextbuf;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1644 int count = offset;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1645
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1646 buf = firstbuf;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1647 while (buf->b_next != NULL && buf->b_fnum < lnum)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1648 buf = buf->b_next;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1649 while (count != 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1650 {
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1651 count += (offset < 0) ? 1 : -1;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1652 nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1653 if (nextbuf == NULL)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1654 break;
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1655 buf = nextbuf;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1656 if (addr_type == ADDR_LOADED_BUFFERS)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1657 /* skip over unloaded buffers */
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1658 while (buf->b_ml.ml_mfp == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1659 {
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1660 nextbuf = (offset < 0) ? buf->b_prev : buf->b_next;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1661 if (nextbuf == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1662 break;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1663 buf = nextbuf;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1664 }
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1665 }
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1666 /* we might have gone too far, last buffer is not loadedd */
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1667 if (addr_type == ADDR_LOADED_BUFFERS)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1668 while (buf->b_ml.ml_mfp == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1669 {
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1670 nextbuf = (offset >= 0) ? buf->b_prev : buf->b_next;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1671 if (nextbuf == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1672 break;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1673 buf = nextbuf;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1674 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1675 return buf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1676 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1677
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1678 #ifdef FEAT_WINDOWS
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
1679 static int current_win_nr(win_T *win);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
1680 static int current_tab_nr(tabpage_T *tab);
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1681
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1682 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1683 current_win_nr(win_T *win)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1684 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1685 win_T *wp;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1686 int nr = 0;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1687
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
1688 FOR_ALL_WINDOWS(wp)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1689 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1690 ++nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1691 if (wp == win)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1692 break;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1693 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1694 return nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1695 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1696
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1697 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1698 current_tab_nr(tabpage_T *tab)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1699 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1700 tabpage_T *tp;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1701 int nr = 0;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1702
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
1703 FOR_ALL_TABPAGES(tp)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1704 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1705 ++nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1706 if (tp == tab)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1707 break;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1708 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1709 return nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1710 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1711
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1712 # define CURRENT_WIN_NR current_win_nr(curwin)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1713 # define LAST_WIN_NR current_win_nr(NULL)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1714 # define CURRENT_TAB_NR current_tab_nr(curtab)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1715 # define LAST_TAB_NR current_tab_nr(NULL)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1716 #else
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1717 # define CURRENT_WIN_NR 1
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1718 # define LAST_WIN_NR 1
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1719 # define CURRENT_TAB_NR 1
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1720 # define LAST_TAB_NR 1
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1721 #endif
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1722
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1723
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 * Execute one Ex command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 * If 'sourcing' is TRUE, the command will be included in the error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1729 * 1. skip comment lines and leading space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 * 2. handle command modifiers
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
1731 * 3. find the command
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1732 * 4. parse range
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
1733 * 5. Parse the command.
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1734 * 6. parse arguments
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1735 * 7. switch on command name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 *
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1737 * Note: "fgetline" can be NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 * This function may be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 #if (_MSC_VER == 1200)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 /*
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
1743 * Avoid optimisation bug in VC++ version 6.0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 */
128
8def260d486d updated for version 7.0044
vimboss
parents: 122
diff changeset
1745 #pragma optimize( "g", off )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1748 do_one_cmd(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1749 char_u **cmdlinep,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1750 int sourcing,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 #ifdef FEAT_EVAL
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1752 struct condstack *cstack,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1753 #endif
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1754 char_u *(*fgetline)(int, void *, int),
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1755 void *cookie) /* argument for fgetline() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 char_u *errormsg = NULL; /* error message */
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1761 char_u *after_modifier = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 exarg_T ea; /* Ex command arguments */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 long verbose_save = -1;
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
1764 int save_msg_scroll = msg_scroll;
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
1765 int save_msg_silent = -1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 int did_esilent = 0;
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1767 #ifdef HAVE_SANDBOX
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1768 int did_sandbox = FALSE;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1769 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 cmdmod_T save_cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 int ni; /* set when Not Implemented */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1772 char_u *cmd;
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
1773 int address_count = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 vim_memset(&ea, 0, sizeof(ea));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 ea.line1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 ea.line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 ++ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781
3997
c83cd3d01128 updated for version 7.3.753
Bram Moolenaar <bram@vim.org>
parents: 3976
diff changeset
1782 /* When the last file has not been edited :q has to be typed twice. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 if (quitmore
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 /* avoid that a function call in 'statusline' does this */
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1786 && !getline_equal(fgetline, cookie, get_func_line)
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
1787 #endif
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
1788 #ifdef FEAT_AUTOCMD
3997
c83cd3d01128 updated for version 7.3.753
Bram Moolenaar <bram@vim.org>
parents: 3976
diff changeset
1789 /* avoid that an autocommand, e.g. QuitPre, does this */
c83cd3d01128 updated for version 7.3.753
Bram Moolenaar <bram@vim.org>
parents: 3976
diff changeset
1790 && !getline_equal(fgetline, cookie, getnextac)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 --quitmore;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 * Reset browse, confirm, etc.. They are restored when returning, for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 * recursive calls.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 save_cmdmod = cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 vim_memset(&cmdmod, 0, sizeof(cmdmod));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801
930
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1802 /* "#!anything" is handled like a comment. */
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1803 if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1804 goto doend;
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1805
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 * Repeat until no more command modifiers are found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 ea.cmd = *cmdlinep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1813 * 1. Skip comment lines and leading white space and colons.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 while (*ea.cmd == ' ' || *ea.cmd == '\t' || *ea.cmd == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 ++ea.cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 /* in ex mode, an empty line works like :+ */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 if (*ea.cmd == NUL && exmode_active
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1820 && (getline_equal(fgetline, cookie, getexmodeline)
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1821 || getline_equal(fgetline, cookie, getexline))
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
1822 && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 ea.cmd = (char_u *)"+";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 ex_pressedreturn = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 /* ignore comment and empty lines */
1442
bce7c73fd56d updated for version 7.1-157
vimboss
parents: 1441
diff changeset
1829 if (*ea.cmd == '"')
bce7c73fd56d updated for version 7.1-157
vimboss
parents: 1441
diff changeset
1830 goto doend;
bce7c73fd56d updated for version 7.1-157
vimboss
parents: 1441
diff changeset
1831 if (*ea.cmd == NUL)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
1832 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
1833 ex_pressedreturn = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 goto doend;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
1835 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1838 * 2. Handle command modifiers.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 */
9927
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
1840 p = skip_range(ea.cmd, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 switch (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 /* When adding an entry, also modify cmd_exists(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 case 'a': if (!checkforcmd(&ea.cmd, "aboveleft", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 cmdmod.split |= WSP_ABOVE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 case 'b': if (checkforcmd(&ea.cmd, "belowright", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 cmdmod.split |= WSP_BELOW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 if (checkforcmd(&ea.cmd, "browse", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 {
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
1860 #ifdef FEAT_BROWSE_CMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 cmdmod.browse = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 if (!checkforcmd(&ea.cmd, "botright", 2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 cmdmod.split |= WSP_BOT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 case 'c': if (!checkforcmd(&ea.cmd, "confirm", 4))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 cmdmod.confirm = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 case 'k': if (checkforcmd(&ea.cmd, "keepmarks", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 cmdmod.keepmarks = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 }
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
1884 if (checkforcmd(&ea.cmd, "keepalt", 5))
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
1885 {
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
1886 cmdmod.keepalt = TRUE;
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
1887 continue;
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
1888 }
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1889 if (checkforcmd(&ea.cmd, "keeppatterns", 5))
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1890 {
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1891 cmdmod.keeppatterns = TRUE;
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1892 continue;
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
1893 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 if (!checkforcmd(&ea.cmd, "keepjumps", 5))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 cmdmod.keepjumps = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1899 case 'f': /* only accept ":filter {pat} cmd" */
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1900 {
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1901 char_u *reg_pat;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1902
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1903 if (!checkforcmd(&p, "filter", 4)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1904 || *p == NUL || ends_excmd(*p))
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1905 break;
9980
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1906 if (*p == '!')
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1907 {
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1908 cmdmod.filter_force = TRUE;
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1909 p = skipwhite(p + 1);
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1910 if (*p == NUL || ends_excmd(*p))
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1911 break;
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
1912 }
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1913 p = skip_vimgrep_pat(p, &reg_pat, NULL);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1914 if (p == NULL || *p == NUL)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1915 break;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1916 cmdmod.filter_regmatch.regprog =
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1917 vim_regcomp(reg_pat, RE_MAGIC);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1918 if (cmdmod.filter_regmatch.regprog == NULL)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1919 break;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1920 ea.cmd = p;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1921 continue;
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1922 }
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1923
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 /* ":hide" and ":hide | cmd" are not modifiers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 case 'h': if (p != ea.cmd || !checkforcmd(&p, "hide", 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 || *p == NUL || ends_excmd(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 ea.cmd = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 cmdmod.hide = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 case 'l': if (checkforcmd(&ea.cmd, "lockmarks", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 cmdmod.lockmarks = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938 if (!checkforcmd(&ea.cmd, "leftabove", 5))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 cmdmod.split |= WSP_ABOVE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1945 case 'n': if (checkforcmd(&ea.cmd, "noautocmd", 3))
588
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
1946 {
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1947 #ifdef FEAT_AUTOCMD
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1948 if (cmdmod.save_ei == NULL)
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1949 {
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1950 /* Set 'eventignore' to "all". Restore the
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1951 * existing option value later. */
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1952 cmdmod.save_ei = vim_strsave(p_ei);
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1953 set_string_option_direct((char_u *)"ei", -1,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 690
diff changeset
1954 (char_u *)"all", OPT_FREE, SID_NONE);
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1955 }
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1956 #endif
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1957 continue;
588
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
1958 }
9703
1f33aece8e55 commit https://github.com/vim/vim/commit/3bcfca3ab4db415d0e750e00204dd25a91fcee77
Christian Brabandt <cb@256bit.org>
parents: 9667
diff changeset
1959 if (!checkforcmd(&ea.cmd, "noswapfile", 3))
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1960 break;
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1961 cmdmod.noswapfile = TRUE;
588
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
1962 continue;
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
1963
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 case 'r': if (!checkforcmd(&ea.cmd, "rightbelow", 6))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 cmdmod.split |= WSP_BELOW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1971 case 's': if (checkforcmd(&ea.cmd, "sandbox", 3))
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1972 {
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1973 #ifdef HAVE_SANDBOX
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1974 if (!did_sandbox)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1975 ++sandbox;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1976 did_sandbox = TRUE;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1977 #endif
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1978 continue;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1979 }
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
1980 if (!checkforcmd(&ea.cmd, "silent", 3))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 break;
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
1982 if (save_msg_silent == -1)
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
1983 save_msg_silent = msg_silent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 ++msg_silent;
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
1985 if (*ea.cmd == '!' && !VIM_ISWHITE(ea.cmd[-1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 /* ":silent!", but not "silent !cmd" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 ea.cmd = skipwhite(ea.cmd + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 ++emsg_silent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 ++did_esilent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
1994 case 't': if (checkforcmd(&p, "tab", 3))
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
1995 {
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
1996 #ifdef FEAT_WINDOWS
9927
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
1997 long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS,
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
1998 ea.skip, FALSE, 1);
9927
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
1999 if (tabnr == MAXLNUM)
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2000 cmdmod.tab = tabpage_index(curtab) + 1;
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2001 else
9927
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2002 {
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2003 if (tabnr < 0 || tabnr > LAST_TAB_NR)
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2004 {
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2005 errormsg = (char_u *)_(e_invrange);
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2006 goto doend;
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2007 }
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2008 cmdmod.tab = tabnr + 1;
e1a8b2601fe0 commit https://github.com/vim/vim/commit/9b7f8ce9eb3cb704f8cc14ab659bf86b1d6dc13c
Christian Brabandt <cb@256bit.org>
parents: 9703
diff changeset
2009 }
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2010 ea.cmd = p;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2011 #endif
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2012 continue;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2013 }
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2014 if (!checkforcmd(&ea.cmd, "topleft", 2))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 cmdmod.split |= WSP_TOP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2021 case 'u': if (!checkforcmd(&ea.cmd, "unsilent", 3))
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2022 break;
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2023 if (save_msg_silent == -1)
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2024 save_msg_silent = msg_silent;
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2025 msg_silent = 0;
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2026 continue;
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
2027
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 case 'v': if (checkforcmd(&ea.cmd, "vertical", 4))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 {
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
2030 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 cmdmod.split |= WSP_VERT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 if (!checkforcmd(&p, "verbose", 4))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 if (verbose_save < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 verbose_save = p_verbose;
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
2039 if (vim_isdigit(*ea.cmd))
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
2040 p_verbose = atoi((char *)ea.cmd);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
2041 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 p_verbose = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 ea.cmd = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 }
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2048 after_modifier = ea.cmd;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 ea.skip = did_emsg || got_int || did_throw || (cstack->cs_idx >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 && !(cstack->cs_flags[cstack->cs_idx] & CSF_ACTIVE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 ea.skip = (if_level > 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 #ifdef FEAT_EVAL
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2058 # ifdef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2059 /* Count this line for profiling if ea.skip is FALSE. */
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
2060 if (do_profiling == PROF_YES && !ea.skip)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2061 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2062 if (getline_equal(fgetline, cookie, get_func_line))
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2063 func_line_exec(getline_cookie(fgetline, cookie));
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2064 else if (getline_equal(fgetline, cookie, getsourceline))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2065 script_line_exec();
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2066 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2067 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
2068
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 /* May go to debug mode. If this happens and the ">quit" debug command is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 * used, throw an interrupt exception and skip the next command. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 dbg_check_breakpoint(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 if (!ea.skip && got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 ea.skip = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 (void)do_intthrow(cstack);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2080 * 3. Skip over the range to find the command. Let "p" point to after it.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2081 *
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2082 * We need the command to know what kind of range it uses.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2083 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2084 cmd = ea.cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2085 ea.cmd = skip_range(ea.cmd, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2086 if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2087 ea.cmd = skipwhite(ea.cmd + 1);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2088 p = find_command(&ea, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2089
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2090 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2091 * 4. parse a range specifier of the form: addr [,addr] [;addr] ..
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 * where 'addr' is:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 * % (entire file)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 * $ [+-NUM]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 * 'x [+-NUM] (where x denotes a currently defined mark)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 * . [+-NUM]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 * [+-NUM]..
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 * NUM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 * The ea.cmd pointer is updated to point to the first character following the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 * range spec. If an initial address is found, but no second, the upper bound
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 * is equal to the lower.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2107 /* ea.addr_type for user commands is set by find_ucmd */
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2108 if (!IS_USER_CMDIDX(ea.cmdidx))
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2109 {
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2110 if (ea.cmdidx != CMD_SIZE)
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2111 ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2112 else
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2113 ea.addr_type = ADDR_LINES;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2114
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2115 #ifdef FEAT_WINDOWS
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2116 /* :wincmd range depends on the argument. */
6506
a5a6f1467b1e updated for version 7.4.580
Bram Moolenaar <bram@vim.org>
parents: 6489
diff changeset
2117 if (ea.cmdidx == CMD_wincmd && p != NULL)
a5a6f1467b1e updated for version 7.4.580
Bram Moolenaar <bram@vim.org>
parents: 6489
diff changeset
2118 get_wincmd_addr_type(skipwhite(p), &ea);
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2119 #endif
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2120 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2121
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 /* repeat for all ',' or ';' separated addresses */
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2123 ea.cmd = cmd;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 ea.line1 = ea.line2;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2127 switch (ea.addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2128 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2129 case ADDR_LINES:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2130 /* default is current line number */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2131 ea.line2 = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2132 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2133 case ADDR_WINDOWS:
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2134 ea.line2 = CURRENT_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2135 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2136 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2137 ea.line2 = curwin->w_arg_idx + 1;
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
2138 if (ea.line2 > ARGCOUNT)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
2139 ea.line2 = ARGCOUNT;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2140 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2141 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2142 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2143 ea.line2 = curbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2144 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2145 case ADDR_TABS:
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2146 ea.line2 = CURRENT_TAB_NR;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2147 break;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2148 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2149 ea.line2 = 1;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2150 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2151 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2152 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2153 ea.line2 = qf_get_cur_valid_idx(&ea);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2154 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2155 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2156 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 ea.cmd = skipwhite(ea.cmd);
9228
ea504064c996 commit https://github.com/vim/vim/commit/fd89d7ea81b18d32363456b16258174dc9e095dc
Christian Brabandt <cb@256bit.org>
parents: 8817
diff changeset
2158 lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
2159 ea.addr_count == 0, address_count++);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 if (ea.cmd == NULL) /* error detected */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 if (lnum == MAXLNUM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 if (*ea.cmd == '%') /* '%' - all lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 ++ea.cmd;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2167 switch (ea.addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2168 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2169 case ADDR_LINES:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2170 ea.line1 = 1;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2171 ea.line2 = curbuf->b_ml.ml_line_count;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2172 break;
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
2173 case ADDR_LOADED_BUFFERS:
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2174 {
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2175 buf_T *buf = firstbuf;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2176
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2177 while (buf->b_next != NULL
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2178 && buf->b_ml.ml_mfp == NULL)
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2179 buf = buf->b_next;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2180 ea.line1 = buf->b_fnum;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2181 buf = lastbuf;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2182 while (buf->b_prev != NULL
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2183 && buf->b_ml.ml_mfp == NULL)
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2184 buf = buf->b_prev;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2185 ea.line2 = buf->b_fnum;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2186 break;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
2187 }
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2188 case ADDR_BUFFERS:
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
2189 ea.line1 = firstbuf->b_fnum;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
2190 ea.line2 = lastbuf->b_fnum;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
2191 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2192 case ADDR_WINDOWS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2193 case ADDR_TABS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2194 if (IS_USER_CMDIDX(ea.cmdidx))
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2195 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2196 ea.line1 = 1;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2197 ea.line2 = ea.addr_type == ADDR_WINDOWS
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2198 ? LAST_WIN_NR : LAST_TAB_NR;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2199 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2200 else
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2201 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2202 /* there is no Vim command which uses '%' and
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2203 * ADDR_WINDOWS or ADDR_TABS */
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2204 errormsg = (char_u *)_(e_invrange);
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2205 goto doend;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2206 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2207 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2208 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2209 errormsg = (char_u *)_(e_invrange);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2210 goto doend;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2211 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2212 case ADDR_ARGUMENTS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2213 if (ARGCOUNT == 0)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2214 ea.line1 = ea.line2 = 0;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2215 else
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2216 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2217 ea.line1 = 1;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2218 ea.line2 = ARGCOUNT;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2219 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2220 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2221 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2222 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2223 ea.line1 = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2224 ea.line2 = qf_get_size(&ea);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2225 if (ea.line2 == 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2226 ea.line2 = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2227 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2228 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2229 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 ++ea.addr_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 /* '*' - visual area */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 else if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 pos_T *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2237 if (ea.addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2238 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2239 errormsg = (char_u *)_(e_invrange);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2240 goto doend;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2241 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2242
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 ++ea.cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 fp = getmark('<', FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 if (check_mark(fp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 ea.line1 = fp->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 fp = getmark('>', FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 if (check_mark(fp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 ea.line2 = fp->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 ++ea.addr_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 ea.line2 = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 ea.addr_count++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 if (*ea.cmd == ';')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 if (!ea.skip)
10480
dc9326b58c33 commit https://github.com/vim/vim/commit/fe38b494fff56cd9b2fcaeef26a8fd7b6557d69c
Christian Brabandt <cb@256bit.org>
parents: 10383
diff changeset
2265 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 curwin->w_cursor.lnum = ea.line2;
10869
f8ebfa168818 patch 8.0.0324: illegal memory access with a wrong yank range
Christian Brabandt <cb@256bit.org>
parents: 10817
diff changeset
2267 /* don't leave the cursor on an illegal line or column */
f8ebfa168818 patch 8.0.0324: illegal memory access with a wrong yank range
Christian Brabandt <cb@256bit.org>
parents: 10817
diff changeset
2268 check_cursor();
10480
dc9326b58c33 commit https://github.com/vim/vim/commit/fe38b494fff56cd9b2fcaeef26a8fd7b6557d69c
Christian Brabandt <cb@256bit.org>
parents: 10383
diff changeset
2269 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 else if (*ea.cmd != ',')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 ++ea.cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 /* One address given: set start and end lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 if (ea.addr_count == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 ea.line1 = ea.line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 /* ... but only implicit: really no address given */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 if (lnum == MAXLNUM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 ea.addr_count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2286 * 5. Parse the command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 * Skip ':' and any white space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 ea.cmd = skipwhite(ea.cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 while (*ea.cmd == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 ea.cmd = skipwhite(ea.cmd + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 * If we got a line, but no command, then go to the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 * If we find a '|' or '\n' we set ea.nextcmd.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2300 if (*ea.cmd == NUL || *ea.cmd == '"'
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
2301 || (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 * strange vi behaviour:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 * ":3" jumps to line 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 * ":3|..." prints line 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 * ":|" prints current line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309 if (ea.skip) /* skip this if inside :if */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 goto doend;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2311 if (*ea.cmd == '|' || (exmode_active && ea.line1 != ea.line2))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313 ea.cmdidx = CMD_print;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 ea.argt = RANGE+COUNT+TRLBAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 if ((errormsg = invalid_range(&ea)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 correct_range(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 ex_print(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 else if (ea.addr_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 {
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2323 if (ea.line2 > curbuf->b_ml.ml_line_count)
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2324 {
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2325 /* With '-' in 'cpoptions' a line number past the file is an
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2326 * error, otherwise put it at the end of the file. */
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2327 if (vim_strchr(p_cpo, CPO_MINUS) != NULL)
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2328 ea.line2 = -1;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2329 else
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2330 ea.line2 = curbuf->b_ml.ml_line_count;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2331 }
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2332
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2333 if (ea.line2 < 0)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2334 errormsg = (char_u *)_(e_invrange);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2337 if (ea.line2 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 curwin->w_cursor.lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340 curwin->w_cursor.lnum = ea.line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341 beginline(BL_SOL | BL_FIX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2347 #ifdef FEAT_AUTOCMD
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2348 /* If this looks like an undefined user command and there are CmdUndefined
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2349 * autocommands defined, trigger the matching autocommands. */
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2350 if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2351 && ASCII_ISUPPER(*ea.cmd)
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2352 && has_cmdundefined())
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2353 {
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2354 int ret;
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2355
6156
20dbceb6f471 updated for version 7.4.415
Bram Moolenaar <bram@vim.org>
parents: 6154
diff changeset
2356 p = ea.cmd;
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2357 while (ASCII_ISALNUM(*p))
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2358 ++p;
6191
5672a06e4bd8 updated for version 7.4.431
Bram Moolenaar <bram@vim.org>
parents: 6156
diff changeset
2359 p = vim_strnsave(ea.cmd, (int)(p - ea.cmd));
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2360 ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL);
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2361 vim_free(p);
6965
86d43639de31 patch 7.4.800
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
2362 /* If the autocommands did something and didn't cause an error, try
86d43639de31 patch 7.4.800
Bram Moolenaar <bram@vim.org>
parents: 6947
diff changeset
2363 * finding the command again. */
9667
c27052511998 commit https://github.com/vim/vim/commit/eac784eced501c54d2c99e18a1af96cd996f3a6c
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
2364 p = (ret && !aborting()) ? find_command(&ea, NULL) : ea.cmd;
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2365 }
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2366 #endif
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
2367
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 errormsg = (char_u *)_("E464: Ambiguous use of user-defined command");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375 /* Check for wrong commands. */
11547
3d03ed329a54 patch 8.0.0656: cannot use ! after some user commands
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2376 if (*p == '!' && ea.cmd[1] == 0151 && ea.cmd[0] == 78
3d03ed329a54 patch 8.0.0656: cannot use ! after some user commands
Christian Brabandt <cb@256bit.org>
parents: 11521
diff changeset
2377 && !IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 errormsg = uc_fun_cmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 if (ea.cmdidx == CMD_SIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 STRCPY(IObuff, _("E492: Not an editor command"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 if (!sourcing)
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2389 {
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2390 /* If the modifier was parsed OK the error must be in the
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2391 * following command */
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2392 if (after_modifier != NULL)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2393 append_command(after_modifier);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2394 else
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2395 append_command(*cmdlinep);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2396 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397 errormsg = IObuff;
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
2398 did_emsg_syntax = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2402
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2403 ni = (!IS_USER_CMDIDX(ea.cmdidx)
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2404 && (cmdnames[ea.cmdidx].cmd_func == ex_ni
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2405 #ifdef HAVE_EX_SCRIPT_NI
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2406 || cmdnames[ea.cmdidx].cmd_func == ex_script_ni
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2407 #endif
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2408 ));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2411 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 * When the expression evaluation is disabled, recognize the ":if" and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 * ":endif" commands and ignore everything in between it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2414 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 if (ea.cmdidx == CMD_if)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 ++if_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 if (if_level)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2419 if (ea.cmdidx == CMD_endif)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 --if_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425
1613
a0a98a0f1281 updated for version 7.1-326
vimboss
parents: 1603
diff changeset
2426 /* forced commands */
a0a98a0f1281 updated for version 7.1-326
vimboss
parents: 1603
diff changeset
2427 if (*p == '!' && ea.cmdidx != CMD_substitute
a0a98a0f1281 updated for version 7.1-326
vimboss
parents: 1603
diff changeset
2428 && ea.cmdidx != CMD_smagic && ea.cmdidx != CMD_snomagic)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2431 ea.forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 ea.forceit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
2437 * 6. Parse arguments.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 */
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2439 if (!IS_USER_CMDIDX(ea.cmdidx))
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
2440 ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 #ifdef HAVE_SANDBOX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 if (sandbox != 0 && !(ea.argt & SBOXOK))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 /* Command not allowed in sandbox. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 errormsg = (char_u *)_(e_sandbox);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 if (!curbuf->b_p_ma && (ea.argt & MODIFY))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2454 /* Command not allowed in non-'modifiable' buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 errormsg = (char_u *)_(e_modifiable);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 }
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2458
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
2459 if (text_locked() && !(ea.argt & CMDWIN)
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2460 && !IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 {
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2462 /* Command not allowed when editing the command line. */
10875
ac9f60f96bab patch 8.0.0327: error message in cmdline window is not translated
Christian Brabandt <cb@256bit.org>
parents: 10869
diff changeset
2463 errormsg = (char_u *)_(get_text_locked_msg());
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2466 #ifdef FEAT_AUTOCMD
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2467 /* Disallow editing another buffer when "curbuf_lock" is set.
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2468 * Do allow ":edit" (check for argument later).
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2469 * Do allow ":checktime" (it's postponed). */
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2470 if (!(ea.argt & CMDWIN)
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2471 && ea.cmdidx != CMD_edit
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2472 && ea.cmdidx != CMD_checktime
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2473 && !IS_USER_CMDIDX(ea.cmdidx)
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2474 && curbuf_locked())
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2475 goto doend;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2476 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2478 if (!ni && !(ea.argt & RANGE) && ea.addr_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 /* no range allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 errormsg = (char_u *)_(e_norange);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 if (!ni && !(ea.argt & BANG) && ea.forceit) /* no <!> allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 errormsg = (char_u *)_(e_nobang);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 * Don't complain about the range if it is not used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 * (could happen if line_count is accidentally set to 0).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 if (!ea.skip && !ni)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 * If the range is backwards, ask for confirmation and, if given, swap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 * ea.line1 & ea.line2 so it's forwards again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 * When global command is busy, don't ask, will fail below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 if (!global_busy && ea.line1 > ea.line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 {
557
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2505 if (msg_silent == 0)
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2506 {
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2507 if (sourcing || exmode_active)
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2508 {
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2509 errormsg = (char_u *)_("E493: Backwards range given");
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2510 goto doend;
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2511 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 if (ask_yesno((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 _("Backwards range given, OK to swap"), FALSE) != 'y')
557
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2514 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2516 lnum = ea.line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 ea.line1 = ea.line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518 ea.line2 = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 if ((errormsg = invalid_range(&ea)) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 if ((ea.argt & NOTADR) && ea.addr_count == 0) /* default is 1, not cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 ea.line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 correct_range(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 #ifdef FEAT_FOLDING
7465
71e2aca45b81 commit https://github.com/vim/vim/commit/a3306958dcb9aadff1e1e8521d908d86b10ac99a
Christian Brabandt <cb@256bit.org>
parents: 7410
diff changeset
2530 if (((ea.argt & WHOLEFOLD) || ea.addr_count >= 2) && !global_busy
71e2aca45b81 commit https://github.com/vim/vim/commit/a3306958dcb9aadff1e1e8521d908d86b10ac99a
Christian Brabandt <cb@256bit.org>
parents: 7410
diff changeset
2531 && ea.addr_type == ADDR_LINES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 /* Put the first line at the start of a closed fold, put the last line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 * at the end of a closed fold. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 (void)hasFolding(ea.line1, &ea.line1, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 (void)hasFolding(ea.line2, NULL, &ea.line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
2542 * For the ":make" and ":grep" commands we insert the 'makeprg'/'grepprg'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 * option here, so things like % get expanded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 */
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2545 p = replace_makeprg(&ea, p, cmdlinep);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2546 if (p == NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2547 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2550 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 * Skip to start of argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 * Don't do this for the ":!" command, because ":!! -l" needs the space.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 if (ea.cmdidx == CMD_bang)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 ea.arg = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 ea.arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560 * Check for "++opt=val" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 * Must be first, allow ":w ++enc=utf8 !cmd"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 if (ea.argt & ARGOPT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564 while (ea.arg[0] == '+' && ea.arg[1] == '+')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 if (getargopt(&ea) == FAIL && !ni)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 errormsg = (char_u *)_(e_invarg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 if (*ea.arg == '>') /* append */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575 if (*++ea.arg != '>') /* typed wrong */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 errormsg = (char_u *)_("E494: Use w or w>>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 ea.arg = skipwhite(ea.arg + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 ea.append = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 else if (*ea.arg == '!' && ea.cmdidx == CMD_write) /* :w !filter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 ea.usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 if (ea.cmdidx == CMD_read)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 if (ea.forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 ea.usefilter = TRUE; /* :r! filter if ea.forceit */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 ea.forceit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 else if (*ea.arg == '!') /* :r !filter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 ea.usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 ea.amount = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 while (*ea.arg == *ea.cmd) /* count number of '>' or '<' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 ++ea.amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 ea.arg = skipwhite(ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 * Check for "+command" argument, before checking for next command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 * Don't do this for ":read !cmd" and ":write !cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 if ((ea.argt & EDITCMD) && !ea.usefilter)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 ea.do_ecmd_cmd = getargcmd(&ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 * Check for '|' to separate commands and '"' to start comments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 * Don't do this for ":read !cmd" and ":write !cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 if ((ea.argt & TRLBAR) && !ea.usefilter)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 separate_nextcmd(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 * Check for <newline> to end a shell command.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2631 * Also do this for ":read !cmd", ":write !cmd" and ":global".
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2632 * Any others?
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2634 else if (ea.cmdidx == CMD_bang
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2635 || ea.cmdidx == CMD_global
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2636 || ea.cmdidx == CMD_vglobal
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2637 || ea.usefilter)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 for (p = ea.arg; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 /* Remove one backslash before a newline, so that it's possible to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642 * pass a newline to the shell and also a newline that is preceded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 * with a backslash. This makes it impossible to end a shell
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 * command in a backslash, but that doesn't appear useful.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 * Halving the number of backslashes is incompatible with previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 * versions. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 if (*p == '\\' && p[1] == '\n')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
2648 STRMOVE(p, p + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 else if (*p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 ea.nextcmd = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 if ((ea.argt & DFLALL) && ea.addr_count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 {
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2660 buf_T *buf;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2661
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 ea.line1 = 1;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2663 switch (ea.addr_type)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2664 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2665 case ADDR_LINES:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2666 ea.line2 = curbuf->b_ml.ml_line_count;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2667 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2668 case ADDR_LOADED_BUFFERS:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2669 buf = firstbuf;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2670 while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2671 buf = buf->b_next;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2672 ea.line1 = buf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2673 buf = lastbuf;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2674 while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2675 buf = buf->b_prev;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2676 ea.line2 = buf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2677 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2678 case ADDR_BUFFERS:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2679 ea.line1 = firstbuf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2680 ea.line2 = lastbuf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2681 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2682 case ADDR_WINDOWS:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2683 ea.line2 = LAST_WIN_NR;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2684 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2685 case ADDR_TABS:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2686 ea.line2 = LAST_TAB_NR;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2687 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2688 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2689 ea.line2 = 1;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2690 break;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2691 case ADDR_ARGUMENTS:
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2692 if (ARGCOUNT == 0)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2693 ea.line1 = ea.line2 = 0;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2694 else
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2695 ea.line2 = ARGCOUNT;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2696 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2697 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2698 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2699 ea.line2 = qf_get_size(&ea);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2700 if (ea.line2 == 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2701 ea.line2 = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
2702 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
2703 #endif
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
2704 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 /* accept numbered register only when no count allowed (:put) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 if ( (ea.argt & REGSTR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 && *ea.arg != NUL
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2710 /* Do not allow register = for user commands */
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2711 && (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 {
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2714 #ifndef FEAT_CLIPBOARD
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2715 /* check these explicitly for a more specific error message */
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2716 if (*ea.arg == '*' || *ea.arg == '+')
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2717 {
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2718 errormsg = (char_u *)_(e_invalidreg);
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2719 goto doend;
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2720 }
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2721 #endif
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2722 if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2723 && !IS_USER_CMDIDX(ea.cmdidx))))
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2724 {
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2725 ea.regname = *ea.arg++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 #ifdef FEAT_EVAL
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2727 /* for '=' register: accept the rest of the line as an expression */
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2728 if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2729 {
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2730 set_expr_line(vim_strsave(ea.arg));
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2731 ea.arg += STRLEN(ea.arg);
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2732 }
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2733 #endif
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2734 ea.arg = skipwhite(ea.arg);
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2735 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 * Check for a count. When accepting a BUFNAME, don't use "123foo" as a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 * count, it's a buffer name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 if ((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 && (!(ea.argt & BUFNAME) || *(p = skipdigits(ea.arg)) == NUL
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
2744 || VIM_ISWHITE(*p)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 n = getdigits(&ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2747 ea.arg = skipwhite(ea.arg);
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
2748 if (n <= 0 && !ni && (ea.argt & ZEROR) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 errormsg = (char_u *)_(e_zerocount);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 if (ea.argt & NOTADR) /* e.g. :buffer 2, :sleep 3 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 ea.line2 = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 if (ea.addr_count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 ea.addr_count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 ea.line1 = ea.line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 ea.line2 += n - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 ++ea.addr_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765 * Be vi compatible: no error message for out of range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 */
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2767 if (ea.addr_type == ADDR_LINES
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
2768 && ea.line2 > curbuf->b_ml.ml_line_count)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 ea.line2 = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2771 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2772
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2773 /*
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2774 * Check for flags: 'l', 'p' and '#'.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2775 */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2776 if (ea.argt & EXFLAGS)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2777 get_flags(&ea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 /* no arguments allowed */
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
2779 if (!ni && !(ea.argt & EXTRA) && *ea.arg != NUL
715
b526e10493b1 updated for version 7.0217
vimboss
parents: 714
diff changeset
2780 && *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & TRLBAR) == 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 errormsg = (char_u *)_(e_trailing);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 if (!ni && (ea.argt & NEEDARG) && *ea.arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 errormsg = (char_u *)_(e_argreq);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 * Skip the command when it's not going to be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 * The commands like :if, :endif, etc. always need to be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 * Also make an exception for commands that handle a trailing command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 * themselves.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 if (ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 switch (ea.cmdidx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 /* commands that need evaluation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 case CMD_while:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 case CMD_endwhile:
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
2806 case CMD_for:
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
2807 case CMD_endfor:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 case CMD_if:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 case CMD_elseif:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 case CMD_else:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 case CMD_endif:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 case CMD_try:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 case CMD_catch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 case CMD_finally:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 case CMD_endtry:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 case CMD_function:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 /* Commands that handle '|' themselves. Check: A command should
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 * either have the TRLBAR flag, appear in this list or appear in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 * the list at ":help :bar". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 case CMD_aboveleft:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 case CMD_and:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 case CMD_belowright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 case CMD_botright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 case CMD_browse:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 case CMD_call:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 case CMD_confirm:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 case CMD_delfunction:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 case CMD_djump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 case CMD_dlist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 case CMD_dsearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 case CMD_dsplit:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 case CMD_echo:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 case CMD_echoerr:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 case CMD_echomsg:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 case CMD_echon:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 case CMD_execute:
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2839 case CMD_filter:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 case CMD_help:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 case CMD_hide:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 case CMD_ijump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 case CMD_ilist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 case CMD_isearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 case CMD_isplit:
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
2846 case CMD_keepalt:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 case CMD_keepjumps:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 case CMD_keepmarks:
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
2849 case CMD_keeppatterns:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 case CMD_leftabove:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 case CMD_let:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 case CMD_lockmarks:
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
2853 case CMD_lua:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 case CMD_match:
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
2855 case CMD_mzscheme:
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2856 case CMD_noautocmd:
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2857 case CMD_noswapfile:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 case CMD_perl:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 case CMD_psearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 case CMD_python:
2350
06feaf4fe36a Rename some "python3" symbols to "py3", as the command name.
Bram Moolenaar <bram@vim.org>
parents: 2340
diff changeset
2861 case CMD_py3:
2366
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
2862 case CMD_python3:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 case CMD_return:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 case CMD_rightbelow:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 case CMD_ruby:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 case CMD_silent:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867 case CMD_smagic:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 case CMD_snomagic:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 case CMD_substitute:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 case CMD_syntax:
690
0e922220d322 updated for version 7.0208
vimboss
parents: 685
diff changeset
2871 case CMD_tab:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 case CMD_tcl:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 case CMD_throw:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 case CMD_tilde:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 case CMD_topleft:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 case CMD_unlet:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 case CMD_verbose:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878 case CMD_vertical:
2887
15705b520c29 updated for version 7.3.217
Bram Moolenaar <bram@vim.org>
parents: 2853
diff changeset
2879 case CMD_wincmd:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2880 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 default: goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 if (ea.argt & XFILE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 if (expand_filename(&ea, cmdlinep, &errormsg) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 #ifdef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 * Accept buffer name. Cannot be used at the same time with a buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 * number. Don't do this for a user command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 if ((ea.argt & BUFNAME) && *ea.arg != NUL && ea.addr_count == 0
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2899 && !IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 * :bdelete, :bwipeout and :bunload take several arguments, separated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 * by spaces: find next space (skipping over escaped characters).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2904 * The others take one argument: ignore trailing spaces.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 if (ea.cmdidx == CMD_bdelete || ea.cmdidx == CMD_bwipeout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 || ea.cmdidx == CMD_bunload)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 p = skiptowhite_esc(ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 p = ea.arg + STRLEN(ea.arg);
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
2912 while (p > ea.arg && VIM_ISWHITE(p[-1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 }
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4211
diff changeset
2915 ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0,
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4211
diff changeset
2916 FALSE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 if (ea.line2 < 0) /* failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 ea.addr_count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 ea.arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
2925 * 7. Switch on command name.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 * The "ea" structure holds the arguments that can be used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929 ea.cmdlinep = cmdlinep;
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2930 ea.getline = fgetline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 ea.cookie = cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 ea.cstack = cstack;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 #ifdef FEAT_USR_CMDS
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2937 if (IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 * Execute a user-defined command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 do_ucmd(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 * Call the function to execute the command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 ea.errmsg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 (cmdnames[ea.cmdidx].cmd_func)(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 if (ea.errmsg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 errormsg = (char_u *)_(ea.errmsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 * If the command just executed called do_cmdline(), any throw or ":return"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 * or ":finish" encountered there must also check the cstack of the still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 * active do_cmdline() that called this do_one_cmd(). Rethrow an uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 * exception, or reanimate a returned function or finished script file and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 * return or finish it again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 if (need_rethrow)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 do_throw(cstack);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 else if (check_cstack)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2968 if (source_finished(fgetline, cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 do_finish(&ea, TRUE);
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2970 else if (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 && current_func_returned())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 do_return(&ea, TRUE, FALSE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 need_rethrow = check_cstack = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 doend:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 if (curwin->w_cursor.lnum == 0) /* can happen with zero line number */
11374
889da8649221 patch 8.0.0572: building the command table requires Perl
Christian Brabandt <cb@256bit.org>
parents: 11258
diff changeset
2979 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 curwin->w_cursor.lnum = 1;
11374
889da8649221 patch 8.0.0572: building the command table requires Perl
Christian Brabandt <cb@256bit.org>
parents: 11258
diff changeset
2981 curwin->w_cursor.col = 0;
889da8649221 patch 8.0.0572: building the command table requires Perl
Christian Brabandt <cb@256bit.org>
parents: 11258
diff changeset
2982 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 if (errormsg != NULL && *errormsg != NUL && !did_emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 if (sourcing)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 if (errormsg != IObuff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 STRCPY(IObuff, errormsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 errormsg = IObuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 }
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
2993 append_command(*cmdlinep);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 emsg(errormsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 do_errthrow(cstack,
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2999 (ea.cmdidx != CMD_SIZE && !IS_USER_CMDIDX(ea.cmdidx))
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
3000 ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 if (verbose_save >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 p_verbose = verbose_save;
588
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3005 #ifdef FEAT_AUTOCMD
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3006 if (cmdmod.save_ei != NULL)
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3007 {
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3008 /* Restore 'eventignore' to the value before ":noautocmd". */
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 690
diff changeset
3009 set_string_option_direct((char_u *)"ei", -1, cmdmod.save_ei,
07d199fe02ed updated for version 7.0209
vimboss
parents: 690
diff changeset
3010 OPT_FREE, SID_NONE);
588
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3011 free_string_option(cmdmod.save_ei);
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3012 }
d133e7c550d0 updated for version 7.0167
vimboss
parents: 573
diff changeset
3013 #endif
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
3014 if (cmdmod.filter_regmatch.regprog != NULL)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
3015 vim_regfree(cmdmod.filter_regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 cmdmod = save_cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
3019 if (save_msg_silent != -1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021 /* messages could be enabled for a serious error, need to check if the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 * counters don't become negative */
1968
eb27e3e2df70 updated for version 7.2-265
vimboss
parents: 1930
diff changeset
3023 if (!did_emsg || msg_silent > save_msg_silent)
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
3024 msg_silent = save_msg_silent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 emsg_silent -= did_esilent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 if (emsg_silent < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 emsg_silent = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 /* Restore msg_scroll, it's set by file I/O commands, even when no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 * message is actually displayed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 msg_scroll = save_msg_scroll;
1854
a58806285f20 updated for version 7.2-152
vimboss
parents: 1845
diff changeset
3031
a58806285f20 updated for version 7.2-152
vimboss
parents: 1845
diff changeset
3032 /* "silent reg" or "silent echo x" inside "redir" leaves msg_col
a58806285f20 updated for version 7.2-152
vimboss
parents: 1845
diff changeset
3033 * somewhere in the line. Put it back in the first column. */
a58806285f20 updated for version 7.2-152
vimboss
parents: 1845
diff changeset
3034 if (redirecting())
a58806285f20 updated for version 7.2-152
vimboss
parents: 1845
diff changeset
3035 msg_col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
3038 #ifdef HAVE_SANDBOX
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
3039 if (did_sandbox)
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
3040 --sandbox;
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
3041 #endif
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
3042
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 if (ea.nextcmd && *ea.nextcmd == NUL) /* not really a next command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 ea.nextcmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 --ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3048 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 return ea.nextcmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 #if (_MSC_VER == 1200)
128
8def260d486d updated for version 7.0044
vimboss
parents: 122
diff changeset
3053 #pragma optimize( "", on )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 /*
93
9c72ca2bfa44 updated for version 7.0037
vimboss
parents: 89
diff changeset
3057 * Check for an Ex command with optional tail.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 * If there is a match advance "pp" to the argument and return TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 */
93
9c72ca2bfa44 updated for version 7.0037
vimboss
parents: 89
diff changeset
3060 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3061 checkforcmd(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3062 char_u **pp, /* start of command */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3063 char *cmd, /* name of command */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3064 int len) /* required length */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 for (i = 0; cmd[i] != NUL; ++i)
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
3069 if (((char_u *)cmd)[i] != (*pp)[i])
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 if (i >= len && !isalpha((*pp)[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 *pp = skipwhite(*pp + i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 /*
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3080 * Append "cmd" to the error message in IObuff.
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3081 * Takes care of limiting the length and handling 0xa0, which would be
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3082 * invisible otherwise.
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3083 */
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3084 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3085 append_command(char_u *cmd)
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3086 {
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3087 char_u *s = cmd;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3088 char_u *d;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3089
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3090 STRCAT(IObuff, ": ");
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3091 d = IObuff + STRLEN(IObuff);
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3092 while (*s != NUL && d - IObuff < IOSIZE - 7)
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3093 {
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3094 if (
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3095 #ifdef FEAT_MBYTE
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3096 enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3097 #endif
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3098 *s == 0xa0)
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3099 {
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3100 s +=
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3101 #ifdef FEAT_MBYTE
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3102 enc_utf8 ? 2 :
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3103 #endif
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3104 1;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3105 STRCPY(d, "<a0>");
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3106 d += 4;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3107 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3108 else
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3109 MB_COPY_CHAR(s, d);
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3110 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3111 *d = NUL;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3112 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3113
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3114 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 * Find an Ex command by its name, either built-in or user.
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3116 * Start of the name can be found at eap->cmd.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 * Returns pointer to char after the command name.
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3118 * "full" is set to TRUE if the whole command name matched.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 * Returns NULL for an ambiguous user command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3122 find_command(exarg_T *eap, int *full UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 char_u *p;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3126 int i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 * Isolate the command and search for it in the command table.
1441
21b11491a33f updated for version 7.1-156
vimboss
parents: 1427
diff changeset
3130 * Exceptions:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 * - the 'k' command can directly be followed by any character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
3133 * but :sre[wind] is another command, as are :scr[iptnames],
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 * :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3135 * - the "d" command can directly be followed by 'l' or 'p' flag.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3136 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3137 p = eap->cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3138 if (*p == 'k')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3139 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 eap->cmdidx = CMD_k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3141 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 else if (p[0] == 's'
6987
1661dd8df592 patch 7.4.811
Bram Moolenaar <bram@vim.org>
parents: 6965
diff changeset
3144 && ((p[1] == 'c' && (p[2] == NUL || (p[2] != 's' && p[2] != 'r'
1661dd8df592 patch 7.4.811
Bram Moolenaar <bram@vim.org>
parents: 6965
diff changeset
3145 && (p[3] == NUL || (p[3] != 'i' && p[4] != 'p')))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 || p[1] == 'g'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147 || (p[1] == 'i' && p[2] != 'm' && p[2] != 'l' && p[2] != 'g')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 || p[1] == 'I'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 || (p[1] == 'r' && p[2] != 'e')))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 eap->cmdidx = CMD_substitute;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3152 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 while (ASCII_ISALPHA(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 ++p;
2366
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
3158 /* for python 3.x support ":py3", ":python3", ":py3file", etc. */
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
3159 if (eap->cmd[0] == 'p' && eap->cmd[1] == 'y')
2366
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
3160 while (ASCII_ISALNUM(*p))
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
3161 ++p;
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
3162
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 /* check for non-alpha command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 if (p == eap->cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 len = (int)(p - eap->cmd);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3167 if (*eap->cmd == 'd' && (p[-1] == 'l' || p[-1] == 'p'))
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3168 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3169 /* Check for ":dl", ":dell", etc. to ":deletel": that's
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3170 * :delete with the 'l' flag. Same for 'p'. */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3171 for (i = 0; i < len; ++i)
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
3172 if (eap->cmd[i] != ((char_u *)"delete")[i])
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3173 break;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3174 if (i == len - 1)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3175 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3176 --len;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3177 if (p[-1] == 'l')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3178 eap->flags |= EXFLAG_LIST;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3179 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3180 eap->flags |= EXFLAG_PRINT;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3181 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3182 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3184 if (ASCII_ISLOWER(eap->cmd[0]))
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3185 {
11240
06307d812ca7 patch 8.0.0506: can't build with ANSI C
Christian Brabandt <cb@256bit.org>
parents: 11236
diff changeset
3186 int c1 = eap->cmd[0];
06307d812ca7 patch 8.0.0506: can't build with ANSI C
Christian Brabandt <cb@256bit.org>
parents: 11236
diff changeset
3187 int c2 = eap->cmd[1];
06307d812ca7 patch 8.0.0506: can't build with ANSI C
Christian Brabandt <cb@256bit.org>
parents: 11236
diff changeset
3188
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3189 if (command_count != (int)CMD_SIZE)
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3190 {
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3191 iemsg((char_u *)_("E943: Command table needs to be updated, run 'make cmdidxs'"));
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3192 getout(1);
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3193 }
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3194
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3195 /* Use a precomputed index for fast look-up in cmdnames[]
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3196 * taking into account the first 2 letters of eap->cmd. */
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3197 eap->cmdidx = cmdidxs1[CharOrdLow(c1)];
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3198 if (ASCII_ISLOWER(c2))
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3199 eap->cmdidx += cmdidxs2[CharOrdLow(c1)][CharOrdLow(c2)];
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3200 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3201 else
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3202 eap->cmdidx = CMD_bang;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3204 for ( ; (int)eap->cmdidx < (int)CMD_SIZE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3205 eap->cmdidx = (cmdidx_T)((int)eap->cmdidx + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3206 if (STRNCMP(cmdnames[(int)eap->cmdidx].cmd_name, (char *)eap->cmd,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3207 (size_t)len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3208 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3209 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3210 if (full != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3211 && cmdnames[(int)eap->cmdidx].cmd_name[len] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3212 *full = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3213 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3214 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3217 #ifdef FEAT_USR_CMDS
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
3218 /* Look for a user defined command as a last resort. Let ":Print" be
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
3219 * overruled by a user defined command. */
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
3220 if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
3221 && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 {
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3223 /* User defined commands may contain digits. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 while (ASCII_ISALNUM(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 ++p;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3226 p = find_ucmd(eap, p, full, NULL, NULL);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3227 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3228 #endif
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3229 if (p == eap->cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 eap->cmdidx = CMD_SIZE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3236 #ifdef FEAT_USR_CMDS
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3237 /*
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3238 * Search for a user command that matches "eap->cmd".
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3239 * Return cmdidx in "eap->cmdidx", flags in "eap->argt", idx in "eap->useridx".
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3240 * Return a pointer to just after the command.
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3241 * Return NULL if there is no matching command.
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3242 */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3243 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3244 find_ucmd(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3245 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3246 char_u *p, /* end of the command (possibly including count) */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3247 int *full, /* set to TRUE for a full match */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3248 expand_T *xp, /* used for completion, NULL otherwise */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3249 int *compl) /* completion flags or NULL */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3250 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3251 int len = (int)(p - eap->cmd);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3252 int j, k, matchlen = 0;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3253 ucmd_T *uc;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3254 int found = FALSE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3255 int possible = FALSE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3256 char_u *cp, *np; /* Point into typed cmd and test name */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3257 garray_T *gap;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3258 int amb_local = FALSE; /* Found ambiguous buffer-local command,
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3259 only full match global is accepted. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3260
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3261 /*
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3262 * Look for buffer-local user commands first, then global ones.
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3263 */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3264 gap = &curbuf->b_ucmds;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3265 for (;;)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3266 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3267 for (j = 0; j < gap->ga_len; ++j)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3268 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3269 uc = USER_CMD_GA(gap, j);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3270 cp = eap->cmd;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3271 np = uc->uc_name;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3272 k = 0;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3273 while (k < len && *np != NUL && *cp++ == *np++)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3274 k++;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3275 if (k == len || (*np == NUL && vim_isdigit(eap->cmd[k])))
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3276 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3277 /* If finding a second match, the command is ambiguous. But
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3278 * not if a buffer-local command wasn't a full match and a
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3279 * global command is a full match. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3280 if (k == len && found && *np != NUL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3281 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3282 if (gap == &ucmds)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3283 return NULL;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3284 amb_local = TRUE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3285 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3286
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3287 if (!found || (k == len && *np == NUL))
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3288 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3289 /* If we matched up to a digit, then there could
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3290 * be another command including the digit that we
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3291 * should use instead.
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3292 */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3293 if (k == len)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3294 found = TRUE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3295 else
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3296 possible = TRUE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3297
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3298 if (gap == &ucmds)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3299 eap->cmdidx = CMD_USER;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3300 else
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3301 eap->cmdidx = CMD_USER_BUF;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
3302 eap->argt = (long)uc->uc_argt;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3303 eap->useridx = j;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3304 eap->addr_type = uc->uc_addr_type;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3305
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3306 # ifdef FEAT_CMDL_COMPL
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3307 if (compl != NULL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3308 *compl = uc->uc_compl;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3309 # ifdef FEAT_EVAL
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3310 if (xp != NULL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3311 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3312 xp->xp_arg = uc->uc_compl_arg;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3313 xp->xp_scriptID = uc->uc_scriptID;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3314 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3315 # endif
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3316 # endif
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3317 /* Do not search for further abbreviations
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3318 * if this is an exact match. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3319 matchlen = k;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3320 if (k == len && *np == NUL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3321 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3322 if (full != NULL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3323 *full = TRUE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3324 amb_local = FALSE;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3325 break;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3326 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3327 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3328 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3329 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3330
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3331 /* Stop if we found a full match or searched all. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3332 if (j < gap->ga_len || gap == &ucmds)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3333 break;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3334 gap = &ucmds;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3335 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3336
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3337 /* Only found ambiguous matches. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3338 if (amb_local)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3339 {
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3340 if (xp != NULL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3341 xp->xp_context = EXPAND_UNSUCCESSFUL;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3342 return NULL;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3343 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3344
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3345 /* The match we found may be followed immediately by a number. Move "p"
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3346 * back to point to it. */
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3347 if (found || possible)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3348 return p + (matchlen - len);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3349 return p;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3350 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3351 #endif
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3352
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 #if defined(FEAT_EVAL) || defined(PROTO)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3354 static struct cmdmod
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3355 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3356 char *name;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3357 int minlen;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3358 int has_count; /* :123verbose :3tab */
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3359 } cmdmods[] = {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3360 {"aboveleft", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3361 {"belowright", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3362 {"botright", 2, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3363 {"browse", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3364 {"confirm", 4, FALSE},
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
3365 {"filter", 4, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3366 {"hide", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3367 {"keepalt", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3368 {"keepjumps", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3369 {"keepmarks", 3, FALSE},
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
3370 {"keeppatterns", 5, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3371 {"leftabove", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3372 {"lockmarks", 3, FALSE},
1721
d23a400b7184 updated for version 7.2-019
vimboss
parents: 1689
diff changeset
3373 {"noautocmd", 3, FALSE},
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3374 {"noswapfile", 3, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3375 {"rightbelow", 6, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3376 {"sandbox", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3377 {"silent", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3378 {"tab", 3, TRUE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3379 {"topleft", 2, FALSE},
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
3380 {"unsilent", 3, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3381 {"verbose", 4, TRUE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3382 {"vertical", 4, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3383 };
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3384
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3385 /*
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3386 * Return length of a command modifier (including optional count).
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3387 * Return zero when it's not a modifier.
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3388 */
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3389 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3390 modifier_len(char_u *cmd)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3391 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3392 int i, j;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3393 char_u *p = cmd;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3394
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3395 if (VIM_ISDIGIT(*cmd))
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3396 p = skipwhite(skipdigits(cmd));
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1879
diff changeset
3397 for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3398 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3399 for (j = 0; p[j] != NUL; ++j)
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3400 if (p[j] != cmdmods[i].name[j])
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3401 break;
4857
84a8d1ba81c3 updated for version 7.3.1175
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
3402 if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3403 && (p == cmd || cmdmods[i].has_count))
1570
f0cfff4dcc2f updated for version 7.1-283
vimboss
parents: 1557
diff changeset
3404 return j + (int)(p - cmd);
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3405 }
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3406 return 0;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3407 }
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3408
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410 * Return > 0 if an Ex command "name" exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 * Return 2 if there is an exact match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 * Return 3 if there is an ambiguous match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3415 cmd_exists(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 exarg_T ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 int full = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 int j;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3421 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423 /* Check command modifiers. */
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1879
diff changeset
3424 for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3425 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3426 for (j = 0; name[j] != NUL; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3427 if (name[j] != cmdmods[i].name[j])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 if (name[j] == NUL && j >= cmdmods[i].minlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 return (cmdmods[i].name[j] == NUL ? 2 : 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432
862
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3433 /* Check built-in commands and user defined commands.
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3434 * For ":2match" and ":3match" we need to skip the number. */
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3435 ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 ea.cmdidx = (cmdidx_T)0;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3437 p = find_command(&ea, &full);
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3438 if (p == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 return 3;
862
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3440 if (vim_isdigit(*name) && ea.cmdidx != CMD_match)
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3441 return 0;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3442 if (*skipwhite(p) != NUL)
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3443 return 0; /* trailing garbage */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 return (ea.cmdidx == CMD_SIZE ? 0 : (full ? 2 : 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 * This is all pretty much copied from do_one_cmd(), with all the extra stuff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 * we don't need/want deleted. Maybe this could be done better if we didn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 * repeat all this stuff. The only problem is that they may not stay
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 * perfectly compatible with each other, but then the command line syntax
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 * probably won't change that much -- webb.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3456 set_one_cmd_context(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3457 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3458 char_u *buff) /* buffer for command string */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 char_u *cmd, *arg;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3462 int len = 0;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3463 exarg_T ea;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 #if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 int compl = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 #ifdef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 int delim;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 int forceit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 int usefilter = FALSE; /* filter instead of file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
3473 ExpandInit(xp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 xp->xp_pattern = buff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 xp->xp_context = EXPAND_COMMANDS; /* Default until we get past command */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3476 ea.argt = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
3479 * 1. skip comment lines and leading space, colons or bars
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 for (cmd = buff; vim_strchr((char_u *)" \t:|", *cmd) != NULL; cmd++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 xp->xp_pattern = cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 if (*cmd == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487 if (*cmd == '"') /* ignore comment lines */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3488 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3492
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3493 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
3494 * 3. Skip over the range to find the command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 cmd = skip_range(cmd, &xp->xp_context);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497 xp->xp_pattern = cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 if (*cmd == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 if (*cmd == '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 if (*cmd == '|' || *cmd == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 return cmd + 1; /* There's another command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 * Isolate the command and search for it in the command table.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 * Exceptions:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 * - the 'k' command can directly be followed by any character, but
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
3513 * do accept "keepmarks", "keepalt" and "keepjumps".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514 * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 if (*cmd == 'k' && cmd[1] != 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 {
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3518 ea.cmdidx = CMD_k;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 p = cmd + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 p = cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 while (ASCII_ISALPHA(*p) || *p == '*') /* Allow * wild card */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 ++p;
7168
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3526 /* a user command may contain digits */
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3527 if (ASCII_ISUPPER(cmd[0]))
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3528 while (ASCII_ISALNUM(*p) || *p == '*')
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3529 ++p;
4710
1c5da99d1b70 updated for version 7.3.1102
Bram Moolenaar <bram@vim.org>
parents: 4704
diff changeset
3530 /* for python 3.x: ":py3*" commands completion */
1c5da99d1b70 updated for version 7.3.1102
Bram Moolenaar <bram@vim.org>
parents: 4704
diff changeset
3531 if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
5545
4bf53c1ef37a updated for version 7.4.121
Bram Moolenaar <bram@vim.org>
parents: 5498
diff changeset
3532 {
4710
1c5da99d1b70 updated for version 7.3.1102
Bram Moolenaar <bram@vim.org>
parents: 4704
diff changeset
3533 ++p;
5545
4bf53c1ef37a updated for version 7.4.121
Bram Moolenaar <bram@vim.org>
parents: 5498
diff changeset
3534 while (ASCII_ISALPHA(*p) || *p == '*')
4bf53c1ef37a updated for version 7.4.121
Bram Moolenaar <bram@vim.org>
parents: 5498
diff changeset
3535 ++p;
4bf53c1ef37a updated for version 7.4.121
Bram Moolenaar <bram@vim.org>
parents: 5498
diff changeset
3536 }
7168
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3537 /* check for non-alpha command */
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3538 if (p == cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL)
0f2807c05687 commit https://github.com/vim/vim/commit/23d1b62746dce048c80cc19e7e5af1d513b6b4cf
Christian Brabandt <cb@256bit.org>
parents: 7133
diff changeset
3539 ++p;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3540 len = (int)(p - cmd);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3541
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3542 if (len == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3544 xp->xp_context = EXPAND_UNSUCCESSFUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 }
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3547 for (ea.cmdidx = (cmdidx_T)0; (int)ea.cmdidx < (int)CMD_SIZE;
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
3548 ea.cmdidx = (cmdidx_T)((int)ea.cmdidx + 1))
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
3549 if (STRNCMP(cmdnames[(int)ea.cmdidx].cmd_name, cmd,
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
3550 (size_t)len) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 if (cmd[0] >= 'A' && cmd[0] <= 'Z')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 while (ASCII_ISALNUM(*p) || *p == '*') /* Allow * wild card */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 * If the cursor is touching the command, and it ends in an alpha-numeric
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 * character, complete the command name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 if (*p == NUL && ASCII_ISALNUM(p[-1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3567 if (ea.cmdidx == CMD_SIZE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569 if (*cmd == 's' && vim_strchr((char_u *)"cgriI", cmd[1]) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 {
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3571 ea.cmdidx = CMD_substitute;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 p = cmd + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 else if (cmd[0] >= 'A' && cmd[0] <= 'Z')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 {
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3577 ea.cmd = cmd;
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3578 p = find_ucmd(&ea, p, NULL, xp,
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3579 # if defined(FEAT_CMDL_COMPL)
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3580 &compl
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3581 # else
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3582 NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 # endif
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3584 );
620
9e359e5759f6 updated for version 7.0177
vimboss
parents: 598
diff changeset
3585 if (p == NULL)
9e359e5759f6 updated for version 7.0177
vimboss
parents: 598
diff changeset
3586 ea.cmdidx = CMD_SIZE; /* ambiguous user command */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3587 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3588 #endif
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3589 }
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3590 if (ea.cmdidx == CMD_SIZE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 /* Not still touching the command and it was an illegal one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 xp->xp_context = EXPAND_UNSUCCESSFUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 xp->xp_context = EXPAND_NOTHING; /* Default now that we're past command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 if (*p == '!') /* forced commands */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
3606 * 6. parse arguments
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 */
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
3608 if (!IS_USER_CMDIDX(ea.cmdidx))
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
3609 ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611 arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3613 if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615 if (*arg == '>') /* append */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 if (*++arg == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 }
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3621 else if (*arg == '!' && ea.cmdidx == CMD_write) /* :w !filter */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3628 if (ea.cmdidx == CMD_read)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 usefilter = forceit; /* :r! filter if forced */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 if (*arg == '!') /* :r !filter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3638 if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 while (*arg == *cmd) /* allow any number of '>' or '<' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 /* Does command allow "+command"? */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3646 if ((ea.argt & EDITCMD) && !usefilter && *arg == '+')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 /* Check if we're in the +command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 p = arg + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 arg = skip_cmd_arg(arg, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 /* Still touching the command after '+'? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 if (*arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 /* Skip space(s) after +command to get to the real argument */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 * Check for '|' to separate commands and '"' to start comments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 * Don't do this for ":read !cmd" and ":write !cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3664 if ((ea.argt & TRLBAR) && !usefilter)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 /* ":redir @" is not the start of a comment */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3668 if (ea.cmdidx == CMD_redir && p[0] == '@' && p[1] == '"')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669 p += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 while (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 if (*p == Ctrl_V)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 if (p[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 }
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3677 else if ( (*p == '"' && !(ea.argt & NOTRLCOM))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 || *p == '|' || *p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 if (*(p - 1) != '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 if (*p == '|' || *p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 return p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 return NULL; /* It's a comment */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
3687 MB_PTR_ADV(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 /* no arguments allowed */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3692 if (!(ea.argt & EXTRA) && *arg != NUL &&
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 vim_strchr((char_u *)"|\"", *arg) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 /* Find start of last argument (argument just before cursor): */
3711
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3697 p = buff;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 xp->xp_pattern = p;
3724
ac13ea2b098d updated for version 7.3.621
Bram Moolenaar <bram@vim.org>
parents: 3716
diff changeset
3699 len = (int)STRLEN(buff);
3711
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3700 while (*p && p < buff + len)
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3701 {
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3702 if (*p == ' ' || *p == TAB)
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3703 {
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3704 /* argument starts after a space */
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3705 xp->xp_pattern = ++p;
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3706 }
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3707 else
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3708 {
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3709 if (*p == '\\' && *(p + 1) != NUL)
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3710 ++p; /* skip over escaped character */
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
3711 MB_PTR_ADV(p);
3711
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3712 }
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
3713 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3715 if (ea.argt & XFILE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 {
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3717 int c;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3718 int in_quote = FALSE;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3719 char_u *bow = NULL; /* Beginning of word */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 * Allow spaces within back-quotes to count as part of the argument
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 * being expanded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 xp->xp_pattern = skipwhite(arg);
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3726 p = xp->xp_pattern;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3727 while (*p != NUL)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3728 {
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3729 #ifdef FEAT_MBYTE
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3730 if (has_mbyte)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3731 c = mb_ptr2char(p);
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3732 else
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3733 #endif
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3734 c = *p;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3735 if (c == '\\' && p[1] != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 ++p;
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3737 else if (c == '`')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 if (!in_quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 xp->xp_pattern = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 bow = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 in_quote = !in_quote;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 }
1511
9c970d8681f4 updated for version 7.1-226
vimboss
parents: 1498
diff changeset
3746 /* An argument can contain just about everything, except
9c970d8681f4 updated for version 7.1-226
vimboss
parents: 1498
diff changeset
3747 * characters that end the command and white space. */
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
3748 else if (c == '|' || c == '\n' || c == '"' || (VIM_ISWHITE(c)
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3749 #ifdef SPACE_IN_FILENAME
1511
9c970d8681f4 updated for version 7.1-226
vimboss
parents: 1498
diff changeset
3750 && (!(ea.argt & NOSPC) || usefilter)
9c970d8681f4 updated for version 7.1-226
vimboss
parents: 1498
diff changeset
3751 #endif
9c970d8681f4 updated for version 7.1-226
vimboss
parents: 1498
diff changeset
3752 ))
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3753 {
1551
539d9b8f418a updated for version 7.1-265
vimboss
parents: 1521
diff changeset
3754 len = 0; /* avoid getting stuck when space is in 'isfname' */
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3755 while (*p != NUL)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3756 {
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3757 #ifdef FEAT_MBYTE
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3758 if (has_mbyte)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3759 c = mb_ptr2char(p);
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3760 else
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3761 #endif
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3762 c = *p;
1369
1d4c67f84709 updated for version 7.1-084
vimboss
parents: 1367
diff changeset
3763 if (c == '`' || vim_isfilec_or_wc(c))
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3764 break;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3765 #ifdef FEAT_MBYTE
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3766 if (has_mbyte)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3767 len = (*mb_ptr2len)(p);
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3768 else
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3769 #endif
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3770 len = 1;
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
3771 MB_PTR_ADV(p);
1367
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3772 }
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3773 if (in_quote)
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3774 bow = p;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3775 else
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3776 xp->xp_pattern = p;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3777 p -= len;
151a805b2ddc updated for version 7.1-081
vimboss
parents: 1362
diff changeset
3778 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
3779 MB_PTR_ADV(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 * If we are still inside the quotes, and we passed a space, just
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 * expand from there.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 if (bow != NULL && in_quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 xp->xp_pattern = bow;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 xp->xp_context = EXPAND_FILES;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
3789
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
3790 /* For a shell command more chars need to be escaped. */
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
3791 if (usefilter || ea.cmdidx == CMD_bang)
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
3792 {
2511
2f5b709a6470 Fixed: on MS-Windows completion of shell commands didn't work.
Bram Moolenaar <bram@vim.org>
parents: 2444
diff changeset
3793 #ifndef BACKSLASH_IN_FILENAME
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
3794 xp->xp_shell = TRUE;
2511
2f5b709a6470 Fixed: on MS-Windows completion of shell commands didn't work.
Bram Moolenaar <bram@vim.org>
parents: 2444
diff changeset
3795 #endif
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
3796 /* When still after the command name expand executables. */
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
3797 if (xp->xp_pattern == skipwhite(arg))
1132
857a5e3e1d34 updated for version 7.1a
vimboss
parents: 1113
diff changeset
3798 xp->xp_context = EXPAND_SHELLCMD;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
3799 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 /* Check for environment variable */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 if (*xp->xp_pattern == '$'
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7864
diff changeset
3803 #if defined(MSWIN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 || *xp->xp_pattern == '%'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3807 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 for (p = xp->xp_pattern + 1; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 if (!vim_isIDc(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 xp->xp_context = EXPAND_ENV_VARS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 ++xp->xp_pattern;
17
9be87deaeb52 updated for version 7.0009
vimboss
parents: 16
diff changeset
3815 #if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
9be87deaeb52 updated for version 7.0009
vimboss
parents: 16
diff changeset
3816 /* Avoid that the assignment uses EXPAND_FILES again. */
406
aa550d9d2403 updated for version 7.0106
vimboss
parents: 398
diff changeset
3817 if (compl != EXPAND_USER_DEFINED && compl != EXPAND_USER_LIST)
17
9be87deaeb52 updated for version 7.0009
vimboss
parents: 16
diff changeset
3818 compl = EXPAND_ENV_VARS;
9be87deaeb52 updated for version 7.0009
vimboss
parents: 16
diff changeset
3819 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 }
3744
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3822 #if defined(FEAT_CMDL_COMPL)
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3823 /* Check for user names */
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3824 if (*xp->xp_pattern == '~')
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3825 {
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3826 for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3827 ;
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3828 /* Complete ~user only if it partially matches a user name.
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3829 * A full match ~user<Tab> will be replaced by user's home
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3830 * directory i.e. something like ~user<Tab> -> /home/user/ */
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3831 if (*p == NUL && p > xp->xp_pattern + 1
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3832 && match_user(xp->xp_pattern + 1) == 1)
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3833 {
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3834 xp->xp_context = EXPAND_USER;
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3835 ++xp->xp_pattern;
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3836 }
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3837 }
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
3838 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 /*
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
3842 * 6. Switch on command name.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3844 switch (ea.cmdidx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 {
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2294
diff changeset
3846 case CMD_find:
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2294
diff changeset
3847 case CMD_sfind:
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2294
diff changeset
3848 case CMD_tabfind:
2575
fde086181841 updated for version 7.3.002
Bram Moolenaar <bram@vim.org>
parents: 2511
diff changeset
3849 if (xp->xp_context == EXPAND_FILES)
fde086181841 updated for version 7.3.002
Bram Moolenaar <bram@vim.org>
parents: 2511
diff changeset
3850 xp->xp_context = EXPAND_FILES_IN_PATH;
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2294
diff changeset
3851 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 case CMD_cd:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 case CMD_chdir:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 case CMD_lcd:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 case CMD_lchdir:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 if (xp->xp_context == EXPAND_FILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 xp->xp_context = EXPAND_DIRECTORIES;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 case CMD_help:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 xp->xp_context = EXPAND_HELP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863
198
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3864 /* Command modifiers: return the argument.
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3865 * Also for commands with an argument that is a command. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 case CMD_aboveleft:
198
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3867 case CMD_argdo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 case CMD_belowright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 case CMD_botright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 case CMD_browse:
198
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3871 case CMD_bufdo:
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
3872 case CMD_cdo:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
3873 case CMD_cfdo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 case CMD_confirm:
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3875 case CMD_debug:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 case CMD_folddoclosed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 case CMD_folddoopen:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 case CMD_hide:
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
3879 case CMD_keepalt:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 case CMD_keepjumps:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 case CMD_keepmarks:
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
3882 case CMD_keeppatterns:
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
3883 case CMD_ldo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 case CMD_leftabove:
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
3885 case CMD_lfdo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 case CMD_lockmarks:
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3887 case CMD_noautocmd:
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3888 case CMD_noswapfile:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 case CMD_rightbelow:
198
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3890 case CMD_sandbox:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 case CMD_silent:
690
0e922220d322 updated for version 7.0208
vimboss
parents: 685
diff changeset
3892 case CMD_tab:
4928
afb00cc8caac updated for version 7.3.1209
Bram Moolenaar <bram@vim.org>
parents: 4889
diff changeset
3893 case CMD_tabdo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 case CMD_topleft:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895 case CMD_verbose:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 case CMD_vertical:
198
14fa8e0424c3 updated for version 7.0059
vimboss
parents: 184
diff changeset
3897 case CMD_windo:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898 return arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899
10520
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3900 case CMD_filter:
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3901 if (*arg != NUL)
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3902 arg = skip_vimgrep_pat(arg, NULL, NULL);
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3903 if (arg == NULL || *arg == NUL)
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3904 {
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3905 xp->xp_context = EXPAND_NOTHING;
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3906 return NULL;
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3907 }
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3908 return skipwhite(arg);
4b152b5f414f commit https://github.com/vim/vim/commit/7069bf18e1b1b7bc7640335e07d1022b5acc9048
Christian Brabandt <cb@256bit.org>
parents: 10492
diff changeset
3909
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3910 #ifdef FEAT_CMDL_COMPL
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3911 # ifdef FEAT_SEARCH_EXTRA
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 case CMD_match:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 if (*arg == NUL || !ends_excmd(*arg))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 {
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3915 /* also complete "None" */
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3916 set_context_in_echohl_cmd(xp, arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 arg = skipwhite(skiptowhite(arg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 if (*arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3919 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 arg = skip_regexp(arg + 1, *arg, p_magic, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 return find_nextcmd(arg);
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3925 # endif
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
3926
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 * All completion for the +cmdline_compl feature goes here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 # ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 case CMD_command:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 /* Check for attributes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 while (*arg == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 arg++; /* Skip "-" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 p = skiptowhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 /* Cursor is still in the attribute */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 p = vim_strchr(arg, '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 /* No "=", so complete attribute names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 xp->xp_context = EXPAND_USER_CMD_FLAGS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3948 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3950 /* For the -complete, -nargs and -addr attributes, we complete
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 * their arguments as well.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 if (STRNICMP(arg, "complete", p - arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 xp->xp_context = EXPAND_USER_COMPLETE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 xp->xp_pattern = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 else if (STRNICMP(arg, "nargs", p - arg) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 xp->xp_context = EXPAND_USER_NARGS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962 xp->xp_pattern = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3963 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 }
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3965 else if (STRNICMP(arg, "addr", p - arg) == 0)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3966 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3967 xp->xp_context = EXPAND_USER_ADDR_TYPE;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3968 xp->xp_pattern = p + 1;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3969 return NULL;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
3970 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 /* After the attributes comes the new command name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 p = skiptowhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 xp->xp_context = EXPAND_USER_COMMANDS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 /* And finally comes a normal command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 return skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 case CMD_delcommand:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 xp->xp_context = EXPAND_USER_COMMANDS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3991 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3992 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 case CMD_global:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 case CMD_vglobal:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 delim = *arg; /* get the delimiter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 if (delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998 ++arg; /* skip delimiter if there is one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 while (arg[0] != NUL && arg[0] != delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 if (arg[0] == '\\' && arg[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 if (arg[0] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4007 return arg + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009 case CMD_and:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 case CMD_substitute:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 delim = *arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 if (delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 /* skip "from" part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 arg = skip_regexp(arg, delim, p_magic, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 /* skip "to" part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 while (arg[0] != NUL && arg[0] != delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4021 if (arg[0] == '\\' && arg[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4022 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4023 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4024 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4025 if (arg[0] != NUL) /* skip delimiter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4026 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4027 while (arg[0] && vim_strchr((char_u *)"|\"#", arg[0]) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4028 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4029 if (arg[0] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4030 return arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4031 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4032 case CMD_isearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4033 case CMD_dsearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4034 case CMD_ilist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4035 case CMD_dlist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4036 case CMD_ijump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4037 case CMD_psearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4038 case CMD_djump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4039 case CMD_isplit:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4040 case CMD_dsplit:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4041 arg = skipwhite(skipdigits(arg)); /* skip count */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4042 if (*arg == '/') /* Match regexp, not just whole words */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4044 for (++arg; *arg && *arg != '/'; arg++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4045 if (*arg == '\\' && arg[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4046 arg++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4047 if (*arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 arg = skipwhite(arg + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051 /* Check for trailing illegal characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 if (*arg && vim_strchr((char_u *)"|\"\n", *arg) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4054 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 return arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 case CMD_autocmd:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 return set_context_in_autocmd(xp, arg, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 case CMD_doautocmd:
1731
656b4c052203 updated for version 7.2-029
vimboss
parents: 1723
diff changeset
4064 case CMD_doautoall:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 return set_context_in_autocmd(xp, arg, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4067 case CMD_set:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 set_context_in_set_cmd(xp, arg, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 case CMD_setglobal:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 set_context_in_set_cmd(xp, arg, OPT_GLOBAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 case CMD_setlocal:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 set_context_in_set_cmd(xp, arg, OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 case CMD_tag:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 case CMD_stag:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 case CMD_ptag:
649
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
4079 case CMD_ltag:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080 case CMD_tselect:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 case CMD_stselect:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4082 case CMD_ptselect:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083 case CMD_tjump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 case CMD_stjump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 case CMD_ptjump:
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
4086 if (*p_wop != NUL)
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
4087 xp->xp_context = EXPAND_TAGS_LISTFILES;
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
4088 else
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
4089 xp->xp_context = EXPAND_TAGS;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 case CMD_augroup:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093 xp->xp_context = EXPAND_AUGROUP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097 case CMD_syntax:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 set_context_in_syntax_cmd(xp, arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 case CMD_let:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 case CMD_if:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 case CMD_elseif:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 case CMD_while:
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
4106 case CMD_for:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 case CMD_echo:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108 case CMD_echon:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 case CMD_execute:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110 case CMD_echomsg:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 case CMD_echoerr:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112 case CMD_call:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4113 case CMD_return:
10656
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4114 case CMD_cexpr:
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4115 case CMD_caddexpr:
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4116 case CMD_cgetexpr:
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4117 case CMD_lexpr:
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4118 case CMD_laddexpr:
4762bd300564 patch 8.0.0218: no completion for :cexpr and similar commands
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
4119 case CMD_lgetexpr:
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
4120 set_context_for_expression(xp, arg, ea.cmdidx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 case CMD_unlet:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 arg = xp->xp_pattern + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 xp->xp_context = EXPAND_USER_VARS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130 case CMD_function:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 case CMD_delfunction:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 xp->xp_context = EXPAND_USER_FUNC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 case CMD_echohl:
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1315
diff changeset
4137 set_context_in_echohl_cmd(xp, arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 case CMD_highlight:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4141 set_context_in_highlight_cmd(xp, arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 break;
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
4143 #ifdef FEAT_CSCOPE
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
4144 case CMD_cscope:
1858
ff5a4a71a761 updated for version 7.2-156
vimboss
parents: 1854
diff changeset
4145 case CMD_lcscope:
ff5a4a71a761 updated for version 7.2-156
vimboss
parents: 1854
diff changeset
4146 case CMD_scscope:
ff5a4a71a761 updated for version 7.2-156
vimboss
parents: 1854
diff changeset
4147 set_context_in_cscope_cmd(xp, arg, ea.cmdidx);
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
4148 break;
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
4149 #endif
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
4150 #ifdef FEAT_SIGNS
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
4151 case CMD_sign:
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
4152 set_context_in_sign_cmd(xp, arg);
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
4153 break;
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
4154 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 #ifdef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 case CMD_bdelete:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 case CMD_bwipeout:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 case CMD_bunload:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 arg = xp->xp_pattern + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 /*FALLTHROUGH*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 case CMD_buffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 case CMD_sbuffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 case CMD_checktime:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 xp->xp_context = EXPAND_BUFFERS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 case CMD_USER:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 case CMD_USER_BUF:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 if (compl != EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174 /* XFILE: file names are handled above */
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
4175 if (!(ea.argt & XFILE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177 # ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 if (compl == EXPAND_MENUS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 return set_context_in_menu_cmd(xp, cmd, arg, forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 if (compl == EXPAND_COMMANDS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 return arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 if (compl == EXPAND_MAPPINGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 return set_context_in_map_cmd(xp, (char_u *)"map",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 arg, forceit, FALSE, FALSE, CMD_map);
3711
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4186 /* Find start of last argument. */
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4187 p = arg;
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4188 while (*p)
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4189 {
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4190 if (*p == ' ')
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4191 /* argument starts after a space */
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4192 arg = p + 1;
3716
73db39ca1877 updated for version 7.3.617
Bram Moolenaar <bram@vim.org>
parents: 3711
diff changeset
4193 else if (*p == '\\' && *(p + 1) != NUL)
73db39ca1877 updated for version 7.3.617
Bram Moolenaar <bram@vim.org>
parents: 3711
diff changeset
4194 ++p; /* skip over escaped character */
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
4195 MB_PTR_ADV(p);
3711
169ccc471a8a updated for version 7.3.615
Bram Moolenaar <bram@vim.org>
parents: 3680
diff changeset
4196 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4197 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199 xp->xp_context = compl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203 case CMD_map: case CMD_noremap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 case CMD_nmap: case CMD_nnoremap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 case CMD_vmap: case CMD_vnoremap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 case CMD_omap: case CMD_onoremap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 case CMD_imap: case CMD_inoremap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4208 case CMD_cmap: case CMD_cnoremap:
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4209 case CMD_lmap: case CMD_lnoremap:
4365
fe0c7437ae8b updated for version 7.3.931
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4210 case CMD_smap: case CMD_snoremap:
fe0c7437ae8b updated for version 7.3.931
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4211 case CMD_xmap: case CMD_xnoremap:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4212 return set_context_in_map_cmd(xp, cmd, arg, forceit,
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4213 FALSE, FALSE, ea.cmdidx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4214 case CMD_unmap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 case CMD_nunmap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 case CMD_vunmap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 case CMD_ounmap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 case CMD_iunmap:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 case CMD_cunmap:
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4220 case CMD_lunmap:
4365
fe0c7437ae8b updated for version 7.3.931
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4221 case CMD_sunmap:
fe0c7437ae8b updated for version 7.3.931
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4222 case CMD_xunmap:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 return set_context_in_map_cmd(xp, cmd, arg, forceit,
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4224 FALSE, TRUE, ea.cmdidx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225 case CMD_abbreviate: case CMD_noreabbrev:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 case CMD_cabbrev: case CMD_cnoreabbrev:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 case CMD_iabbrev: case CMD_inoreabbrev:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 return set_context_in_map_cmd(xp, cmd, arg, forceit,
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4229 TRUE, FALSE, ea.cmdidx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 case CMD_unabbreviate:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231 case CMD_cunabbrev:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 case CMD_iunabbrev:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 return set_context_in_map_cmd(xp, cmd, arg, forceit,
2405
84c9bf950ed4 Add completion for :lmap and :lunmap.
Bram Moolenaar <bram@vim.org>
parents: 2366
diff changeset
4234 TRUE, TRUE, ea.cmdidx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236 case CMD_menu: case CMD_noremenu: case CMD_unmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 case CMD_amenu: case CMD_anoremenu: case CMD_aunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 case CMD_nmenu: case CMD_nnoremenu: case CMD_nunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 case CMD_vmenu: case CMD_vnoremenu: case CMD_vunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240 case CMD_omenu: case CMD_onoremenu: case CMD_ounmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 case CMD_imenu: case CMD_inoremenu: case CMD_iunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 case CMD_cmenu: case CMD_cnoremenu: case CMD_cunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 case CMD_tmenu: case CMD_tunmenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 case CMD_popup: case CMD_tearoff: case CMD_emenu:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 return set_context_in_menu_cmd(xp, cmd, arg, forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 case CMD_colorscheme:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 xp->xp_context = EXPAND_COLORS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 case CMD_compiler:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 xp->xp_context = EXPAND_COMPILER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2406
diff changeset
4258 case CMD_ownsyntax:
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2406
diff changeset
4259 xp->xp_context = EXPAND_OWNSYNTAX;
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2406
diff changeset
4260 xp->xp_pattern = arg;
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2406
diff changeset
4261 break;
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2406
diff changeset
4262
2406
bbff28ebfc7a Add completion for :setfiletype. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2405
diff changeset
4263 case CMD_setfiletype:
2268
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
4264 xp->xp_context = EXPAND_FILETYPE;
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
4265 xp->xp_pattern = arg;
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
4266 break;
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2250
diff changeset
4267
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
4268 case CMD_packadd:
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
4269 xp->xp_context = EXPAND_PACKADD;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
4270 xp->xp_pattern = arg;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
4271 break;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
4272
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 case CMD_language:
2853
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4276 p = skiptowhite(arg);
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4277 if (*p == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 xp->xp_context = EXPAND_LANGUAGE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 xp->xp_pattern = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282 else
2853
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4283 {
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4284 if ( STRNCMP(arg, "messages", p - arg) == 0
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4285 || STRNCMP(arg, "ctype", p - arg) == 0
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4286 || STRNCMP(arg, "time", p - arg) == 0)
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4287 {
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4288 xp->xp_context = EXPAND_LOCALES;
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4289 xp->xp_pattern = skipwhite(p);
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4290 }
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4291 else
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4292 xp->xp_context = EXPAND_NOTHING;
41b17dd07029 updated for version 7.3.200
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4293 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 #endif
2068
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 1973
diff changeset
4296 #if defined(FEAT_PROFILE)
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 1973
diff changeset
4297 case CMD_profile:
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 1973
diff changeset
4298 set_context_in_profile_cmd(xp, arg);
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 1973
diff changeset
4299 break;
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 1973
diff changeset
4300 #endif
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
4301 case CMD_behave:
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
4302 xp->xp_context = EXPAND_BEHAVE;
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4303 xp->xp_pattern = arg;
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
4304 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305
10275
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
4306 case CMD_messages:
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
4307 xp->xp_context = EXPAND_MESSAGES;
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
4308 xp->xp_pattern = arg;
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
4309 break;
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
4310
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4311 #if defined(FEAT_CMDHIST)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4312 case CMD_history:
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4313 xp->xp_context = EXPAND_HISTORY;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4314 xp->xp_pattern = arg;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4315 break;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4316 #endif
4803
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4317 #if defined(FEAT_PROFILE)
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4318 case CMD_syntime:
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4319 xp->xp_context = EXPAND_SYNTIME;
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4320 xp->xp_pattern = arg;
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4321 break;
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
4322 #endif
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
4323
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 #endif /* FEAT_CMDL_COMPL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 * skip a range specifier of the form: addr [,addr] [;addr] ..
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 * Backslashed delimiters after / or ? will be skipped, and commands will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 * not be expanded between /'s and ?'s or after "'".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 *
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4338 * Also skip white space and ":" characters.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 * Returns the "cmd" pointer advanced to beyond the range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4342 skip_range(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4343 char_u *cmd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4344 int *ctx) /* pointer to xp_context or NULL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 {
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
4346 unsigned delim;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347
10817
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4348 while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;\\", *cmd) != NULL)
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4349 {
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4350 if (*cmd == '\\')
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4351 {
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4352 if (cmd[1] == '?' || cmd[1] == '/' || cmd[1] == '&')
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4353 ++cmd;
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4354 else
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4355 break;
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4356 }
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
4357 else if (*cmd == '\'')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 if (*++cmd == NUL && ctx != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 *ctx = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 else if (*cmd == '/' || *cmd == '?')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364 delim = *cmd++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4365 while (*cmd != NUL && *cmd != delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366 if (*cmd++ == '\\' && *cmd != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4367 ++cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 if (*cmd == NUL && ctx != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369 *ctx = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 if (*cmd != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 ++cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4374
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4375 /* Skip ":" and white space. */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4376 while (*cmd == ':')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4377 cmd = skipwhite(cmd + 1);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4378
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 return cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 * get a single EX address
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 * Set ptr to the next character after the part that was interpreted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386 * Set ptr to NULL when an error is encountered.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4387 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 * Return MAXLNUM when no Ex address was found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390 static linenr_T
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4391 get_address(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4392 exarg_T *eap UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4393 char_u **ptr,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4394 int addr_type, /* flag: one of ADDR_LINES, ... */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4395 int skip, /* only skip the address, don't use it */
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4396 int to_other_file, /* flag: may jump to other file */
10492
b2cd5a71f4bb commit https://github.com/vim/vim/commit/5e1e6d265d26ee2952c4a018a5ff72c950d2d700
Christian Brabandt <cb@256bit.org>
parents: 10490
diff changeset
4397 int address_count UNUSED) /* 1 for first address, >1 after comma */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 char_u *cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 pos_T *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 linenr_T lnum;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4406 buf_T *buf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 cmd = skipwhite(*ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 lnum = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 switch (*cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 case '.': /* '.' - Cursor position */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4415 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4416 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4417 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4418 case ADDR_LINES:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 lnum = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4421 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4422 lnum = CURRENT_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4423 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4424 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4425 lnum = curwin->w_arg_idx + 1;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4426 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4427 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4428 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4429 lnum = curbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4430 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4431 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4432 lnum = CURRENT_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4433 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4434 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4435 EMSG(_(e_invrange));
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4436 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4437 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4438 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4439 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4440 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4441 lnum = qf_get_cur_valid_idx(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4442 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4443 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4444 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4445 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447 case '$': /* '$' - last line */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4448 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4449 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4450 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4451 case ADDR_LINES:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4452 lnum = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4453 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4454 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4455 lnum = LAST_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4456 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4457 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4458 lnum = ARGCOUNT;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4459 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4460 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4461 buf = lastbuf;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4462 while (buf->b_ml.ml_mfp == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4463 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4464 if (buf->b_prev == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4465 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4466 buf = buf->b_prev;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4467 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4468 lnum = buf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4469 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4470 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4471 lnum = lastbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4472 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4473 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4474 lnum = LAST_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4475 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4476 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4477 EMSG(_(e_invrange));
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4478 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4479 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4480 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4481 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4482 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4483 lnum = qf_get_size(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4484 if (lnum == 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4485 lnum = 1;
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4486 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4487 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4488 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4489 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 case '\'': /* ''' - mark */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4492 if (*++cmd == NUL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4493 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4494 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4495 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4496 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4497 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4498 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4499 EMSG(_(e_invaddr));
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4500 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4501 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4502 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4503 if (skip)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4504 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4505 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4506 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4507 /* Only accept a mark in another file when it is
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4508 * used by itself: ":'M". */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4509 fp = getmark(*cmd, to_other_file && cmd[1] == NUL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4510 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4511 if (fp == (pos_T *)-1)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4512 /* Jumped to another file. */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4513 lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4514 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4515 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4516 if (check_mark(fp) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4518 cmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4519 goto error;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4520 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4521 lnum = fp->lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4522 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4523 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4524 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4526 case '/':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 case '?': /* '/' or '?' - search */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4528 c = *cmd++;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4529 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4530 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4531 EMSG(_(e_invaddr));
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4532 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4533 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4534 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4535 if (skip) /* skip "/pat/" */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4536 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4537 cmd = skip_regexp(cmd, c, (int)p_magic, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4538 if (*cmd == c)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4539 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4540 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4541 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4542 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4543 pos = curwin->w_cursor; /* save curwin->w_cursor */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4544 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4545 * When '/' or '?' follows another address, start
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4546 * from there.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4547 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4548 if (lnum != MAXLNUM)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4549 curwin->w_cursor.lnum = lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4550 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4551 * Start a forward search at the end of the line.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4552 * Start a backward search at the start of the line.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4553 * This makes sure we never match in the current
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4554 * line, and can match anywhere in the
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4555 * next/previous line.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4556 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4557 if (c == '/')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4558 curwin->w_cursor.col = MAXCOL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4559 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4560 curwin->w_cursor.col = 0;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4561 searchcmdlen = 0;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4562 if (!do_search(NULL, c, cmd, 1L,
11521
578df034735d patch 8.0.0643: when a pattern search is slow Vim becomes unusable
Christian Brabandt <cb@256bit.org>
parents: 11463
diff changeset
4563 SEARCH_HIS | SEARCH_MSG, NULL, NULL))
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4564 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4565 curwin->w_cursor = pos;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4566 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4567 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4568 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4569 lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4570 curwin->w_cursor = pos;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4571 /* adjust command string pointer */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4572 cmd += searchcmdlen;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4573 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4574 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 case '\\': /* "\?", "\/" or "\&", repeat search */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4577 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4578 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4579 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4580 EMSG(_(e_invaddr));
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4581 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4582 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4583 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4584 if (*cmd == '&')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4585 i = RE_SUBST;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4586 else if (*cmd == '?' || *cmd == '/')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4587 i = RE_SEARCH;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4588 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4589 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4590 EMSG(_(e_backslash));
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4591 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4592 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4593 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4594
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4595 if (!skip)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4596 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4597 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4598 * When search follows another address, start from
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4599 * there.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4600 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4601 if (lnum != MAXLNUM)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4602 pos.lnum = lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4603 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4604 pos.lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4605
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4606 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4607 * Start the search just like for the above
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4608 * do_search().
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4609 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4610 if (*cmd != '?')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4611 pos.col = MAXCOL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4612 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4613 pos.col = 0;
7007
5ea5bd9c18d2 patch 7.4.821
Bram Moolenaar <bram@vim.org>
parents: 6987
diff changeset
4614 #ifdef FEAT_VIRTUALEDIT
5ea5bd9c18d2 patch 7.4.821
Bram Moolenaar <bram@vim.org>
parents: 6987
diff changeset
4615 pos.coladd = 0;
5ea5bd9c18d2 patch 7.4.821
Bram Moolenaar <bram@vim.org>
parents: 6987
diff changeset
4616 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4617 if (searchit(curwin, curbuf, &pos,
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4618 *cmd == '?' ? BACKWARD : FORWARD,
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4619 (char_u *)"", 1L, SEARCH_MSG,
11521
578df034735d patch 8.0.0643: when a pattern search is slow Vim becomes unusable
Christian Brabandt <cb@256bit.org>
parents: 11463
diff changeset
4620 i, (linenr_T)0, NULL, NULL) != FAIL)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4621 lnum = pos.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4622 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4623 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4624 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4625 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4626 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4627 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4628 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4629 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4630
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4631 default:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4632 if (VIM_ISDIGIT(*cmd)) /* absolute line number */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4633 lnum = getdigits(&cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4635
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4636 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 cmd = skipwhite(cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 if (*cmd != '-' && *cmd != '+' && !VIM_ISDIGIT(*cmd))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4641
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4642 if (lnum == MAXLNUM)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4643 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4644 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4645 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4646 case ADDR_LINES:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4647 /* "+1" is same as ".+1" */
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4648 lnum = curwin->w_cursor.lnum;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4649 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4650 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4651 lnum = CURRENT_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4652 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4653 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4654 lnum = curwin->w_arg_idx + 1;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4655 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4656 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4657 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4658 lnum = curbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4659 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4660 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4661 lnum = CURRENT_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4662 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4663 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4664 lnum = 1;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4665 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4666 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4667 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4668 lnum = qf_get_cur_valid_idx(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4669 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4670 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4671 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4672 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4673
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 if (VIM_ISDIGIT(*cmd))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 i = '+'; /* "number" is same as "+number" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 i = *cmd++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4678 if (!VIM_ISDIGIT(*cmd)) /* '+' is '+1', but '+0' is not '+1' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4679 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4680 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681 n = getdigits(&cmd);
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4682
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4683 if (addr_type == ADDR_TABS_RELATIVE)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4684 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4685 EMSG(_(e_invrange));
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4686 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4687 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4688 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4689 else if (addr_type == ADDR_LOADED_BUFFERS
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4690 || addr_type == ADDR_BUFFERS)
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4691 lnum = compute_buffer_local_count(
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4692 addr_type, lnum, (i == '-') ? -1 * n : n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693 else
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4694 {
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4695 #ifdef FEAT_FOLDING
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4696 /* Relative line addressing, need to adjust for folded lines
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4697 * now, but only do it after the first address. */
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4698 if (addr_type == ADDR_LINES && (i == '-' || i == '+')
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4699 && address_count >= 2)
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4700 (void)hasFolding(lnum, NULL, &lnum);
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4701 #endif
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4702 if (i == '-')
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4703 lnum -= n;
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4704 else
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4705 lnum += n;
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4706 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 } while (*cmd == '/' || *cmd == '?');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 error:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 *ptr = cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4712 return lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4713 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4714
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4715 /*
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4716 * Get flags from an Ex command argument.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4717 */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4718 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4719 get_flags(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4720 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4721 while (vim_strchr((char_u *)"lp#", *eap->arg) != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4722 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4723 if (*eap->arg == 'l')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4724 eap->flags |= EXFLAG_LIST;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4725 else if (*eap->arg == 'p')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4726 eap->flags |= EXFLAG_PRINT;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4727 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4728 eap->flags |= EXFLAG_NR;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4729 eap->arg = skipwhite(eap->arg + 1);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4730 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4731 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4732
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4733 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4734 * Function called for command which is Not Implemented. NI!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4735 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4736 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4737 ex_ni(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4739 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4740 eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4741 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4742
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
4743 #ifdef HAVE_EX_SCRIPT_NI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 * Function called for script command which is Not Implemented. NI!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 * Skips over ":perl <<EOF" constructs.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4749 ex_script_ni(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752 ex_ni(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4754 vim_free(script_get(eap, eap->arg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4755 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4756 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4757
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4758 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4759 * Check range in Ex command for validity.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4760 * Return NULL when valid, error message when invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4761 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4762 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4763 invalid_range(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4764 {
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4765 buf_T *buf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4766 if ( eap->line1 < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4767 || eap->line2 < 0
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4768 || eap->line1 > eap->line2)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4769 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4770
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4771 if (eap->argt & RANGE)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4772 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4773 switch(eap->addr_type)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4774 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4775 case ADDR_LINES:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4776 if (!(eap->argt & NOTADR)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4777 && eap->line2 > curbuf->b_ml.ml_line_count
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 #ifdef FEAT_DIFF
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4779 + (eap->cmdidx == CMD_diffget)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4780 #endif
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4781 )
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4782 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4783 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4784 case ADDR_ARGUMENTS:
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4785 /* add 1 if ARGCOUNT is 0 */
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4786 if (eap->line2 > ARGCOUNT + (!ARGCOUNT))
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4787 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4788 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4789 case ADDR_BUFFERS:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4790 if (eap->line1 < firstbuf->b_fnum
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4791 || eap->line2 > lastbuf->b_fnum)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4792 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4793 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4794 case ADDR_LOADED_BUFFERS:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4795 buf = firstbuf;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4796 while (buf->b_ml.ml_mfp == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4797 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4798 if (buf->b_next == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4799 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4800 buf = buf->b_next;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4801 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4802 if (eap->line1 < buf->b_fnum)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4803 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4804 buf = lastbuf;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4805 while (buf->b_ml.ml_mfp == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4806 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4807 if (buf->b_prev == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4808 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4809 buf = buf->b_prev;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4810 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4811 if (eap->line2 > buf->b_fnum)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4812 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4813 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4814 case ADDR_WINDOWS:
6480
747cbac7047b updated for version 7.4.568
Bram Moolenaar <bram@vim.org>
parents: 6472
diff changeset
4815 if (eap->line2 > LAST_WIN_NR)
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4816 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4817 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4818 case ADDR_TABS:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4819 if (eap->line2 > LAST_TAB_NR)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4820 return (char_u *)_(e_invrange);
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4821 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4822 case ADDR_TABS_RELATIVE:
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4823 /* Do nothing */
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4824 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4825 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4826 case ADDR_QUICKFIX:
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4827 if (eap->line2 != 1 && eap->line2 > qf_get_size(eap))
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4828 return (char_u *)_(e_invrange);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4829 break;
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4830 #endif
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4831 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4832 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837 * Correct the range for zero line number, if required.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4838 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4839 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4840 correct_range(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4841 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4842 if (!(eap->argt & ZEROR)) /* zero in range not allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 if (eap->line1 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 eap->line1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4846 if (eap->line2 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847 eap->line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4848 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4851 #ifdef FEAT_QUICKFIX
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
4852 static char_u *skip_grep_pat(exarg_T *eap);
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4853
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4854 /*
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4855 * For a ":vimgrep" or ":vimgrepadd" command return a pointer past the
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4856 * pattern. Otherwise return eap->arg.
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4857 */
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4858 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4859 skip_grep_pat(exarg_T *eap)
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4860 {
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4861 char_u *p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4862
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4863 if (*p != NUL && (eap->cmdidx == CMD_vimgrep || eap->cmdidx == CMD_lvimgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4864 || eap->cmdidx == CMD_vimgrepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4865 || eap->cmdidx == CMD_lvimgrepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4866 || grep_internal(eap->cmdidx)))
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4867 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4868 p = skip_vimgrep_pat(p, NULL, NULL);
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4869 if (p == NULL)
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4870 p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4871 }
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4872 return p;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4873 }
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4874
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4875 /*
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4876 * For the ":make" and ":grep" commands insert the 'makeprg'/'grepprg' option
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4877 * in the command line, so that things like % get expanded.
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4878 */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4879 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4880 replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4881 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4882 char_u *new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4883 char_u *program;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4884 char_u *pos;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4885 char_u *ptr;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4886 int len;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4887 int i;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4888
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4889 /*
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4890 * Don't do it when ":vimgrep" is used for ":grep".
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4891 */
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4892 if ((eap->cmdidx == CMD_make || eap->cmdidx == CMD_lmake
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4893 || eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4894 || eap->cmdidx == CMD_grepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4895 || eap->cmdidx == CMD_lgrepadd)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4896 && !grep_internal(eap->cmdidx))
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4897 {
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4898 if (eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4899 || eap->cmdidx == CMD_grepadd || eap->cmdidx == CMD_lgrepadd)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4900 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4901 if (*curbuf->b_p_gp == NUL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4902 program = p_gp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4903 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4904 program = curbuf->b_p_gp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4905 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4906 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4907 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4908 if (*curbuf->b_p_mp == NUL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4909 program = p_mp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4910 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4911 program = curbuf->b_p_mp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4912 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4913
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4914 p = skipwhite(p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4915
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4916 if ((pos = (char_u *)strstr((char *)program, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4917 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4918 /* replace $* by given arguments */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4919 i = 1;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4920 while ((pos = (char_u *)strstr((char *)pos + 2, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4921 ++i;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4922 len = (int)STRLEN(p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4923 new_cmdline = alloc((int)(STRLEN(program) + i * (len - 2) + 1));
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4924 if (new_cmdline == NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4925 return NULL; /* out of memory */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4926 ptr = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4927 while ((pos = (char_u *)strstr((char *)program, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4928 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4929 i = (int)(pos - program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4930 STRNCPY(ptr, program, i);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4931 STRCPY(ptr += i, p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4932 ptr += len;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4933 program = pos + 2;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4934 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4935 STRCPY(ptr, program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4936 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4937 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4938 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4939 new_cmdline = alloc((int)(STRLEN(program) + STRLEN(p) + 2));
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4940 if (new_cmdline == NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4941 return NULL; /* out of memory */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4942 STRCPY(new_cmdline, program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4943 STRCAT(new_cmdline, " ");
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4944 STRCAT(new_cmdline, p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4945 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4946 msg_make(p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4947
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4948 /* 'eap->cmd' is not set here, because it is not used at CMD_make */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4949 vim_free(*cmdlinep);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4950 *cmdlinep = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4951 p = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4952 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4953 return p;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4954 }
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4955 #endif
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4956
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4957 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 * Expand file name in Ex command argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959 * Return FAIL for failure, OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4962 expand_filename(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4963 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4964 char_u **cmdlinep,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4965 char_u **errormsgp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 int has_wildcards; /* need to expand wildcards */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 char_u *repl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969 int srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971 int n;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
4972 int escaped;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4974 #ifdef FEAT_QUICKFIX
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4975 /* Skip a regexp pattern for ":vimgrep[add] pat file..." */
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4976 p = skip_grep_pat(eap);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4977 #else
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4978 p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4979 #endif
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4980
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4981 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4982 * Decide to expand wildcards *before* replacing '%', '#', etc. If
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4983 * the file name contains a wildcard it should not cause expanding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4984 * (it will be expanded anyway if there is a wildcard before replacing).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4985 */
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4986 has_wildcards = mch_has_wildcard(p);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4987 while (*p != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 {
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4989 #ifdef FEAT_EVAL
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4990 /* Skip over `=expr`, wildcards in it are not expanded. */
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4991 if (p[0] == '`' && p[1] == '=')
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4992 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4993 p += 2;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4994 (void)skip_expr(&p);
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4995 if (*p == '`')
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4996 ++p;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4997 continue;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4998 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4999 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 * Quick check if this cannot be the start of a special string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 * Also removes backslash before '%', '#' and '<'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5003 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5004 if (vim_strchr((char_u *)"%#<", *p) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5005 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5006 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5007 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5010 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5011 * Try to find a match at this position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5012 */
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5013 repl = eval_vars(p, eap->arg, &srclen, &(eap->do_ecmd_lnum),
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5014 errormsgp, &escaped);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5015 if (*errormsgp != NULL) /* error detected */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5016 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5017 if (repl == NULL) /* no match found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5018 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5019 p += srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5020 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5022
37
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5023 /* Wildcards won't be expanded below, the replacement is taken
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5024 * literally. But do expand "~/file", "~user/file" and "$HOME/file". */
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5025 if (vim_strchr(repl, '$') != NULL || vim_strchr(repl, '~') != NULL)
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5026 {
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5027 char_u *l = repl;
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5028
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5029 repl = expand_env_save(repl);
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5030 vim_free(l);
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5031 }
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
5032
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5033 /* Need to escape white space et al. with a backslash.
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5034 * Don't do this for:
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5035 * - replacement that already has been escaped: "##"
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5036 * - shell commands (may have to use quotes instead).
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5037 * - non-unix systems when there is a single argument (spaces don't
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5038 * separate arguments then).
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5039 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5040 if (!eap->usefilter
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
5041 && !escaped
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5042 && eap->cmdidx != CMD_bang
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5043 && eap->cmdidx != CMD_make
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
5044 && eap->cmdidx != CMD_lmake
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5045 && eap->cmdidx != CMD_grep
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
5046 && eap->cmdidx != CMD_lgrep
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5047 && eap->cmdidx != CMD_grepadd
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
5048 && eap->cmdidx != CMD_lgrepadd
11463
6fff8b86e9bd patch 8.0.0615: using % with :hardcopy wrongly escapes spaces
Christian Brabandt <cb@256bit.org>
parents: 11459
diff changeset
5049 && eap->cmdidx != CMD_hardcopy
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5050 #ifndef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5051 && !(eap->argt & NOSPC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5052 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5053 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5054 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5055 char_u *l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5056 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5057 /* Don't escape a backslash here, because rem_backslash() doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5058 * remove it later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5059 static char_u *nobslash = (char_u *)" \t\"|";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5060 # define ESCAPE_CHARS nobslash
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5061 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5062 # define ESCAPE_CHARS escape_chars
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5063 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5065 for (l = repl; *l; ++l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5066 if (vim_strchr(ESCAPE_CHARS, *l) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5068 l = vim_strsave_escaped(repl, ESCAPE_CHARS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5069 if (l != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5071 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5072 repl = l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5075 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5077
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5078 /* For a shell command a '!' must be escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5079 if ((eap->usefilter || eap->cmdidx == CMD_bang)
5778
22a1d5762ba3 updated for version 7.4.233
Bram Moolenaar <bram@vim.org>
parents: 5776
diff changeset
5080 && vim_strpbrk(repl, (char_u *)"!") != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5081 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5082 char_u *l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5083
5778
22a1d5762ba3 updated for version 7.4.233
Bram Moolenaar <bram@vim.org>
parents: 5776
diff changeset
5084 l = vim_strsave_escaped(repl, (char_u *)"!");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5085 if (l != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5086 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5087 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5088 repl = l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5089 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5092 p = repl_cmdline(eap, p, srclen, repl, cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5093 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5094 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5095 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5098 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099 * One file argument: Expand wildcards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5100 * Don't do this with ":r !command" or ":w !command".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5101 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5102 if ((eap->argt & NOSPC) && !eap->usefilter)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5103 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5104 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5105 * May do this twice:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5106 * 1. Replace environment variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5107 * 2. Replace any other wildcards, remove backslashes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5108 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5109 for (n = 1; n <= 2; ++n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5110 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5111 if (n == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5112 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5113 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5114 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5115 * Only for Unix we check for more than one file name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5116 * For other systems spaces are considered to be part
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5117 * of the file name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5118 * Only check here if there is no wildcard, otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5119 * ExpandOne() will check for errors. This allows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5120 * ":e `ls ve*.c`" on Unix.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5121 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5122 if (!has_wildcards)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5123 for (p = eap->arg; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5124 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5125 /* skip escaped characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5126 if (p[1] && (*p == '\\' || *p == Ctrl_V))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5127 ++p;
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
5128 else if (VIM_ISWHITE(*p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5129 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 *errormsgp = (char_u *)_("E172: Only one file name allowed");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5131 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5133 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5134 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5136 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5137 * Halve the number of backslashes (this is Vi compatible).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5138 * For Unix and OS/2, when wildcards are expanded, this is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 * done by ExpandOne() below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 */
7408
1886f2863437 commit https://github.com/vim/vim/commit/e7fedb6ebe72d9a475aa65109b77d5ed4667067a
Christian Brabandt <cb@256bit.org>
parents: 7262
diff changeset
5141 #if defined(UNIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 if (!has_wildcards)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5144 backslash_halve(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5145 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5147 if (has_wildcards)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5148 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5149 if (n == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5150 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5151 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5152 * First loop: May expand environment variables. This
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5153 * can be done much faster with expand_env() than with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5154 * something else (e.g., calling a shell).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5155 * After expanding environment variables, check again
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5156 * if there are still wildcards present.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5157 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5158 if (vim_strchr(eap->arg, '$') != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5159 || vim_strchr(eap->arg, '~') != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5160 {
372
a698eb686ded updated for version 7.0096
vimboss
parents: 358
diff changeset
5161 expand_env_esc(eap->arg, NameBuff, MAXPATHL,
1408
db8309865794 updated for version 7.1-123
vimboss
parents: 1369
diff changeset
5162 TRUE, TRUE, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5163 has_wildcards = mch_has_wildcard(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5164 p = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5165 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5166 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5167 p = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5168 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5169 else /* n == 2 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5170 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171 expand_T xpc;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5172 int options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5173
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5174 ExpandInit(&xpc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5175 xpc.xp_context = EXPAND_FILES;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5176 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5177 options += WILD_ICASE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178 p = ExpandOne(&xpc, eap->arg, NULL,
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5179 options, WILD_EXPAND_FREE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5181 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5183 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5184 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5185 (void)repl_cmdline(eap, eap->arg, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5186 p, cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5187 if (n == 2) /* p came from ExpandOne() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5188 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5191 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5192 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5193 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5195
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5196 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5197 * Replace part of the command line, keeping eap->cmd, eap->arg and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5198 * eap->nextcmd correct.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199 * "src" points to the part that is to be replaced, of length "srclen".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 * "repl" is the replacement string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201 * Returns a pointer to the character after the replaced string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5202 * Returns NULL for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5203 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5204 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5205 repl_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5206 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5207 char_u *src,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5208 int srclen,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5209 char_u *repl,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5210 char_u **cmdlinep)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5211 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5212 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5213 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5214 char_u *new_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5215
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5216 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5217 * The new command line is build in new_cmdline[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5218 * First allocate it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5219 * Careful: a "+cmd" argument may have been NUL terminated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5221 len = (int)STRLEN(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5222 i = (int)(src - *cmdlinep) + (int)STRLEN(src + srclen) + len + 3;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
5223 if (eap->nextcmd != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5224 i += (int)STRLEN(eap->nextcmd);/* add space for next command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5225 if ((new_cmdline = alloc((unsigned)i)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 return NULL; /* out of memory! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5228 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5229 * Copy the stuff before the expanded part.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5230 * Copy the expanded stuff.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5231 * Copy what came after the expanded part.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5232 * Copy the next commands, if there are any.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234 i = (int)(src - *cmdlinep); /* length of part before match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5235 mch_memmove(new_cmdline, *cmdlinep, (size_t)i);
434
9595cf1d80a7 updated for version 7.0112
vimboss
parents: 416
diff changeset
5236
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5237 mch_memmove(new_cmdline + i, repl, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5238 i += len; /* remember the end of the string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5239 STRCPY(new_cmdline + i, src + srclen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5240 src = new_cmdline + i; /* remember where to continue */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5241
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
5242 if (eap->nextcmd != NULL) /* append next command */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244 i = (int)STRLEN(new_cmdline) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5245 STRCPY(new_cmdline + i, eap->nextcmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5246 eap->nextcmd = new_cmdline + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5247 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248 eap->cmd = new_cmdline + (eap->cmd - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249 eap->arg = new_cmdline + (eap->arg - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5250 if (eap->do_ecmd_cmd != NULL && eap->do_ecmd_cmd != dollar_command)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5251 eap->do_ecmd_cmd = new_cmdline + (eap->do_ecmd_cmd - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5252 vim_free(*cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5253 *cmdlinep = new_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5255 return src;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5258 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5259 * Check for '|' to separate commands and '"' to start comments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5260 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5261 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5262 separate_nextcmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5264 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5265
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5266 #ifdef FEAT_QUICKFIX
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5267 p = skip_grep_pat(eap);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5268 #else
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5269 p = eap->arg;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5270 #endif
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5271
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
5272 for ( ; *p; MB_PTR_ADV(p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5273 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5274 if (*p == Ctrl_V)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5276 if (eap->argt & (USECTRLV | XFILE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5277 ++p; /* skip CTRL-V and next char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5278 else
1362
2f70b8f1f1e3 updated for version 7.1-076
vimboss
parents: 1349
diff changeset
5279 /* remove CTRL-V and skip next char */
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
5280 STRMOVE(p, p + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5281 if (*p == NUL) /* stop at NUL after CTRL-V */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5282 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5283 }
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5284
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5285 #ifdef FEAT_EVAL
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5286 /* Skip over `=expr` when wildcards are expanded. */
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
5287 else if (p[0] == '`' && p[1] == '=' && (eap->argt & XFILE))
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5288 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5289 p += 2;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5290 (void)skip_expr(&p);
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5291 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5292 #endif
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5293
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5294 /* Check for '"': start of comment or '|': next command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295 /* :@" and :*" do not start a comment!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 * :redir @" doesn't either. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5297 else if ((*p == '"' && !(eap->argt & NOTRLCOM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 && ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5299 || p != eap->arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5300 && (eap->cmdidx != CMD_redir
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 || p != eap->arg + 1 || p[-1] != '@'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5302 || *p == '|' || *p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5304 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5305 * We remove the '\' before the '|', unless USECTRLV is used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5306 * AND 'b' is present in 'cpoptions'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5307 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5308 if ((vim_strchr(p_cpo, CPO_BAR) == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5309 || !(eap->argt & USECTRLV)) && *(p - 1) == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5310 {
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
5311 STRMOVE(p - 1, p); /* remove the '\' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5312 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5314 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5316 eap->nextcmd = check_nextcmd(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5317 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5320 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5321 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5322
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5323 if (!(eap->argt & NOTRLCOM)) /* remove trailing spaces */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5324 del_trailing_spaces(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5325 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5327 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5328 * get + command from ex argument
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5329 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5330 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5331 getargcmd(char_u **argp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5332 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5333 char_u *arg = *argp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5334 char_u *command = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5336 if (*arg == '+') /* +[command] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5337 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5338 ++arg;
5790
98bfec9ea760 updated for version 7.4.239
Bram Moolenaar <bram@vim.org>
parents: 5778
diff changeset
5339 if (vim_isspace(*arg) || *arg == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5340 command = dollar_command;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5341 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5342 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5343 command = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5344 arg = skip_cmd_arg(command, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5345 if (*arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5346 *arg++ = NUL; /* terminate command with NUL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5347 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5348
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5349 arg = skipwhite(arg); /* skip over spaces */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5350 *argp = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5352 return command;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5353 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5355 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5356 * Find end of "+command" argument. Skip over "\ " and "\\".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5357 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5358 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5359 skip_cmd_arg(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5360 char_u *p,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5361 int rembs) /* TRUE to halve the number of backslashes */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5362 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5363 while (*p && !vim_isspace(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5364 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5365 if (*p == '\\' && p[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5366 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5367 if (rembs)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
5368 STRMOVE(p, p + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
5372 MB_PTR_ADV(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5373 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5374 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5377 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5378 * Get "++opt=arg" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5379 * Return FAIL or OK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5380 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5381 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5382 getargopt(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5384 char_u *arg = eap->arg + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5385 int *pp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5386 #ifdef FEAT_MBYTE
2168
99b00399c7b4 updated for version 7.2.435
Bram Moolenaar <bram@vim.org>
parents: 2148
diff changeset
5387 int bad_char_idx;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5388 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5389 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5391 /* ":edit ++[no]bin[ary] file" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5392 if (STRNCMP(arg, "bin", 3) == 0 || STRNCMP(arg, "nobin", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5393 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5394 if (*arg == 'n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5395 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396 arg += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5397 eap->force_bin = FORCE_NOBIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5398 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400 eap->force_bin = FORCE_BIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 if (!checkforcmd(&arg, "binary", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5403 eap->arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5407 /* ":read ++edit file" */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5408 if (STRNCMP(arg, "edit", 4) == 0)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5409 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5410 eap->read_edit = TRUE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5411 eap->arg = skipwhite(arg + 4);
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5412 return OK;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5413 }
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5414
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 if (STRNCMP(arg, "ff", 2) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5416 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5417 arg += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5418 pp = &eap->force_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5420 else if (STRNCMP(arg, "fileformat", 10) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5421 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5422 arg += 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423 pp = &eap->force_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 else if (STRNCMP(arg, "enc", 3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427 {
3208
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5428 if (STRNCMP(arg, "encoding", 8) == 0)
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5429 arg += 8;
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5430 else
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5431 arg += 3;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 pp = &eap->force_enc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5434 else if (STRNCMP(arg, "bad", 3) == 0)
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5435 {
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5436 arg += 3;
2168
99b00399c7b4 updated for version 7.2.435
Bram Moolenaar <bram@vim.org>
parents: 2148
diff changeset
5437 pp = &bad_char_idx;
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5438 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 if (pp == NULL || *arg != '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445 *pp = (int)(arg - eap->cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5446 arg = skip_cmd_arg(arg, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447 eap->arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5448 *arg = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5450 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451 if (pp == &eap->force_ff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5454 if (check_ff_value(eap->cmd + eap->force_ff) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5458 else if (pp == &eap->force_enc)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 /* Make 'fileencoding' lower case. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5461 for (p = eap->cmd + eap->force_enc; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5462 *p = TOLOWER_ASC(*p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5463 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5464 else
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5465 {
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5466 /* Check ++bad= argument. Must be a single-byte character, "keep" or
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5467 * "drop". */
2168
99b00399c7b4 updated for version 7.2.435
Bram Moolenaar <bram@vim.org>
parents: 2148
diff changeset
5468 p = eap->cmd + bad_char_idx;
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5469 if (STRICMP(p, "keep") == 0)
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5470 eap->bad_char = BAD_KEEP;
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5471 else if (STRICMP(p, "drop") == 0)
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5472 eap->bad_char = BAD_DROP;
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5473 else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5474 eap->bad_char = *p;
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5475 else
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5476 return FAIL;
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5477 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5479
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5483 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 * ":abbreviate" and friends.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5487 ex_abbreviate(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5489 do_exmap(eap, TRUE); /* almost the same as mapping */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493 * ":map" and friends.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5494 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5495 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5496 ex_map(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5497 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5498 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5499 * If we are sourcing .exrc or .vimrc in current directory we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5500 * print the mappings for security reasons.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5501 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5502 if (secure)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5504 secure = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505 msg_outtrans(eap->cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5507 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508 do_exmap(eap, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5509 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5512 * ":unmap" and friends.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5515 ex_unmap(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 do_exmap(eap, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 * ":mapclear" and friends.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5524 ex_mapclear(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 map_clear(eap->cmd, eap->arg, eap->forceit, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 * ":abclear" and friends.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5533 ex_abclear(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 map_clear(eap->cmd, eap->arg, TRUE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537
3350
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5538 #if defined(FEAT_AUTOCMD) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5539 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5540 ex_autocmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5541 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5542 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5543 * Disallow auto commands from .exrc and .vimrc in current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5544 * directory for security reasons.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5545 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5546 if (secure)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5548 secure = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5549 eap->errmsg = e_curdir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5550 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5551 else if (eap->cmdidx == CMD_autocmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5552 do_autocmd(eap->arg, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5553 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5554 do_augroup(eap->arg, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 * ":doautocmd": Apply the automatic commands to the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5561 ex_doautocmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 {
3350
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5563 char_u *arg = eap->arg;
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5564 int call_do_modelines = check_nomodeline(&arg);
9260
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5565 int did_aucmd;
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5566
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5567 (void)do_doautocmd(arg, TRUE, &did_aucmd);
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5568 /* Only when there is no <nomodeline>. */
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5569 if (call_do_modelines && did_aucmd)
3350
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5570 do_modelines(0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5573
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5574 #ifdef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5575 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5576 * :[N]bunload[!] [N] [bufname] unload buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5577 * :[N]bdelete[!] [N] [bufname] delete buffer from buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5578 * :[N]bwipeout[!] [N] [bufname] delete buffer really
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5579 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5580 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5581 ex_bunload(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5583 eap->errmsg = do_bufdel(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5584 eap->cmdidx == CMD_bdelete ? DOBUF_DEL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5585 : eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5586 : DOBUF_UNLOAD, eap->arg,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5587 eap->addr_count, (int)eap->line1, (int)eap->line2, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5590 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591 * :[N]buffer [N] to buffer N
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5592 * :[N]sbuffer [N] to buffer N
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5593 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5595 ex_buffer(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5596 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 if (*eap->arg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 eap->errmsg = e_trailing;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5601 if (eap->addr_count == 0) /* default is current buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 goto_buffer(eap, DOBUF_CURRENT, FORWARD, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5604 goto_buffer(eap, DOBUF_FIRST, FORWARD, (int)eap->line2);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5605 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5606 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5609
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5610 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5611 * :[N]bmodified [N] to next mod. buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5612 * :[N]sbmodified [N] to next mod. buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5613 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5614 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5615 ex_bmodified(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5616 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5617 goto_buffer(eap, DOBUF_MOD, FORWARD, (int)eap->line2);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5618 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5619 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5620 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5621
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5622 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5623 * :[N]bnext [N] to next buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5624 * :[N]sbnext [N] split and to next buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5625 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5626 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5627 ex_bnext(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5628 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5629 goto_buffer(eap, DOBUF_CURRENT, FORWARD, (int)eap->line2);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5630 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5631 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5632 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5634 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5635 * :[N]bNext [N] to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5636 * :[N]bprevious [N] to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5637 * :[N]sbNext [N] split and to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5638 * :[N]sbprevious [N] split and to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5639 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5640 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5641 ex_bprevious(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5642 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5643 goto_buffer(eap, DOBUF_CURRENT, BACKWARD, (int)eap->line2);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5644 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5645 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5647
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5648 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5649 * :brewind to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 * :bfirst to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 * :sbrewind split and to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5652 * :sbfirst split and to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5654 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5655 ex_brewind(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5656 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5657 goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5658 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5659 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5660 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5662 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5663 * :blast to last buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5664 * :sblast split and to last buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5667 ex_blast(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5668 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5669 goto_buffer(eap, DOBUF_LAST, BACKWARD, 0);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5670 if (eap->do_ecmd_cmd != NULL)
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5671 do_cmdline_cmd(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5672 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5673 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5674
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5675 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5676 ends_excmd(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5678 return (c == NUL || c == '|' || c == '"' || c == '\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5679 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA) || defined(FEAT_EVAL) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5684 * Return the next command, after the first '|' or '\n'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5685 * Return NULL if not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5686 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5687 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5688 find_nextcmd(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5689 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5690 while (*p != '|' && *p != '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5692 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5693 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5694 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5696 return (p + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5698 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5699
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5700 /*
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5701 * Check if *p is a separator between Ex commands, skipping over white space.
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5702 * Return NULL if it isn't, the following character if it is.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5703 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5704 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5705 check_nextcmd(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5706 {
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5707 char_u *s = skipwhite(p);
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5708
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5709 if (*s == '|' || *s == '\n')
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5710 return (s + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5715 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5716 * - if there are more files to edit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5717 * - and this is the last window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5718 * - and forceit not used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5719 * - and not repeated twice on a row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5720 * return FAIL and give error message if 'message' TRUE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5721 * return OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5722 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5724 check_more(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5725 int message, /* when FALSE check only, no messages */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5726 int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 int n = ARGCOUNT - curwin->w_arg_idx - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5729
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
5730 if (!forceit && only_one_window()
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
5731 && ARGCOUNT > 1 && !arg_had_last && n >= 0 && quitmore == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5732 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733 if (message)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
5738 char_u buff[DIALOG_MSG_SIZE];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 if (n == 1)
2768
c5e47b752f07 updated for version 7.3.160
Bram Moolenaar <bram@vim.org>
parents: 2722
diff changeset
5741 vim_strncpy(buff,
c5e47b752f07 updated for version 7.3.160
Bram Moolenaar <bram@vim.org>
parents: 2722
diff changeset
5742 (char_u *)_("1 more file to edit. Quit anyway?"),
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
5743 DIALOG_MSG_SIZE - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5744 else
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
5745 vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5746 _("%d more files to edit. Quit anyway?"), n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5747 if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5748 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5749 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5751 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752 if (n == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753 EMSG(_("E173: 1 more file to edit"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5754 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755 EMSGN(_("E173: %ld more files to edit"), n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5756 quitmore = 2; /* next try to quit is allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 #ifdef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5765 * Function given to ExpandGeneric() to obtain the list of command names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5766 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5767 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5768 get_command_name(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5769 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 if (idx >= (int)CMD_SIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 # ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5772 return get_user_command_name(idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5773 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5774 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5776 return cmdnames[idx].cmd_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5778 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 #if defined(FEAT_USR_CMDS) || defined(PROTO)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
5781 static int uc_add_command(char_u *name, size_t name_len, char_u *rep, long argt, long def, int flags, int compl, char_u *compl_arg, int addr_type, int force);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
5782 static void uc_list(char_u *name, size_t name_len);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
5783 static int uc_scan_attr(char_u *attr, size_t len, long *argt, long *def, int *flags, int *compl, char_u **compl_arg, int* attr_type_arg);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
5784 static char_u *uc_split_args(char_u *arg, size_t *lenp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
5785 static size_t uc_check_code(char_u *code, size_t len, char_u *buf, ucmd_T *cmd, exarg_T *eap, char_u **split_buf, size_t *split_len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5788 uc_add_command(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5789 char_u *name,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5790 size_t name_len,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5791 char_u *rep,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5792 long argt,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5793 long def,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5794 int flags,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5795 int compl,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5796 char_u *compl_arg,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5797 int addr_type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5798 int force)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5800 ucmd_T *cmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 int cmp = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5804 char_u *rep_buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5805 garray_T *gap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
5807 replace_termcodes(rep, &rep_buf, FALSE, FALSE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808 if (rep_buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5810 /* Can't replace termcodes - try using the string as is */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811 rep_buf = vim_strsave(rep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5813 /* Give up if out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 if (rep_buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818 /* get address of growarray: global or in curbuf */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5819 if (flags & UC_BUFFER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5820 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5821 gap = &curbuf->b_ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 if (gap->ga_itemsize == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5823 ga_init2(gap, (int)sizeof(ucmd_T), 4);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5825 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5826 gap = &ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 /* Search for the command in the already defined commands. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829 for (i = 0; i < gap->ga_len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5831 size_t len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5832
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5833 cmd = USER_CMD_GA(gap, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5834 len = STRLEN(cmd->uc_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5835 cmp = STRNCMP(name, cmd->uc_name, name_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5836 if (cmp == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5837 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5838 if (name_len < len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5839 cmp = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5840 else if (name_len > len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5841 cmp = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5842 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5843
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5844 if (cmp == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5846 if (!force)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5847 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5848 EMSG(_("E174: Command already exists: add ! to replace it"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5849 goto fail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5850 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5851
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852 vim_free(cmd->uc_rep);
1837
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
5853 cmd->uc_rep = NULL;
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
5854 #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
5855 vim_free(cmd->uc_compl_arg);
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
5856 cmd->uc_compl_arg = NULL;
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
5857 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5858 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5859 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5860
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5861 /* Stop as soon as we pass the name to add */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5862 if (cmp < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5863 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5866 /* Extend the array unless we're replacing an existing command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5867 if (cmp != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5868 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5869 if (ga_grow(gap, 1) != OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5870 goto fail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5871 if ((p = vim_strnsave(name, (int)name_len)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5872 goto fail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5873
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5874 cmd = USER_CMD_GA(gap, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5875 mch_memmove(cmd + 1, cmd, (gap->ga_len - i) * sizeof(ucmd_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5877 ++gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5878
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5879 cmd->uc_name = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5880 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 cmd->uc_rep = rep_buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5883 cmd->uc_argt = argt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884 cmd->uc_def = def;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5885 cmd->uc_compl = compl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5886 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 cmd->uc_scriptID = current_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 # ifdef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5889 cmd->uc_compl_arg = compl_arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891 #endif
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5892 cmd->uc_addr_type = addr_type;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5896 fail:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 vim_free(rep_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 vim_free(compl_arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5900 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5902 }
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5903 #endif
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5904
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5905 #if defined(FEAT_USR_CMDS)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5906 static struct
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5907 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5908 int expand;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5909 char *name;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5910 } addr_type_complete[] =
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5911 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5912 {ADDR_ARGUMENTS, "arguments"},
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5913 {ADDR_LINES, "lines"},
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5914 {ADDR_LOADED_BUFFERS, "loaded_buffers"},
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5915 {ADDR_TABS, "tabs"},
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5916 {ADDR_BUFFERS, "buffers"},
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5917 {ADDR_WINDOWS, "windows"},
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
5918 {ADDR_QUICKFIX, "quickfix"},
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5919 {-1, NULL}
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5920 };
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5921 #endif
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
5922
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5923 #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5924 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5925 * List of names for completion for ":command" with the EXPAND_ flag.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5926 * Must be alphabetical for completion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5927 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5928 static struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5929 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5930 int expand;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5931 char *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5932 } command_complete[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5933 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934 {EXPAND_AUGROUP, "augroup"},
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
5935 {EXPAND_BEHAVE, "behave"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5936 {EXPAND_BUFFERS, "buffer"},
2970
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5937 {EXPAND_COLORS, "color"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5938 {EXPAND_COMMANDS, "command"},
2970
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5939 {EXPAND_COMPILER, "compiler"},
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
5940 #if defined(FEAT_CSCOPE)
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
5941 {EXPAND_CSCOPE, "cscope"},
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1838
diff changeset
5942 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944 {EXPAND_USER_DEFINED, "custom"},
406
aa550d9d2403 updated for version 7.0106
vimboss
parents: 398
diff changeset
5945 {EXPAND_USER_LIST, "customlist"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5946 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5947 {EXPAND_DIRECTORIES, "dir"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5948 {EXPAND_ENV_VARS, "environment"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5949 {EXPAND_EVENTS, "event"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5950 {EXPAND_EXPRESSION, "expression"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5951 {EXPAND_FILES, "file"},
2970
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5952 {EXPAND_FILES_IN_PATH, "file_in_path"},
2444
3fbd9bce03f1 Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents: 2433
diff changeset
5953 {EXPAND_FILETYPE, "filetype"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5954 {EXPAND_FUNCTIONS, "function"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5955 {EXPAND_HELP, "help"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5956 {EXPAND_HIGHLIGHT, "highlight"},
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
5957 #if defined(FEAT_CMDHIST)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
5958 {EXPAND_HISTORY, "history"},
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
5959 #endif
2970
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5960 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3350
diff changeset
5961 && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
2970
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5962 {EXPAND_LOCALES, "locale"},
1fad9c73d77a updated for version 7.3.257
Bram Moolenaar <bram@vim.org>
parents: 2966
diff changeset
5963 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5964 {EXPAND_MAPPINGS, "mapping"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5965 {EXPAND_MENUS, "menu"},
10275
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
5966 {EXPAND_MESSAGES, "messages"},
2444
3fbd9bce03f1 Support syntax and filetype completion for user commands. (Christian Brabandt)
Bram Moolenaar <bram@vim.org>
parents: 2433
diff changeset
5967 {EXPAND_OWNSYNTAX, "syntax"},
4803
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
5968 #if defined(FEAT_PROFILE)
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
5969 {EXPAND_SYNTIME, "syntime"},
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4766
diff changeset
5970 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5971 {EXPAND_SETTINGS, "option"},
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8368
diff changeset
5972 {EXPAND_PACKADD, "packadd"},
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
5973 {EXPAND_SHELLCMD, "shellcmd"},
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
5974 #if defined(FEAT_SIGNS)
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
5975 {EXPAND_SIGN, "sign"},
954947a70580 updated for version 7.2-166
vimboss
parents: 1858
diff changeset
5976 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5977 {EXPAND_TAGS, "tag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5978 {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
3744
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3724
diff changeset
5979 {EXPAND_USER, "user"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5980 {EXPAND_USER_VARS, "var"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5981 {0, NULL}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5982 };
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5983 #endif
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5984
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
5985 #if defined(FEAT_USR_CMDS) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5986 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5987 uc_list(char_u *name, size_t name_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5988 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5989 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5990 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5991 ucmd_T *cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5992 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5993 long a;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5994 garray_T *gap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996 gap = &curbuf->b_ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 for (i = 0; i < gap->ga_len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6000 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6001 cmd = USER_CMD_GA(gap, i);
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
6002 a = (long)cmd->uc_argt;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6003
9980
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
6004 /* Skip commands which don't match the requested prefix and
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
6005 * commands filtered out. */
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
6006 if (STRNCMP(name, cmd->uc_name, name_len) != 0
b222552cf0c4 commit https://github.com/vim/vim/commit/d29459baa61819e59961804ed258efac5733ec70
Christian Brabandt <cb@256bit.org>
parents: 9941
diff changeset
6007 || message_filtered(cmd->uc_name))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6008 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6010 /* Put out the title first time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011 if (!found)
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6012 MSG_PUTS_TITLE(_("\n Name Args Address Complete Definition"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6013 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6015 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6016 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6017
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018 /* Special cases */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 msg_putchar(a & BANG ? '!' : ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020 msg_putchar(a & REGSTR ? '"' : ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6021 msg_putchar(gap != &ucmds ? 'b' : ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6022 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6023
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
6024 msg_outtrans_attr(cmd->uc_name, HL_ATTR(HLF_D));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6025 len = (int)STRLEN(cmd->uc_name) + 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6026
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6027 do {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6028 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6029 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6030 } while (len < 16);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6032 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6033
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6034 /* Arguments */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6035 switch ((int)(a & (EXTRA|NOSPC|NEEDARG)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6036 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6037 case 0: IObuff[len++] = '0'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6038 case (EXTRA): IObuff[len++] = '*'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6039 case (EXTRA|NOSPC): IObuff[len++] = '?'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6040 case (EXTRA|NEEDARG): IObuff[len++] = '+'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6041 case (EXTRA|NOSPC|NEEDARG): IObuff[len++] = '1'; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6042 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6043
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6044 do {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6045 IObuff[len++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6046 } while (len < 5);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6047
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6048 /* Range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6049 if (a & (RANGE|COUNT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6050 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6051 if (a & COUNT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6053 /* -count=N */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6054 sprintf((char *)IObuff + len, "%ldc", cmd->uc_def);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6055 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6056 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6057 else if (a & DFLALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6058 IObuff[len++] = '%';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6059 else if (cmd->uc_def >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6060 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6061 /* -range=N */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6062 sprintf((char *)IObuff + len, "%ld", cmd->uc_def);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6063 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6064 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6065 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6066 IObuff[len++] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6069 do {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6070 IObuff[len++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6071 } while (len < 11);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6072
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6073 /* Address Type */
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6074 for (j = 0; addr_type_complete[j].expand != -1; ++j)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6075 if (addr_type_complete[j].expand != ADDR_LINES
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6076 && addr_type_complete[j].expand == cmd->uc_addr_type)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6077 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6078 STRCPY(IObuff + len, addr_type_complete[j].name);
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6079 len += (int)STRLEN(IObuff + len);
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6080 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6081 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6082
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6083 do {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6084 IObuff[len++] = ' ';
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6085 } while (len < 21);
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6086
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6087 /* Completion */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6088 for (j = 0; command_complete[j].expand != 0; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6089 if (command_complete[j].expand == cmd->uc_compl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6090 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6091 STRCPY(IObuff + len, command_complete[j].name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6092 len += (int)STRLEN(IObuff + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6093 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6094 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6096 do {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6097 IObuff[len++] = ' ';
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6098 } while (len < 35);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6099
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6100 IObuff[len] = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6101 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6102
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6103 msg_outtrans_special(cmd->uc_rep, FALSE);
482
6f8b578776ab updated for version 7.0131
vimboss
parents: 479
diff changeset
6104 #ifdef FEAT_EVAL
6f8b578776ab updated for version 7.0131
vimboss
parents: 479
diff changeset
6105 if (p_verbose > 0)
6f8b578776ab updated for version 7.0131
vimboss
parents: 479
diff changeset
6106 last_set_msg(cmd->uc_scriptID);
6f8b578776ab updated for version 7.0131
vimboss
parents: 479
diff changeset
6107 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6108 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6109 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6110 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6111 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6113 if (gap == &ucmds || i < gap->ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6114 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6115 gap = &ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6116 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6117
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6118 if (!found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6119 MSG(_("No user-defined commands found"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6121
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6122 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6123 uc_fun_cmd(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6124 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6125 static char_u fcmd[] = {0x84, 0xaf, 0x60, 0xb9, 0xaf, 0xb5, 0x60, 0xa4,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6126 0xa5, 0xad, 0xa1, 0xae, 0xa4, 0x60, 0xa1, 0x60,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6127 0xb3, 0xa8, 0xb2, 0xb5, 0xa2, 0xa2, 0xa5, 0xb2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6128 0xb9, 0x7f, 0};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6129 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6131 for (i = 0; fcmd[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6132 IObuff[i] = fcmd[i] - 0x40;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6133 IObuff[i] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6134 return IObuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6137 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6138 uc_scan_attr(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6139 char_u *attr,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6140 size_t len,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6141 long *argt,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6142 long *def,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6143 int *flags,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6144 int *compl,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6145 char_u **compl_arg,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6146 int *addr_type_arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6147 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 EMSG(_("E175: No attribute specified"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6153 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156 /* First, try the simple attributes (no arguments) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 if (STRNICMP(attr, "bang", len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6158 *argt |= BANG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6159 else if (STRNICMP(attr, "buffer", len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6160 *flags |= UC_BUFFER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6161 else if (STRNICMP(attr, "register", len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6162 *argt |= REGSTR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6163 else if (STRNICMP(attr, "bar", len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6164 *argt |= TRLBAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6166 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 char_u *val = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 size_t vallen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6170 size_t attrlen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6172 /* Look for the attribute name - which is the part before any '=' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 for (i = 0; i < (int)len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6175 if (attr[i] == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 val = &attr[i + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 vallen = len - i - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6179 attrlen = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6180 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6183
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6184 if (STRNICMP(attr, "nargs", attrlen) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6185 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6186 if (vallen == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6188 if (*val == '0')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6189 /* Do nothing - this is the default */;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6190 else if (*val == '1')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 *argt |= (EXTRA | NOSPC | NEEDARG);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 else if (*val == '*')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6193 *argt |= EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194 else if (*val == '?')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6195 *argt |= (EXTRA | NOSPC);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 else if (*val == '+')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6197 *argt |= (EXTRA | NEEDARG);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6198 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6199 goto wrong_nargs;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6201 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6203 wrong_nargs:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6204 EMSG(_("E176: Invalid number of arguments"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6205 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6206 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6207 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6208 else if (STRNICMP(attr, "range", attrlen) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6209 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6210 *argt |= RANGE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6211 if (vallen == 1 && *val == '%')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6212 *argt |= DFLALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6213 else if (val != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6215 p = val;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6216 if (*def >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6218 two_count:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6219 EMSG(_("E177: Count cannot be specified twice"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6220 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6221 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6222
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6223 *def = getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224 *argt |= (ZEROR | NOTADR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6226 if (p != val + vallen || vallen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6227 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228 invalid_count:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 EMSG(_("E178: Invalid default value for count"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6231 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 else if (STRNICMP(attr, "count", attrlen) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 {
171
54f0f39bdf01 updated for version 7.0053
vimboss
parents: 170
diff changeset
6236 *argt |= (COUNT | ZEROR | RANGE | NOTADR);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 if (val != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 p = val;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6241 if (*def >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6242 goto two_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 *def = getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 if (p != val + vallen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6247 goto invalid_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6248 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6250 if (*def < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6251 *def = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6253 else if (STRNICMP(attr, "complete", attrlen) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6254 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6255 if (val == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6256 {
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
6257 EMSG(_("E179: argument required for -complete"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6258 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6259 }
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
6260
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
6261 if (parse_compl_arg(val, (int)vallen, compl, argt, compl_arg)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
6262 == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6263 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6264 }
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6265 else if (STRNICMP(attr, "addr", attrlen) == 0)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6266 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6267 *argt |= RANGE;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6268 if (val == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6269 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6270 EMSG(_("E179: argument required for -addr"));
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6271 return FAIL;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6272 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6273 if (parse_addr_type_arg(val, (int)vallen, argt, addr_type_arg)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6274 == FAIL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6275 return FAIL;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6276 if (addr_type_arg != ADDR_LINES)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6277 *argt |= (ZEROR | NOTADR) ;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6278 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6279 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6281 char_u ch = attr[len];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6282 attr[len] = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6283 EMSG2(_("E181: Invalid attribute: %s"), attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6284 attr[len] = ch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6285 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6287 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6289 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6290 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6291
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6292 /*
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6293 * ":command ..."
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6294 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6295 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6296 ex_command(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6298 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6299 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6301 long argt = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6302 long def = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6303 int flags = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6304 int compl = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 char_u *compl_arg = NULL;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6306 int addr_type_arg = ADDR_LINES;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307 int has_attr = (eap->arg[0] == '-');
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6308 int name_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6309
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6310 p = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6311
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6312 /* Check for attributes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6313 while (*p == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6314 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6315 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6316 end = skiptowhite(p);
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6317 if (uc_scan_attr(p, end - p, &argt, &def, &flags, &compl, &compl_arg, &addr_type_arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6318 == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6319 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6320 p = skipwhite(end);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6323 /* Get the name (if any) and skip to the following argument */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6324 name = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6325 if (ASCII_ISALPHA(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6326 while (ASCII_ISALNUM(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6327 ++p;
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6328 if (!ends_excmd(*p) && !VIM_ISWHITE(*p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6329 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6330 EMSG(_("E182: Invalid command name"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6331 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6332 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6333 end = p;
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6334 name_len = (int)(end - name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6336 /* If there is nothing after the name, and no attributes were specified,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6337 * we are listing commands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6338 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6339 p = skipwhite(end);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6340 if (!has_attr && ends_excmd(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6341 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6342 uc_list(name, end - name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6344 else if (!ASCII_ISUPPER(*name))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6345 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6346 EMSG(_("E183: User defined commands must start with an uppercase letter"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6347 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6348 }
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6349 else if ((name_len == 1 && *name == 'X')
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6350 || (name_len <= 4
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6351 && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6352 {
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6353 EMSG(_("E841: Reserved name, cannot be used for user defined command"));
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6354 return;
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
6355 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6356 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6357 uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6358 addr_type_arg, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6359 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6361 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6362 * ":comclear"
355
644578c9e219 updated for version 7.0092
vimboss
parents: 351
diff changeset
6363 * Clear all user commands, global and for current buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6364 */
355
644578c9e219 updated for version 7.0092
vimboss
parents: 351
diff changeset
6365 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6366 ex_comclear(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6368 uc_clear(&ucmds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6369 uc_clear(&curbuf->b_ucmds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6370 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6372 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6373 * Clear all user commands for "gap".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6374 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6375 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6376 uc_clear(garray_T *gap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6377 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6378 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6379 ucmd_T *cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6381 for (i = 0; i < gap->ga_len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6383 cmd = USER_CMD_GA(gap, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6384 vim_free(cmd->uc_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6385 vim_free(cmd->uc_rep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6386 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6387 vim_free(cmd->uc_compl_arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6388 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6389 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6390 ga_clear(gap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6391 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6392
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6393 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6394 ex_delcommand(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6395 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6396 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6397 ucmd_T *cmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6398 int cmp = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6399 garray_T *gap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6401 gap = &curbuf->b_ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6402 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6404 for (i = 0; i < gap->ga_len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6405 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6406 cmd = USER_CMD_GA(gap, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6407 cmp = STRCMP(eap->arg, cmd->uc_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6408 if (cmp <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6409 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6410 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6411 if (gap == &ucmds || cmp == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6412 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6413 gap = &ucmds;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6415
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6416 if (cmp != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6417 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6418 EMSG2(_("E184: No such user-defined command: %s"), eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6419 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6420 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6421
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6422 vim_free(cmd->uc_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6423 vim_free(cmd->uc_rep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6424 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6425 vim_free(cmd->uc_compl_arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6426 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6427
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6428 --gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6429
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6430 if (i < gap->ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6431 mch_memmove(cmd, cmd + 1, (gap->ga_len - i) * sizeof(ucmd_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6432 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6433
1088
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6434 /*
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6435 * split and quote args for <f-args>
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6436 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6437 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6438 uc_split_args(char_u *arg, size_t *lenp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6440 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6441 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6442 char_u *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6443 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6444
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6445 /* Precalculate length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6446 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6447 len = 2; /* Initial and final quotes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6448
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6449 while (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6450 {
1088
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6451 if (p[0] == '\\' && p[1] == '\\')
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6452 {
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6453 len += 2;
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6454 p += 2;
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6455 }
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6456 else if (p[0] == '\\' && VIM_ISWHITE(p[1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6457 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6458 len += 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6459 p += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6460 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6461 else if (*p == '\\' || *p == '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6462 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6463 len += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6464 p += 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6465 }
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6466 else if (VIM_ISWHITE(*p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6467 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6468 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6469 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6470 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6471 len += 3; /* "," */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6472 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6473 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6474 {
3680
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6475 #ifdef FEAT_MBYTE
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6476 int charlen = (*mb_ptr2len)(p);
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6477 len += charlen;
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6478 p += charlen;
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6479 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6480 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6481 ++p;
3680
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6482 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6484 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6485
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6486 buf = alloc(len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6487 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6488 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6489 *lenp = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6490 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6491 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6492
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6493 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6494 q = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6495 *q++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6496 while (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6497 {
1088
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6498 if (p[0] == '\\' && p[1] == '\\')
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6499 {
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6500 *q++ = '\\';
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6501 *q++ = '\\';
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6502 p += 2;
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6503 }
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6504 else if (p[0] == '\\' && VIM_ISWHITE(p[1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6506 *q++ = p[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6507 p += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6509 else if (*p == '\\' || *p == '"')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6510 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6511 *q++ = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6512 *q++ = *p++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6513 }
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6514 else if (VIM_ISWHITE(*p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6515 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6516 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6517 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6518 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6519 *q++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6520 *q++ = ',';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6521 *q++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6522 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6523 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6524 {
3680
8f98038a0bf3 updated for version 7.3.600
Bram Moolenaar <bram@vim.org>
parents: 3662
diff changeset
6525 MB_COPY_CHAR(p, q);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6526 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6528 *q++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6529 *q = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6530
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6531 *lenp = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6532 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6533 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6534
9230
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6535 static size_t
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6536 add_cmd_modifier(char_u *buf, char *mod_str, int *multi_mods)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6537 {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6538 size_t result;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6539
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6540 result = STRLEN(mod_str);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6541 if (*multi_mods)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6542 result += 1;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6543 if (buf != NULL)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6544 {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6545 if (*multi_mods)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6546 STRCAT(buf, " ");
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6547 STRCAT(buf, mod_str);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6548 }
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6549
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6550 *multi_mods = 1;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6551
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6552 return result;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6553 }
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6554
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6555 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6556 * Check for a <> code in a user command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6557 * "code" points to the '<'. "len" the length of the <> (inclusive).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6558 * "buf" is where the result is to be added.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6559 * "split_buf" points to a buffer used for splitting, caller should free it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6560 * "split_len" is the length of what "split_buf" contains.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6561 * Returns the length of the replacement, which has been added to "buf".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6562 * Returns -1 if there was no match, and only the "<" has been copied.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6563 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6564 static size_t
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6565 uc_check_code(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6566 char_u *code,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6567 size_t len,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6568 char_u *buf,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6569 ucmd_T *cmd, /* the user command we're expanding */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6570 exarg_T *eap, /* ex arguments */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6571 char_u **split_buf,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6572 size_t *split_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6573 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6574 size_t result = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6575 char_u *p = code + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6576 size_t l = len - 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6577 int quote = 0;
9230
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6578 enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_MODS,
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6579 ct_REGISTER, ct_LT, ct_NONE } type = ct_NONE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6580
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6581 if ((vim_strchr((char_u *)"qQfF", *p) != NULL) && p[1] == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6583 quote = (*p == 'q' || *p == 'Q') ? 1 : 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6584 p += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6585 l -= 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6587
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6588 ++l;
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6589 if (l <= 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6590 type = ct_NONE;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6591 else if (STRNICMP(p, "args>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6592 type = ct_ARGS;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6593 else if (STRNICMP(p, "bang>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6594 type = ct_BANG;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6595 else if (STRNICMP(p, "count>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6596 type = ct_COUNT;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6597 else if (STRNICMP(p, "line1>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6598 type = ct_LINE1;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6599 else if (STRNICMP(p, "line2>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6600 type = ct_LINE2;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6601 else if (STRNICMP(p, "lt>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6602 type = ct_LT;
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
6603 else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6604 type = ct_REGISTER;
9230
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6605 else if (STRNICMP(p, "mods>", l) == 0)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6606 type = ct_MODS;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6608 switch (type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6610 case ct_ARGS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6611 /* Simple case first */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6612 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6613 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6614 if (quote == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6616 result = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6617 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6618 STRCPY(buf, "''");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6620 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6621 result = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6622 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6623 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6625 /* When specified there is a single argument don't split it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6626 * Works for ":Cmd %" when % is "a b c". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6627 if ((eap->argt & NOSPC) && quote == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6628 quote = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6629
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6630 switch (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6632 case 0: /* No quoting, no splitting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6633 result = STRLEN(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6634 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6635 STRCPY(buf, eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6636 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6637 case 1: /* Quote, but don't split */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 result = STRLEN(eap->arg) + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6639 for (p = eap->arg; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6640 {
3304
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6641 #ifdef FEAT_MBYTE
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6642 if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6643 /* DBCS can contain \ in a trail byte, skip the
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6644 * double-byte character. */
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6645 ++p;
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6646 else
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6647 #endif
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6648 if (*p == '\\' || *p == '"')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6649 ++result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6650 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6652 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6653 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6654 *buf++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6655 for (p = eap->arg; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6656 {
3304
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6657 #ifdef FEAT_MBYTE
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6658 if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6659 /* DBCS can contain \ in a trail byte, copy the
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6660 * double-byte character to avoid escaping. */
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6661 *buf++ = *p++;
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6662 else
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6663 #endif
f4574729f6df updated for version 7.3.419
Bram Moolenaar <bram@vim.org>
parents: 3208
diff changeset
6664 if (*p == '\\' || *p == '"')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6665 *buf++ = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6666 *buf++ = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6668 *buf = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6669 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6670
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6671 break;
1088
c3ba2dcc4cf4 updated for version 7.0-214
vimboss
parents: 1048
diff changeset
6672 case 2: /* Quote and split (<f-args>) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6673 /* This is hard, so only do it once, and cache the result */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6674 if (*split_buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6675 *split_buf = uc_split_args(eap->arg, split_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6676
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6677 result = *split_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6678 if (buf != NULL && result != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6679 STRCPY(buf, *split_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6681 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6682 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6683 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6685 case ct_BANG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6686 result = eap->forceit ? 1 : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6687 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6688 result += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6689 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6690 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6691 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6692 *buf++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6693 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6694 *buf++ = '!';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6695 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6696 *buf = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6698 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6699
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6700 case ct_LINE1:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6701 case ct_LINE2:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6702 case ct_COUNT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6703 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6704 char num_buf[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6705 long num = (type == ct_LINE1) ? eap->line1 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6706 (type == ct_LINE2) ? eap->line2 :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6707 (eap->addr_count > 0) ? eap->line2 : cmd->uc_def;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6708 size_t num_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6710 sprintf(num_buf, "%ld", num);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6711 num_len = STRLEN(num_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6712 result = num_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6713
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6714 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6715 result += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6716
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6717 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6718 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6719 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6720 *buf++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6721 STRCPY(buf, num_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6722 buf += num_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6723 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6724 *buf = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6725 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6727 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6728 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6729
9230
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6730 case ct_MODS:
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6731 {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6732 int multi_mods = 0;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6733 typedef struct {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6734 int *varp;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6735 char *name;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6736 } mod_entry_T;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6737 static mod_entry_T mod_entries[] = {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6738 #ifdef FEAT_BROWSE_CMD
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6739 {&cmdmod.browse, "browse"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6740 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6741 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6742 {&cmdmod.confirm, "confirm"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6743 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6744 {&cmdmod.hide, "hide"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6745 {&cmdmod.keepalt, "keepalt"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6746 {&cmdmod.keepjumps, "keepjumps"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6747 {&cmdmod.keepmarks, "keepmarks"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6748 {&cmdmod.keeppatterns, "keeppatterns"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6749 {&cmdmod.lockmarks, "lockmarks"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6750 {&cmdmod.noswapfile, "noswapfile"},
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6751 {NULL, NULL}
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6752 };
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6753 int i;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6754
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6755 result = quote ? 2 : 0;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6756 if (buf != NULL)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6757 {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6758 if (quote)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6759 *buf++ = '"';
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6760 *buf = '\0';
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6761 }
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6762
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6763 #ifdef FEAT_WINDOWS
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6764 /* :aboveleft and :leftabove */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6765 if (cmdmod.split & WSP_ABOVE)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6766 result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6767 /* :belowright and :rightbelow */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6768 if (cmdmod.split & WSP_BELOW)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6769 result += add_cmd_modifier(buf, "belowright", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6770 /* :botright */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6771 if (cmdmod.split & WSP_BOT)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6772 result += add_cmd_modifier(buf, "botright", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6773 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6774
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6775 /* the modifiers that are simple flags */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6776 for (i = 0; mod_entries[i].varp != NULL; ++i)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6777 if (*mod_entries[i].varp)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6778 result += add_cmd_modifier(buf, mod_entries[i].name,
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6779 &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6780
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6781 /* TODO: How to support :noautocmd? */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6782 #ifdef HAVE_SANDBOX
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6783 /* TODO: How to support :sandbox?*/
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6784 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6785 /* :silent */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6786 if (msg_silent > 0)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6787 result += add_cmd_modifier(buf,
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6788 emsg_silent > 0 ? "silent!" : "silent", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6789 #ifdef FEAT_WINDOWS
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6790 /* :tab */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6791 if (cmdmod.tab > 0)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6792 result += add_cmd_modifier(buf, "tab", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6793 /* :topleft */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6794 if (cmdmod.split & WSP_TOP)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6795 result += add_cmd_modifier(buf, "topleft", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6796 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6797 /* TODO: How to support :unsilent?*/
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6798 /* :verbose */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6799 if (p_verbose > 0)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6800 result += add_cmd_modifier(buf, "verbose", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6801 #ifdef FEAT_WINDOWS
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6802 /* :vertical */
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6803 if (cmdmod.split & WSP_VERT)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6804 result += add_cmd_modifier(buf, "vertical", &multi_mods);
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6805 #endif
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6806 if (quote && buf != NULL)
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6807 {
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6808 buf += result - 2;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6809 *buf = '"';
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6810 }
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6811 break;
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6812 }
f7fb117883ba commit https://github.com/vim/vim/commit/63a60ded3fd584847a05dccf058026e682abad90
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
6813
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 case ct_REGISTER:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815 result = eap->regname ? 1 : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6817 result += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6818 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6820 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6821 *buf++ = '\'';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6822 if (eap->regname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6823 *buf++ = eap->regname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6824 if (quote)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6825 *buf = '\'';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6827 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6828
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6829 case ct_LT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6830 result = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6832 *buf = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6834
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6835 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6836 /* Not recognized: just copy the '<' and return -1. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6837 result = (size_t)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 *buf = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6840 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6841 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6842
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6844 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6845
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6847 do_ucmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6849 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6850 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6851 char_u *q;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6853 char_u *start;
1812
4c7cf05f60b5 updated for version 7.2-110
vimboss
parents: 1792
diff changeset
6854 char_u *end = NULL;
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6855 char_u *ksp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6856 size_t len, totlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6857
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6858 size_t split_len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6859 char_u *split_buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6860 ucmd_T *cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6861 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6862 scid_T save_current_SID = current_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6863 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6865 if (eap->cmdidx == CMD_USER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6866 cmd = USER_CMD(eap->useridx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6867 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6868 cmd = USER_CMD_GA(&curbuf->b_ucmds, eap->useridx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6869
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6870 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6871 * Replace <> in the command by the arguments.
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6872 * First round: "buf" is NULL, compute length, allocate "buf".
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6873 * Second round: copy result into "buf".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6874 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875 buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6876 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6877 {
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6878 p = cmd->uc_rep; /* source */
1837
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
6879 q = buf; /* destination */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6880 totlen = 0;
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6881
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6882 for (;;)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6883 {
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6884 start = vim_strchr(p, '<');
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6885 if (start != NULL)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6886 end = vim_strchr(start + 1, '>');
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6887 if (buf != NULL)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6888 {
2722
ea399ac2c1b9 updated for version 7.3.138
Bram Moolenaar <bram@vim.org>
parents: 2682
diff changeset
6889 for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
ea399ac2c1b9 updated for version 7.3.138
Bram Moolenaar <bram@vim.org>
parents: 2682
diff changeset
6890 ;
ea399ac2c1b9 updated for version 7.3.138
Bram Moolenaar <bram@vim.org>
parents: 2682
diff changeset
6891 if (*ksp == K_SPECIAL
ea399ac2c1b9 updated for version 7.3.138
Bram Moolenaar <bram@vim.org>
parents: 2682
diff changeset
6892 && (start == NULL || ksp < start || end == NULL)
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6893 && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6894 # ifdef FEAT_GUI
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6895 || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6896 # endif
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6897 ))
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6898 {
2722
ea399ac2c1b9 updated for version 7.3.138
Bram Moolenaar <bram@vim.org>
parents: 2682
diff changeset
6899 /* K_SPECIAL has been put in the buffer as K_SPECIAL
1792
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6900 * KS_SPECIAL KE_FILLER, like for mappings, but
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6901 * do_cmdline() doesn't handle that, so convert it back.
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6902 * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6903 len = ksp - p;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6904 if (len > 0)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6905 {
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6906 mch_memmove(q, p, len);
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6907 q += len;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6908 }
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6909 *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6910 p = ksp + 3;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6911 continue;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6912 }
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6913 }
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6914
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6915 /* break if there no <item> is found */
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6916 if (start == NULL || end == NULL)
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6917 break;
27d8fe1c0964 updated for version 7.2-090
vimboss
parents: 1769
diff changeset
6918
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6919 /* Include the '>' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6920 ++end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6921
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6922 /* Take everything up to the '<' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6923 len = start - p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6924 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6925 totlen += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6926 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6927 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6928 mch_memmove(q, p, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6929 q += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6930 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6932 len = uc_check_code(start, end - start, q, cmd, eap,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6933 &split_buf, &split_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6934 if (len == (size_t)-1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6935 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6936 /* no match, continue after '<' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6937 p = start + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6938 len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6939 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6940 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6941 p = end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6942 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6943 totlen += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6944 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6945 q += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6946 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6947 if (buf != NULL) /* second time here, finished */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6948 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6949 STRCPY(q, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6950 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6951 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6953 totlen += STRLEN(p); /* Add on the trailing characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6954 buf = alloc((unsigned)(totlen + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6955 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6956 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6957 vim_free(split_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6958 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6959 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6960 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6961
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6962 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6963 current_SID = cmd->uc_scriptID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6964 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6965 (void)do_cmdline(buf, eap->getline, eap->cookie,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6966 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6967 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6968 current_SID = save_current_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6969 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6970 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6971 vim_free(split_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6972 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6974 # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6975 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6976 get_user_command_name(int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6977 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6978 return get_user_commands(NULL, idx - (int)CMD_SIZE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6981 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6982 * Function given to ExpandGeneric() to obtain the list of user command names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6983 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6984 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6985 get_user_commands(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6987 if (idx < curbuf->b_ucmds.ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6988 return USER_CMD_GA(&curbuf->b_ucmds, idx)->uc_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6989 idx -= curbuf->b_ucmds.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6990 if (idx < ucmds.ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6991 return USER_CMD(idx)->uc_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6992 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6993 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6994
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6995 /*
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6996 * Function given to ExpandGeneric() to obtain the list of user address type names.
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6997 */
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
6998 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6999 get_user_cmd_addr_type(expand_T *xp UNUSED, int idx)
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7000 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7001 return (char_u *)addr_type_complete[idx].name;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7002 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7003
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7004 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7005 * Function given to ExpandGeneric() to obtain the list of user command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7006 * attributes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7007 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7008 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7009 get_user_cmd_flags(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7010 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7011 static char *user_cmd_flags[] =
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7012 {"addr", "bang", "bar", "buffer", "complete",
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7013 "count", "nargs", "range", "register"};
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7014
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1879
diff changeset
7015 if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7016 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7017 return (char_u *)user_cmd_flags[idx];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7018 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7020 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7021 * Function given to ExpandGeneric() to obtain the list of values for -nargs.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7022 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7023 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7024 get_user_cmd_nargs(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7026 static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7027
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1879
diff changeset
7028 if (idx >= (int)(sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0])))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7029 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7030 return (char_u *)user_cmd_nargs[idx];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7031 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7032
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7033 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7034 * Function given to ExpandGeneric() to obtain the list of values for -complete.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7035 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7036 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7037 get_user_cmd_complete(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7038 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7039 return (char_u *)command_complete[idx].name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7040 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7041 # endif /* FEAT_CMDL_COMPL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7042
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7043 /*
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7044 * Parse address type argument
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7045 */
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7046 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7047 parse_addr_type_arg(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7048 char_u *value,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7049 int vallen,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7050 long *argt,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7051 int *addr_type_arg)
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7052 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7053 int i, a, b;
7549
b80fb2cfd62b commit https://github.com/vim/vim/commit/05fe017c1ac0503b706dad695097572fde01ab0b
Christian Brabandt <cb@256bit.org>
parents: 7469
diff changeset
7054
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7055 for (i = 0; addr_type_complete[i].expand != -1; ++i)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7056 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7057 a = (int)STRLEN(addr_type_complete[i].name) == vallen;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7058 b = STRNCMP(value, addr_type_complete[i].name, vallen) == 0;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7059 if (a && b)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7060 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7061 *addr_type_arg = addr_type_complete[i].expand;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7062 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7063 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7064 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7065
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7066 if (addr_type_complete[i].expand == -1)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7067 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7068 char_u *err = value;
7549
b80fb2cfd62b commit https://github.com/vim/vim/commit/05fe017c1ac0503b706dad695097572fde01ab0b
Christian Brabandt <cb@256bit.org>
parents: 7469
diff changeset
7069
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
7070 for (i = 0; err[i] != NUL && !VIM_ISWHITE(err[i]); i++)
7549
b80fb2cfd62b commit https://github.com/vim/vim/commit/05fe017c1ac0503b706dad695097572fde01ab0b
Christian Brabandt <cb@256bit.org>
parents: 7469
diff changeset
7071 ;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7072 err[i] = NUL;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7073 EMSG2(_("E180: Invalid address type value: %s"), err);
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7074 return FAIL;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7075 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7076
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7077 if (*addr_type_arg != ADDR_LINES)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7078 *argt |= NOTADR;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7079
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7080 return OK;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7081 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
7082
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7083 #endif /* FEAT_USR_CMDS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7084
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7085 #if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7086 /*
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7087 * Parse a completion argument "value[vallen]".
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7088 * The detected completion goes in "*complp", argument type in "*argt".
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7089 * When there is an argument, for function and user defined completion, it's
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7090 * copied to allocated memory and stored in "*compl_arg".
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7091 * Returns FAIL if something is wrong.
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7092 */
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7093 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7094 parse_compl_arg(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7095 char_u *value,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7096 int vallen,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7097 int *complp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7098 long *argt,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7099 char_u **compl_arg UNUSED)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7100 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7101 char_u *arg = NULL;
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
7102 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7103 size_t arglen = 0;
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
7104 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7105 int i;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7106 int valend = vallen;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7107
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7108 /* Look for any argument part - which is the part after any ',' */
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7109 for (i = 0; i < vallen; ++i)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7110 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7111 if (value[i] == ',')
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7112 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7113 arg = &value[i + 1];
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
7114 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7115 arglen = vallen - i - 1;
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
7116 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7117 valend = i;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7118 break;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7119 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7120 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7121
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7122 for (i = 0; command_complete[i].expand != 0; ++i)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7123 {
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
7124 if ((int)STRLEN(command_complete[i].name) == valend
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7125 && STRNCMP(value, command_complete[i].name, valend) == 0)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7126 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7127 *complp = command_complete[i].expand;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7128 if (command_complete[i].expand == EXPAND_BUFFERS)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7129 *argt |= BUFNAME;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7130 else if (command_complete[i].expand == EXPAND_DIRECTORIES
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7131 || command_complete[i].expand == EXPAND_FILES)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7132 *argt |= XFILE;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7133 break;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7134 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7135 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7136
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7137 if (command_complete[i].expand == 0)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7138 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7139 EMSG2(_("E180: Invalid complete value: %s"), value);
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7140 return FAIL;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7141 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7142
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7143 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7144 if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7145 && arg != NULL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7146 # else
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7147 if (arg != NULL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7148 # endif
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7149 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7150 EMSG(_("E468: Completion argument only allowed for custom completion"));
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7151 return FAIL;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7152 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7153
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7154 # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7155 if ((*complp == EXPAND_USER_DEFINED || *complp == EXPAND_USER_LIST)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7156 && arg == NULL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7157 {
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7158 EMSG(_("E467: Custom completion requires a function argument"));
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7159 return FAIL;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7160 }
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7161
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7162 if (arg != NULL)
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7163 *compl_arg = vim_strnsave(arg, (int)arglen);
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7164 # endif
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7165 return OK;
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7166 }
9460
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7167
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7168 int
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7169 cmdcomplete_str_to_type(char_u *complete_str)
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7170 {
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7171 int i;
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7172
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7173 for (i = 0; command_complete[i].expand != 0; ++i)
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7174 if (STRCMP(complete_str, command_complete[i].name) == 0)
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7175 return command_complete[i].expand;
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7176
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7177 return EXPAND_NOTHING;
cdffa812f9d1 commit https://github.com/vim/vim/commit/aa4d73235bf4deee167aa5314b89ae3d3db334b7
Christian Brabandt <cb@256bit.org>
parents: 9454
diff changeset
7178 }
531
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7179 #endif
da9142bd190a updated for version 7.0149
vimboss
parents: 482
diff changeset
7180
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7181 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7182 ex_colorscheme(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7183 {
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7184 if (*eap->arg == NUL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7185 {
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7186 #ifdef FEAT_EVAL
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7187 char_u *expr = vim_strsave((char_u *)"g:colors_name");
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7188 char_u *p = NULL;
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7189
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7190 if (expr != NULL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7191 {
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7192 ++emsg_off;
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7193 p = eval_to_string(expr, NULL, FALSE);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7194 --emsg_off;
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7195 vim_free(expr);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7196 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7197 if (p != NULL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7198 {
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7199 MSG(p);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7200 vim_free(p);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7201 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7202 else
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7203 MSG("default");
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7204 #else
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7205 MSG(_("unknown"));
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7206 #endif
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7207 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7208 else if (load_colors(eap->arg) == FAIL)
3810
2a200527131f updated for version 7.3.663
Bram Moolenaar <bram@vim.org>
parents: 3757
diff changeset
7209 EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7211
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7212 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7213 ex_highlight(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7215 if (*eap->arg == NUL && eap->cmd[2] == '!')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7216 MSG(_("Greetings, Vim user!"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7217 do_highlight(eap->arg, eap->forceit, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7218 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7219
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7221 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7222 * Call this function if we thought we were going to exit, but we won't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7223 * (because of an error). May need to restore the terminal mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7224 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7225 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7226 not_exiting(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7227 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7228 exiting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7229 settmode(TMODE_RAW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7230 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7232 /*
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7233 * ":quit": quit current window, quit Vim if the last window is closed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7234 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7235 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7236 ex_quit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7237 {
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7238 #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7239 win_T *wp;
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7240 #endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7241
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7242 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7243 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7244 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7245 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7246 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7247 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7248 #endif
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7249 /* Don't quit while editing the command line. */
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7250 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7251 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7252 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7253 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7254 }
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7255 #ifdef FEAT_WINDOWS
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7256 if (eap->addr_count > 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7257 {
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7258 int wnr = eap->line2;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7259
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7260 for (wp = firstwin; wp->w_next != NULL; wp = wp->w_next)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7261 if (--wnr <= 0)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7262 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7263 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7264 else
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7265 #endif
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7266 #if defined(FEAT_WINDOWS) || defined(FEAT_AUTOCMD)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7267 wp = curwin;
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7268 #endif
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
7269
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7270 #ifdef FEAT_AUTOCMD
3568
09d0bda69df0 updated for version 7.3.544
Bram Moolenaar <bram@vim.org>
parents: 3562
diff changeset
7271 apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
4211
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7272 /* Refuse to quit when locked or when the buffer in the last window is
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3568
diff changeset
7273 * being closed (can only happen in autocommands). */
11635
70bc7b107610 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Christian Brabandt <cb@256bit.org>
parents: 11621
diff changeset
7274 if (curbuf_locked()
70bc7b107610 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Christian Brabandt <cb@256bit.org>
parents: 11621
diff changeset
7275 # ifdef FEAT_WINDOWS
70bc7b107610 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Christian Brabandt <cb@256bit.org>
parents: 11621
diff changeset
7276 || !win_valid(wp)
70bc7b107610 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Christian Brabandt <cb@256bit.org>
parents: 11621
diff changeset
7277 # endif
70bc7b107610 patch 8.0.0700: segfault with QuitPre autocommand closes the window
Christian Brabandt <cb@256bit.org>
parents: 11621
diff changeset
7278 || (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0))
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7279 return;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7280 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7281
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7282 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7283 netbeansForcedQuit = eap->forceit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7284 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7286 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7287 * If there are more files or windows we won't exit.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7288 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7289 if (check_more(FALSE, eap->forceit) == OK && only_one_window())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7290 exiting = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7291 if ((!P_HID(curbuf)
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7292 && check_changed(curbuf, (p_awa ? CCGD_AW : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7293 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7294 | CCGD_EXCMD))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7295 || check_more(TRUE, eap->forceit) == FAIL
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7465
diff changeset
7296 || (only_one_window() && check_changed_any(eap->forceit, TRUE)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7298 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7299 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7300 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7301 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7302 #ifdef FEAT_WINDOWS
6838
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7303 /* quit last window
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7304 * Note: only_one_window() returns true, even so a help window is
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7305 * still open. In that case only quit, if no address has been
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7306 * specified. Example:
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7307 * :h|wincmd w|1q - don't quit
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7308 * :h|wincmd w|q - quit
0229cfffc560 patch 7.4.740
Bram Moolenaar <bram@vim.org>
parents: 6832
diff changeset
7309 */
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10275
diff changeset
7310 if (only_one_window() && (ONE_WINDOW || eap->addr_count == 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7311 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7312 getout(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7313 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7314 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7315 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7316 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7317 /* close window; may free buffer */
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7318 win_close(wp, !P_HID(wp->w_buffer) || eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7319 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7323 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7324 * ":cquit".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7325 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7326 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7327 ex_cquit(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7328 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7329 getout(1); /* this does not always pass on the exit code to the Manx
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7330 compiler. why? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7331 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7333 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7334 * ":qall": try to quit all windows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7335 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7336 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7337 ex_quit_all(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7338 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7339 # ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7340 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7341 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7342 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7343 cmdwin_result = K_XF1; /* ex_window() takes care of this */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7344 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7345 cmdwin_result = K_XF2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7346 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7347 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7348 # endif
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7349
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7350 /* Don't quit while editing the command line. */
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7351 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7352 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7353 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7354 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7355 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7356 #ifdef FEAT_AUTOCMD
4211
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7357 apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7358 /* Refuse to quit when locked or when the buffer in the last window is
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7359 * being closed (can only happen in autocommands). */
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
7360 if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0))
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7361 return;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7362 #endif
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7363
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7364 exiting = TRUE;
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7465
diff changeset
7365 if (eap->forceit || !check_changed_any(FALSE, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7366 getout(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7367 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7369
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7370 #if defined(FEAT_WINDOWS) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7371 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7372 * ":close": close current window, unless it is the last one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7373 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7374 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7375 ex_close(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7376 {
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7377 win_T *win;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7378 int winnr = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7379 # ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7380 if (cmdwin_type != 0)
2839
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
7381 cmdwin_result = Ctrl_C;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7382 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7383 # endif
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7384 if (!text_locked()
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7385 #ifdef FEAT_AUTOCMD
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7386 && !curbuf_locked()
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7387 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7388 )
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7389 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7390 if (eap->addr_count == 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7391 ex_win_close(eap->forceit, curwin, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7392 else {
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7393 FOR_ALL_WINDOWS(win)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7394 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7395 winnr++;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7396 if (winnr == eap->line2)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7397 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7398 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7399 if (win == NULL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7400 win = lastwin;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7401 ex_win_close(eap->forceit, win, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7402 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7403 }
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7404 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7405
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7406 # ifdef FEAT_QUICKFIX
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7407 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7408 * ":pclose": Close any preview window.
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7409 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7410 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7411 ex_pclose(exarg_T *eap)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7412 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7413 win_T *win;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7414
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7415 FOR_ALL_WINDOWS(win)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7416 if (win->w_p_pvw)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7417 {
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7418 ex_win_close(eap->forceit, win, NULL);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7419 break;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7420 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7421 }
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7422 # endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7423
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7424 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7425 * Close window "win" and take care of handling closing the last window for a
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7426 * modified buffer.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7427 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7428 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7429 ex_win_close(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7430 int forceit,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7431 win_T *win,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7432 tabpage_T *tp) /* NULL or the tab page "win" is in */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7433 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7434 int need_hide;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7435 buf_T *buf = win->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7436
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7437 need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7438 if (need_hide && !P_HID(buf) && !forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7439 {
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7440 # if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7441 if ((p_confirm || cmdmod.confirm) && p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7442 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
7443 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
7444
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
7445 set_bufref(&bufref, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7446 dialog_changed(buf, FALSE);
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
7447 if (bufref_valid(&bufref) && bufIsChanged(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7448 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7449 need_hide = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7451 else
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7452 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7453 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7454 EMSG(_(e_nowrtmsg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7455 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7456 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7457 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7458
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7459 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7460 need_mouse_correct = TRUE;
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7461 # endif
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7462
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7463 /* free buffer when not hiding it or when it's a scratch buffer */
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7464 if (tp == NULL)
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7465 win_close(win, !need_hide && !P_HID(buf));
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7466 else
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7467 win_close_othertab(win, !need_hide && !P_HID(buf), tp);
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7468 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7469
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7470 /*
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7471 * Handle the argument for a tabpage related ex command.
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7472 * Returns a tabpage number.
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7473 * When an error is encountered then eap->errmsg is set.
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7474 */
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7475 static int
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7476 get_tabpage_arg(exarg_T *eap)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7477 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7478 int tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7479 int unaccept_arg0 = (eap->cmdidx == CMD_tabmove) ? 0 : 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7480
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7481 if (eap->arg && *eap->arg != NUL)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7482 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7483 char_u *p = eap->arg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7484 char_u *p_save;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7485 int relative = 0; /* argument +N/-N means: go to N places to the
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7486 * right/left relative to the current position. */
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7487
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7488 if (*p == '-')
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7489 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7490 relative = -1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7491 p++;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7492 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7493 else if (*p == '+')
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7494 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7495 relative = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7496 p++;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7497 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7498
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7499 p_save = p;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7500 tab_number = getdigits(&p);
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7501
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7502 if (relative == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7503 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7504 if (STRCMP(p, "$") == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7505 tab_number = LAST_TAB_NR;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7506 else if (p == p_save || *p_save == '-' || *p != NUL
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7507 || tab_number > LAST_TAB_NR)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7508 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7509 /* No numbers as argument. */
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7510 eap->errmsg = e_invarg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7511 goto theend;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7512 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7513 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7514 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7515 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7516 if (*p_save == NUL)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7517 tab_number = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7518 else if (p == p_save || *p_save == '-' || *p != NUL
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7519 || tab_number == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7520 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7521 /* No numbers as argument. */
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7522 eap->errmsg = e_invarg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7523 goto theend;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7524 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7525 tab_number = tab_number * relative + tabpage_index(curtab);
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7526 if (!unaccept_arg0 && relative == -1)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7527 --tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7528 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7529 if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7530 eap->errmsg = e_invarg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7531 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7532 else if (eap->addr_count > 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7533 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7534 if (unaccept_arg0 && eap->line2 == 0)
10753
4961e7acdd8c patch 8.0.0266: compiler warning for using uninitialized variable
Christian Brabandt <cb@256bit.org>
parents: 10741
diff changeset
7535 {
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7536 eap->errmsg = e_invrange;
10753
4961e7acdd8c patch 8.0.0266: compiler warning for using uninitialized variable
Christian Brabandt <cb@256bit.org>
parents: 10741
diff changeset
7537 tab_number = 0;
4961e7acdd8c patch 8.0.0266: compiler warning for using uninitialized variable
Christian Brabandt <cb@256bit.org>
parents: 10741
diff changeset
7538 }
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7539 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7540 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7541 tab_number = eap->line2;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7542 if (!unaccept_arg0 && **eap->cmdlinep == '-')
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7543 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7544 --tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7545 if (tab_number < unaccept_arg0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7546 eap->errmsg = e_invarg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7547 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7548 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7549 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7550 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7551 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7552 switch (eap->cmdidx)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7553 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7554 case CMD_tabnext:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7555 tab_number = tabpage_index(curtab) + 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7556 if (tab_number > LAST_TAB_NR)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7557 tab_number = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7558 break;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7559 case CMD_tabmove:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7560 tab_number = LAST_TAB_NR;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7561 break;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7562 default:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7563 tab_number = tabpage_index(curtab);
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7564 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7565 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7566
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7567 theend:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7568 return tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7569 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7570
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
7571 /*
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7572 * ":tabclose": close current tab page, unless it is the last one.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7573 * ":tabclose N": close tab page N.
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7574 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7575 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7576 ex_tabclose(exarg_T *eap)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7577 {
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7578 tabpage_T *tp;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7579 int tab_number;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7580
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7581 # ifdef FEAT_CMDWIN
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7582 if (cmdwin_type != 0)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7583 cmdwin_result = K_IGNORE;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7584 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7585 # endif
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7586 if (first_tabpage->tp_next == NULL)
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
7587 EMSG(_("E784: Cannot close last tab page"));
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7588 else
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7589 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7590 tab_number = get_tabpage_arg(eap);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7591 if (eap->errmsg == NULL)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7592 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7593 tp = find_tabpage(tab_number);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7594 if (tp == NULL)
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7595 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7596 beep_flush();
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7597 return;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7598 }
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
7599 if (tp != curtab)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7600 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7601 tabpage_close_other(tp, eap->forceit);
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7602 return;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7603 }
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7604 else if (!text_locked()
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7605 #ifdef FEAT_AUTOCMD
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7606 && !curbuf_locked()
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7607 #endif
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7608 )
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7609 tabpage_close(eap->forceit);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7610 }
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7611 }
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7612 }
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7613
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7614 /*
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7615 * ":tabonly": close all tab pages except the current one
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7616 */
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7617 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7618 ex_tabonly(exarg_T *eap)
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7619 {
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7620 tabpage_T *tp;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7621 int done;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7622 int tab_number;
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7623
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7624 # ifdef FEAT_CMDWIN
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7625 if (cmdwin_type != 0)
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7626 cmdwin_result = K_IGNORE;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7627 else
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7628 # endif
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7629 if (first_tabpage->tp_next == NULL)
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7630 MSG(_("Already only one tab page"));
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7631 else
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7632 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7633 tab_number = get_tabpage_arg(eap);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7634 if (eap->errmsg == NULL)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7635 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7636 goto_tabpage(tab_number);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7637 /* Repeat this up to a 1000 times, because autocommands may
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7638 * mess up the lists. */
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7639 for (done = 0; done < 1000; ++done)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7640 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7641 FOR_ALL_TABPAGES(tp)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7642 if (tp->tp_topframe != topframe)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7643 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7644 tabpage_close_other(tp, eap->forceit);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7645 /* if we failed to close it quit */
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7646 if (valid_tabpage(tp))
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7647 done = 1000;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7648 /* start over, "tp" is now invalid */
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7649 break;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7650 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7651 if (first_tabpage->tp_next == NULL)
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7652 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
7653 }
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7654 }
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7655 }
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7656 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7657
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7658 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7659 * Close the current tab page.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7660 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7661 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7662 tabpage_close(int forceit)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7663 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7664 /* First close all the windows but the current one. If that worked then
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7665 * close the last window in this tab, that will close it. */
10357
59d01e335858 commit https://github.com/vim/vim/commit/459ca563128f2edb7e3bb190090bbb755a56dd55
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
7666 if (!ONE_WINDOW)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
7667 close_others(TRUE, forceit);
10357
59d01e335858 commit https://github.com/vim/vim/commit/459ca563128f2edb7e3bb190090bbb755a56dd55
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
7668 if (ONE_WINDOW)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7669 ex_win_close(forceit, curwin, NULL);
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7670 # ifdef FEAT_GUI
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7671 need_mouse_correct = TRUE;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7672 # endif
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7673 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7674
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7675 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7676 * Close tab page "tp", which is not the current tab page.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7677 * Note that autocommands may make "tp" invalid.
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7678 * Also takes care of the tab pages line disappearing when closing the
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7679 * last-but-one tab page.
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7680 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7681 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7682 tabpage_close_other(tabpage_T *tp, int forceit)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7683 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7684 int done = 0;
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7685 win_T *wp;
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7686 int h = tabline_height();
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7687
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7688 /* Limit to 1000 windows, autocommands may add a window while we close
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7689 * one. OK, so I'm paranoid... */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7690 while (++done < 1000)
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7691 {
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7692 wp = tp->tp_firstwin;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7693 ex_win_close(forceit, wp, tp);
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7694
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7695 /* Autocommands may delete the tab page under our fingers and we may
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7696 * fail to close a window with a modified buffer. */
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7697 if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7698 break;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
7699 }
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7700
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7701 #ifdef FEAT_AUTOCMD
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7702 apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7703 #endif
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7704
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
7705 redraw_tabline = TRUE;
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7706 if (h != tabline_height())
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
7707 shell_new_rows();
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
7708 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7710 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7711 * ":only".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7712 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7713 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7714 ex_only(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7715 {
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7716 win_T *wp;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7717 int wnr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7718 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7719 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7720 # endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7721 if (eap->addr_count > 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7722 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7723 wnr = eap->line2;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7724 for (wp = firstwin; --wnr > 0; )
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7725 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7726 if (wp->w_next == NULL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7727 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7728 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7729 wp = wp->w_next;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7730 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7731 win_goto(wp);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
7732 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7733 close_others(TRUE, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7736 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7737 * ":all" and ":sall".
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7738 * Also used for ":tab drop file ..." after setting the argument list.
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7739 */
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7740 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7741 ex_all(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7742 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7743 if (eap->addr_count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7744 eap->line2 = 9999;
727
89631e4c0753 updated for version 7.0221
vimboss
parents: 717
diff changeset
7745 do_arg_all((int)eap->line2, eap->forceit, eap->cmdidx == CMD_drop);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7746 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7747 #endif /* FEAT_WINDOWS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7749 static void
10492
b2cd5a71f4bb commit https://github.com/vim/vim/commit/5e1e6d265d26ee2952c4a018a5ff72c950d2d700
Christian Brabandt <cb@256bit.org>
parents: 10490
diff changeset
7750 ex_hide(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7751 {
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7752 /* ":hide" or ":hide | cmd": hide current window */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7753 #ifdef FEAT_WINDOWS
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7754 if (!eap->skip)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7755 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7756 # ifdef FEAT_GUI
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7757 need_mouse_correct = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7758 # endif
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7759 if (eap->addr_count == 0)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7760 win_close(curwin, FALSE); /* don't free buffer */
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7761 else
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7762 {
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7763 int winnr = 0;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7764 win_T *win;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7765
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7766 FOR_ALL_WINDOWS(win)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7767 {
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7768 winnr++;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7769 if (winnr == eap->line2)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7770 break;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7771 }
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7772 if (win == NULL)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7773 win = lastwin;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7774 win_close(win, FALSE);
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7775 }
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7776 }
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
7777 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7778 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7780 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7781 * ":stop" and ":suspend": Suspend Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7782 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7783 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7784 ex_stop(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7786 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7787 * Disallow suspending for "rvim".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7788 */
10264
c036c0f636d5 commit https://github.com/vim/vim/commit/cea912af725c54f4727a0565e31661f6b29c6bb1
Christian Brabandt <cb@256bit.org>
parents: 10240
diff changeset
7789 if (!check_restricted())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7790 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7791 if (!eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7792 autowrite_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7793 windgoto((int)Rows - 1, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7794 out_char('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7795 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7796 stoptermcap();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7797 out_flush(); /* needed for SUN to restore xterm buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7798 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7799 mch_restore_title(3); /* restore window titles */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7800 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7801 ui_suspend(); /* call machine specific function */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7802 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7803 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7804 resettitle(); /* force updating the title */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7805 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7806 starttermcap();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7807 scroll_start(); /* scroll screen before redrawing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7808 redraw_later_clear();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7809 shell_resized(); /* may have resized window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7813 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7814 * ":exit", ":xit" and ":wq": Write file and exit Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7815 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7816 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7817 ex_exit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7818 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7819 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7820 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7821 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7822 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7823 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7825 #endif
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7826 /* Don't quit while editing the command line. */
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7827 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7828 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7829 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7830 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7831 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7832 #ifdef FEAT_AUTOCMD
4211
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7833 apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7834 /* Refuse to quit when locked or when the buffer in the last window is
4905e038b105 updated for version 7.3.857
Bram Moolenaar <bram@vim.org>
parents: 4172
diff changeset
7835 * being closed (can only happen in autocommands). */
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
7836 if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0))
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7837 return;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7838 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7839
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7840 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7841 * if more files or windows we won't exit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7842 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7843 if (check_more(FALSE, eap->forceit) == OK && only_one_window())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7844 exiting = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7845 if ( ((eap->cmdidx == CMD_wq
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7846 || curbufIsChanged())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7847 && do_write(eap) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7848 || check_more(TRUE, eap->forceit) == FAIL
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7465
diff changeset
7849 || (only_one_window() && check_changed_any(eap->forceit, FALSE)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7851 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7852 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7853 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7854 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7855 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7856 if (only_one_window()) /* quit last window, exit Vim */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7857 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7858 getout(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7859 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7860 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7861 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7862 # endif
5245
8c6615a30951 updated for version 7.4a.047
Bram Moolenaar <bram@vim.org>
parents: 5198
diff changeset
7863 /* Quit current window, may free the buffer. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7864 win_close(curwin, !P_HID(curwin->w_buffer));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7865 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7867 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7869 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7870 * ":print", ":list", ":number".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7871 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7872 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7873 ex_print(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7874 {
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7875 if (curbuf->b_ml.ml_flags & ML_EMPTY)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7876 EMSG(_(e_emptybuf));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7877 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7878 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7879 for ( ;!got_int; ui_breakcheck())
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7880 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7881 print_line(eap->line1,
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7882 (eap->cmdidx == CMD_number || eap->cmdidx == CMD_pound
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7883 || (eap->flags & EXFLAG_NR)),
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7884 eap->cmdidx == CMD_list || (eap->flags & EXFLAG_LIST));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7885 if (++eap->line1 > eap->line2)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7886 break;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7887 out_flush(); /* show one line at a time */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7888 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7889 setpcmark();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7890 /* put cursor at last line */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7891 curwin->w_cursor.lnum = eap->line2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7892 beginline(BL_SOL | BL_FIX);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7893 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7894
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7895 ex_no_reprint = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7896 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7897
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7898 #ifdef FEAT_BYTEOFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7899 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7900 ex_goto(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7901 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7902 goto_byte(eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7904 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7906 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7907 * ":shell".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7908 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7909 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7910 ex_shell(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7911 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7912 do_shell(NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7913 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7914
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7915 #if (defined(FEAT_WINDOWS) && defined(HAVE_DROP_FILE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7916 || (defined(FEAT_GUI_GTK) && defined(FEAT_DND)) \
621
c5688885c414 updated for version 7.0178
vimboss
parents: 620
diff changeset
7917 || defined(FEAT_GUI_MSWIN) \
c5688885c414 updated for version 7.0178
vimboss
parents: 620
diff changeset
7918 || defined(FEAT_GUI_MAC) \
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7919 || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7921 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7922 * Handle a file drop. The code is here because a drop is *nearly* like an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7923 * :args command, but not quite (we have a list of exact filenames, so we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7924 * don't want to (a) parse a command line, or (b) expand wildcards. So the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7925 * code is very similar to :args and hence needs access to a lot of the static
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7926 * functions in this file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7927 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7928 * The list should be allocated using alloc(), as should each item in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7929 * list. This function takes over responsibility for freeing the list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7930 *
1441
21b11491a33f updated for version 7.1-156
vimboss
parents: 1427
diff changeset
7931 * XXX The list is made into the argument list. This is freed using
9536
b2aada04d84e commit https://github.com/vim/vim/commit/a06ecab7a5159e744448ace731036f0dc5f87dd4
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7932 * FreeWild(), which does a series of vim_free() calls.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7933 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7934 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7935 handle_drop(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7936 int filec, /* the number of files dropped */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7937 char_u **filev, /* the list of files dropped */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7938 int split) /* force splitting the window */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7939 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7940 exarg_T ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7941 int save_msg_scroll = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7942
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
7943 /* Postpone this while editing the command line. */
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
7944 if (text_locked())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7945 return;
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7946 #ifdef FEAT_AUTOCMD
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7947 if (curbuf_locked())
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7948 return;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
7949 #endif
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1661
diff changeset
7950 /* When the screen is being updated we should not change buffers and
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1661
diff changeset
7951 * windows structures, it may cause freed memory to be used. */
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1661
diff changeset
7952 if (updating_screen)
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1661
diff changeset
7953 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7954
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7955 /* Check whether the current buffer is changed. If so, we will need
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7956 * to split the current window or data could be lost.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7957 * We don't need to check if the 'hidden' option is set, as in this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7958 * case the buffer won't be lost.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7959 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7960 if (!P_HID(curbuf) && !split)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7961 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7962 ++emsg_off;
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
7963 split = check_changed(curbuf, CCGD_AW);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7964 --emsg_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7965 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7966 if (split)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7967 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7968 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7969 if (win_split(0, 0) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7970 return;
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
7971 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7972
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7973 /* When splitting the window, create a new alist. Otherwise the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7974 * existing one is overwritten. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7975 alist_unlink(curwin->w_alist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7976 alist_new();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7977 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7978 return; /* can't split, always fail */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7979 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7980 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7981
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7982 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7983 * Set up the new argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7984 */
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
7985 alist_set(ALIST(curwin), filec, filev, FALSE, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7986
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7987 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7988 * Move to the first file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7989 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7990 /* Fake up a minimal "next" command for do_argfile() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7991 vim_memset(&ea, 0, sizeof(ea));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7992 ea.cmd = (char_u *)"next";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7993 do_argfile(&ea, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7994
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7995 /* do_ecmd() may set need_start_insertmode, but since we never left Insert
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7996 * mode that is not needed here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7997 need_start_insertmode = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7999 /* Restore msg_scroll, otherwise a following command may cause scrolling
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8000 * unexpectedly. The screen will be redrawn by the caller, thus
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8001 * msg_scroll being set by displaying a message is irrelevant. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8002 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8003 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8004 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8006 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8007 * Clear an argument list: free all file names and reset it to zero entries.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8008 */
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8009 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8010 alist_clear(alist_T *al)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8011 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8012 while (--al->al_ga.ga_len >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8013 vim_free(AARGLIST(al)[al->al_ga.ga_len].ae_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8014 ga_clear(&al->al_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8015 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8016
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8017 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8018 * Init an argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8019 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8020 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8021 alist_init(alist_T *al)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8022 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8023 ga_init2(&al->al_ga, (int)sizeof(aentry_T), 5);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8024 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8025
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8026 #if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8027
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8028 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8029 * Remove a reference from an argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8030 * Ignored when the argument list is the global one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8031 * If the argument list is no longer used by any window, free it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8032 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8033 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8034 alist_unlink(alist_T *al)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8036 if (al != &global_alist && --al->al_refcount <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8037 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8038 alist_clear(al);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8039 vim_free(al);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8040 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8041 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8042
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8043 # if defined(FEAT_LISTCMDS) || defined(HAVE_DROP_FILE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8044 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8045 * Create a new argument list and use it for the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8046 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8047 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8048 alist_new(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8049 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8050 curwin->w_alist = (alist_T *)alloc((unsigned)sizeof(alist_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8051 if (curwin->w_alist == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8053 curwin->w_alist = &global_alist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8054 ++global_alist.al_refcount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8055 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8056 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8057 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8058 curwin->w_alist->al_refcount = 1;
5942
66eead134d68 updated for version 7.4.312
Bram Moolenaar <bram@vim.org>
parents: 5877
diff changeset
8059 curwin->w_alist->id = ++max_alist_id;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8060 alist_init(curwin->w_alist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8061 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8063 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8064 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8065
9536
b2aada04d84e commit https://github.com/vim/vim/commit/a06ecab7a5159e744448ace731036f0dc5f87dd4
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
8066 #if !defined(UNIX) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8067 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8068 * Expand the file names in the global argument list.
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8069 * If "fnum_list" is not NULL, use "fnum_list[fnum_len]" as a list of buffer
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8070 * numbers to be re-used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8071 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8072 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8073 alist_expand(int *fnum_list, int fnum_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8074 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8075 char_u **old_arg_files;
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8076 int old_arg_count;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8077 char_u **new_arg_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8078 int new_arg_file_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8079 char_u *save_p_su = p_su;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8080 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8081
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8082 /* Don't use 'suffixes' here. This should work like the shell did the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8083 * expansion. Also, the vimrc file isn't read yet, thus the user
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8084 * can't set the options. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8085 p_su = empty_option;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8086 old_arg_files = (char_u **)alloc((unsigned)(sizeof(char_u *) * GARGCOUNT));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8087 if (old_arg_files != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8089 for (i = 0; i < GARGCOUNT; ++i)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8090 old_arg_files[i] = vim_strsave(GARGLIST[i].ae_fname);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8091 old_arg_count = GARGCOUNT;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8092 if (expand_wildcards(old_arg_count, old_arg_files,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8093 &new_arg_file_count, &new_arg_files,
2966
aa998de9f959 updated for version 7.3.255
Bram Moolenaar <bram@vim.org>
parents: 2887
diff changeset
8094 EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8095 && new_arg_file_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8096 {
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8097 alist_set(&global_alist, new_arg_file_count, new_arg_files,
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8098 TRUE, fnum_list, fnum_len);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8099 FreeWild(old_arg_count, old_arg_files);
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8100 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8101 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8102 p_su = save_p_su;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8103 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8104 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8106 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8107 * Set the argument list for the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8108 * Takes over the allocated files[] and the allocated fnames in it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8109 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8110 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8111 alist_set(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8112 alist_T *al,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8113 int count,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8114 char_u **files,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8115 int use_curbuf,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8116 int *fnum_list,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8117 int fnum_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8118 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8119 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8121 alist_clear(al);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8122 if (ga_grow(&al->al_ga, count) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8124 for (i = 0; i < count; ++i)
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8125 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8126 if (got_int)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8127 {
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8128 /* When adding many buffers this can take a long time. Allow
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8129 * interrupting here. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8130 while (i < count)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8131 vim_free(files[i++]);
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8132 break;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8133 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8134
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8135 /* May set buffer name of a buffer previously used for the
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8136 * argument list, so that it's re-used by alist_add. */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8137 if (fnum_list != NULL && i < fnum_len)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8138 buf_set_name(fnum_list[i], files[i]);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
8139
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8140 alist_add(al, files[i], use_curbuf ? 2 : 1);
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8141 ui_breakcheck();
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
8142 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8143 vim_free(files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8145 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8146 FreeWild(count, files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8147 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8148 if (al == &global_alist)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8149 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8150 arg_had_last = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8153 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8154 * Add file "fname" to argument list "al".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8155 * "fname" must have been allocated and "al" must have been checked for room.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8156 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8157 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8158 alist_add(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8159 alist_T *al,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8160 char_u *fname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8161 int set_fnum) /* 1: set buffer number; 2: re-use curbuf */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8162 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8163 if (fname == NULL) /* don't add NULL file names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8164 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8165 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8166 slash_adjust(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8167 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8168 AARGLIST(al)[al->al_ga.ga_len].ae_fname = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8169 if (set_fnum > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8170 AARGLIST(al)[al->al_ga.ga_len].ae_fnum =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8171 buflist_add(fname, BLN_LISTED | (set_fnum == 2 ? BLN_CURBUF : 0));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8172 ++al->al_ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8174
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8175 #if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8176 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8177 * Adjust slashes in file names. Called after 'shellslash' was set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8178 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8179 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8180 alist_slash_adjust(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8182 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8183 # ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8184 win_T *wp;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
8185 tabpage_T *tp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8186 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8188 for (i = 0; i < GARGCOUNT; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8189 if (GARGLIST[i].ae_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8190 slash_adjust(GARGLIST[i].ae_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8191 # ifdef FEAT_WINDOWS
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
8192 FOR_ALL_TAB_WINDOWS(tp, wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8193 if (wp->w_alist != &global_alist)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8194 for (i = 0; i < WARGCOUNT(wp); ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8195 if (WARGLIST(wp)[i].ae_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8196 slash_adjust(WARGLIST(wp)[i].ae_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8197 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8199 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8201 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8202 * ":preserve".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8203 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8204 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8205 ex_preserve(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8206 {
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
8207 curbuf->b_flags |= BF_PRESERVED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8208 ml_preserve(curbuf, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8210
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8211 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8212 * ":recover".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8213 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8214 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8215 ex_recover(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8216 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8217 /* Set recoverymode right away to avoid the ATTENTION prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8218 recoverymode = TRUE;
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
8219 if (!check_changed(curbuf, (p_awa ? CCGD_AW : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
8220 | CCGD_MULTWIN
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
8221 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
8222 | CCGD_EXCMD)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
8223
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8224 && (*eap->arg == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8225 || setfname(curbuf, eap->arg, NULL, TRUE) == OK))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8226 ml_recover();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8227 recoverymode = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8228 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8230 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8231 * Command modifier used in a wrong way.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8232 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8233 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8234 ex_wrongmodifier(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8235 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8236 eap->errmsg = e_invcmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8237 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8239 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8240 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8241 * :sview [+command] file split window with new file, read-only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8242 * :split [[+command] file] split window with current or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8243 * :vsplit [[+command] file] split window vertically with current or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8244 * :new [[+command] file] split window with no or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8245 * :vnew [[+command] file] split vertically window with no or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8246 * :sfind [+command] file split window with file in 'path'
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8247 *
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8248 * :tabedit open new Tab page with empty window
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8249 * :tabedit [+command] file open new Tab page and edit "file"
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8250 * :tabnew [[+command] file] just like :tabedit
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8251 * :tabfind [+command] file open new Tab page and find "file"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8252 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8253 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8254 ex_splitview(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8255 {
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8256 win_T *old_curwin = curwin;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8257 # if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8258 char_u *fname = NULL;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8259 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8260 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8261 int browse_flag = cmdmod.browse;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8262 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8263
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8264 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8265 need_mouse_correct = TRUE;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8266 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8267
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8268 # ifdef FEAT_QUICKFIX
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8269 /* A ":split" in the quickfix window works like ":new". Don't want two
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8270 * quickfix windows. But it's OK when doing ":tab split". */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8271 if (bt_quickfix(curbuf) && cmdmod.tab == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8272 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8273 if (eap->cmdidx == CMD_split)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8274 eap->cmdidx = CMD_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8275 if (eap->cmdidx == CMD_vsplit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8276 eap->cmdidx = CMD_vnew;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8277 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8278 # endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8279
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8280 # ifdef FEAT_SEARCHPATH
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8281 if (eap->cmdidx == CMD_sfind || eap->cmdidx == CMD_tabfind)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8282 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8283 fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8284 FNAME_MESS, TRUE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8285 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8286 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8287 eap->arg = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8288 }
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8289 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8290 else
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8291 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8292 # endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8293 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8294 if (cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8295 && eap->cmdidx != CMD_vnew
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8296 && eap->cmdidx != CMD_new)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8297 {
1683
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1668
diff changeset
8298 # ifdef FEAT_AUTOCMD
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8299 if (
1683
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1668
diff changeset
8300 # ifdef FEAT_GUI
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8301 !gui.in_use &&
1683
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1668
diff changeset
8302 # endif
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8303 au_has_group((char_u *)"FileExplorer"))
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8304 {
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8305 /* No browsing supported but we do have the file explorer:
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8306 * Edit the directory. */
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8307 if (*eap->arg == NUL || !mch_isdir(eap->arg))
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8308 eap->arg = (char_u *)".";
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8309 }
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8310 else
1683
75dbeedddaa9 updated for version 7.2b-016
vimboss
parents: 1668
diff changeset
8311 # endif
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8312 {
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8313 fname = do_browse(0, (char_u *)_("Edit File in new window"),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8314 eap->arg, NULL, NULL, NULL, curbuf);
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8315 if (fname == NULL)
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8316 goto theend;
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8317 eap->arg = fname;
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
8318 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8320 cmdmod.browse = FALSE; /* Don't browse again in do_ecmd(). */
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8321 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8322
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8323 /*
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8324 * Either open new tab page or split the window.
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8325 */
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8326 if (eap->cmdidx == CMD_tabedit
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8327 || eap->cmdidx == CMD_tabfind
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8328 || eap->cmdidx == CMD_tabnew)
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8329 {
820
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
8330 if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
8331 : eap->addr_count == 0 ? 0
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
8332 : (int)eap->line2 + 1) != FAIL)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8333 {
1498
4845822f6a6c updated for version 7.1-213
vimboss
parents: 1496
diff changeset
8334 do_exedit(eap, old_curwin);
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8335
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8336 /* set the alternate buffer for the window we came from */
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8337 if (curwin != old_curwin
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8338 && win_valid(old_curwin)
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8339 && old_curwin->w_buffer != curbuf
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8340 && !cmdmod.keepalt)
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8341 old_curwin->w_alt_fnum = curbuf->b_fnum;
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8342 }
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8343 }
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8344 else if (win_split(eap->addr_count > 0 ? (int)eap->line2 : 0,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8345 *eap->cmd == 'v' ? WSP_VERT : 0) != FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8346 {
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8347 # ifdef FEAT_SCROLLBIND
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8348 /* Reset 'scrollbind' when editing another file, but keep it when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8349 * doing ":split" without arguments. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8350 if (*eap->arg != NUL
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8351 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8352 || cmdmod.browse
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8353 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8354 )
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
8355 {
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
8356 RESET_BINDING(curwin);
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
8357 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8358 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8359 do_check_scrollbind(FALSE);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8360 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8361 do_exedit(eap, old_curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8362 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8363
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8364 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8365 cmdmod.browse = browse_flag;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8366 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8367
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8368 # if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8369 theend:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8370 vim_free(fname);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8371 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8372 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8373
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8374 /*
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8375 * Open a new tab page.
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8376 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8377 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8378 tabpage_new(void)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8379 {
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8380 exarg_T ea;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8381
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8382 vim_memset(&ea, 0, sizeof(ea));
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8383 ea.cmdidx = CMD_tabnew;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8384 ea.cmd = (char_u *)"tabn";
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8385 ea.arg = (char_u *)"";
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8386 ex_splitview(&ea);
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8387 }
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8388
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8389 /*
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8390 * :tabnext command
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8391 */
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8392 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8393 ex_tabnext(exarg_T *eap)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8394 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8395 int tab_number;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8396
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8397 switch (eap->cmdidx)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8398 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8399 case CMD_tabfirst:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8400 case CMD_tabrewind:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8401 goto_tabpage(1);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8402 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8403 case CMD_tablast:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8404 goto_tabpage(9999);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8405 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8406 case CMD_tabprevious:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8407 case CMD_tabNext:
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8408 if (eap->arg && *eap->arg != NUL)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8409 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8410 char_u *p = eap->arg;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8411 char_u *p_save = p;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8412
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8413 tab_number = getdigits(&p);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8414 if (p == p_save || *p_save == '-' || *p != NUL
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8415 || tab_number == 0)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8416 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8417 /* No numbers as argument. */
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8418 eap->errmsg = e_invarg;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8419 return;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8420 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8421 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8422 else
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8423 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8424 if (eap->addr_count == 0)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8425 tab_number = 1;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8426 else
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8427 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8428 tab_number = eap->line2;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8429 if (tab_number < 1)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8430 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8431 eap->errmsg = e_invrange;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8432 return;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8433 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8434 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8435 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8436 goto_tabpage(-tab_number);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8437 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8438 default: /* CMD_tabnext */
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8439 tab_number = get_tabpage_arg(eap);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8440 if (eap->errmsg == NULL)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8441 goto_tabpage(tab_number);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8442 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
8443 }
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8444 }
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8445
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8446 /*
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8447 * :tabmove command
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8448 */
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8449 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8450 ex_tabmove(exarg_T *eap)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8451 {
6775
c0bc9b60fb8a patch 7.4.709
Bram Moolenaar <bram@vim.org>
parents: 6739
diff changeset
8452 int tab_number;
3662
e5b925ae56e3 updated for version 7.3.591
Bram Moolenaar <bram@vim.org>
parents: 3570
diff changeset
8453
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8454 tab_number = get_tabpage_arg(eap);
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8455 if (eap->errmsg == NULL)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
8456 tabpage_move(tab_number);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8457 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8458
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8459 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8460 * :tabs command: List tabs and their contents.
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8461 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8462 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8463 ex_tabs(exarg_T *eap UNUSED)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8464 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8465 tabpage_T *tp;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8466 win_T *wp;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8467 int tabcount = 1;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8468
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8469 msg_start();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8470 msg_scroll = TRUE;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8471 for (tp = first_tabpage; tp != NULL && !got_int; tp = tp->tp_next)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8472 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8473 msg_putchar('\n');
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8474 vim_snprintf((char *)IObuff, IOSIZE, _("Tab page %d"), tabcount++);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
8475 msg_outtrans_attr(IObuff, HL_ATTR(HLF_T));
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8476 out_flush(); /* output one line at a time */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8477 ui_breakcheck();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8478
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
8479 if (tp == curtab)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8480 wp = firstwin;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8481 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8482 wp = tp->tp_firstwin;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8483 for ( ; wp != NULL && !got_int; wp = wp->w_next)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8484 {
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8485 msg_putchar('\n');
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8486 msg_putchar(wp == curwin ? '>' : ' ');
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
8487 msg_putchar(' ');
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
8488 msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
8489 msg_putchar(' ');
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8490 if (buf_spname(wp->w_buffer) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3810
diff changeset
8491 vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8492 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8493 home_replace(wp->w_buffer, wp->w_buffer->b_fname,
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8494 IObuff, IOSIZE, TRUE);
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8495 msg_outtrans(IObuff);
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8496 out_flush(); /* output one line at a time */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8497 ui_breakcheck();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8498 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8499 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8500 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8501
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
8502 #endif /* FEAT_WINDOWS */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8504 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8505 * ":mode": Set screen mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8506 * If no argument given, just get the screen size and redraw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8507 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8508 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8509 ex_mode(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8510 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8511 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8512 shell_resized();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8513 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8514 mch_screenmode(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8517 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8518 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8519 * ":resize".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8520 * set, increment or decrement current window height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8521 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8522 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8523 ex_resize(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8525 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8526 win_T *wp = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8527
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8528 if (eap->addr_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8529 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8530 n = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8531 for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8532 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8533 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8534
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
8535 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8536 need_mouse_correct = TRUE;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
8537 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8538 n = atol((char *)eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8539 if (cmdmod.split & WSP_VERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8540 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8541 if (*eap->arg == '-' || *eap->arg == '+')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8542 n += W_WIDTH(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8543 else if (n == 0 && eap->arg[0] == NUL) /* default is very wide */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8544 n = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8545 win_setwidth_win((int)n, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8546 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8547 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8548 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8549 if (*eap->arg == '-' || *eap->arg == '+')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8550 n += curwin->w_height;
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11635
diff changeset
8551 else if (n == 0 && eap->arg[0] == NUL) /* default is very high */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8552 n = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8553 win_setheight_win((int)n, wp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8554 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8556 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8558 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8559 * ":find [+command] <file>" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8560 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8561 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8562 ex_find(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8564 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8565 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8566 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8567
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8568 fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg), FNAME_MESS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8569 TRUE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8570 if (eap->addr_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8572 /* Repeat finding the file "count" times. This matters when it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8573 * appears several times in the path. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8574 count = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8575 while (fname != NULL && --count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8577 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8578 fname = find_file_in_path(NULL, 0, FNAME_MESS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8579 FALSE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8580 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8581 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8582
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8583 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8585 eap->arg = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8586 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8587 do_exedit(eap, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8588 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8589 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8590 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8591 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8592 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8593
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8594 /*
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8595 * ":open" simulation: for now just work like ":visual".
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8596 */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8597 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8598 ex_open(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8599 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8600 regmatch_T regmatch;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8601 char_u *p;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8602
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8603 curwin->w_cursor.lnum = eap->line2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8604 beginline(BL_SOL | BL_FIX);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8605 if (*eap->arg == '/')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8606 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8607 /* ":open /pattern/": put cursor in column found with pattern */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8608 ++eap->arg;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8609 p = skip_regexp(eap->arg, '/', p_magic, NULL);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8610 *p = NUL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8611 regmatch.regprog = vim_regcomp(eap->arg, p_magic ? RE_MAGIC : 0);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8612 if (regmatch.regprog != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8613 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8614 regmatch.rm_ic = p_ic;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8615 p = ml_get_curline();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8616 if (vim_regexec(&regmatch, p, (colnr_T)0))
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
8617 curwin->w_cursor.col = (colnr_T)(regmatch.startp[0] - p);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8618 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8619 EMSG(_(e_nomatch));
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
8620 vim_regfree(regmatch.regprog);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8621 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8622 /* Move to the NUL, ignore any other arguments. */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8623 eap->arg += STRLEN(eap->arg);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8624 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8625 check_cursor();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8626
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8627 eap->cmdidx = CMD_visual;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8628 do_exedit(eap, NULL);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8629 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8630
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8631 /*
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8632 * ":edit", ":badd", ":visual".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8633 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8634 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8635 ex_edit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8636 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8637 do_exedit(eap, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8640 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8641 * ":edit <file>" command and alikes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8642 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8643 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8644 do_exedit(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8645 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8646 win_T *old_curwin) /* curwin before doing a split or NULL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8647 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8648 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8649 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8650 int need_hide;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8651 #endif
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8652 int exmode_was = exmode_active;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8654 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8655 * ":vi" command ends Ex mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8656 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8657 if (exmode_active && (eap->cmdidx == CMD_visual
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8658 || eap->cmdidx == CMD_view))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8659 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8660 exmode_active = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8661 if (*eap->arg == NUL)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8662 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8663 /* Special case: ":global/pat/visual\NLvi-commands" */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8664 if (global_busy)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8665 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8666 int rd = RedrawingDisabled;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8667 int nwr = no_wait_return;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8668 int ms = msg_scroll;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8669 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8670 int he = hold_gui_events;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8671 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8672
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8673 if (eap->nextcmd != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8674 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8675 stuffReadbuff(eap->nextcmd);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8676 eap->nextcmd = NULL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8677 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8678
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8679 if (exmode_was != EXMODE_VIM)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8680 settmode(TMODE_RAW);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8681 RedrawingDisabled = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8682 no_wait_return = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8683 need_wait_return = FALSE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8684 msg_scroll = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8685 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8686 hold_gui_events = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8687 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8688 must_redraw = CLEAR;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8689
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8690 main_loop(FALSE, TRUE);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8691
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8692 RedrawingDisabled = rd;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8693 no_wait_return = nwr;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8694 msg_scroll = ms;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8695 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8696 hold_gui_events = he;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8697 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8698 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8699 return;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8700 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8701 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8702
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8703 if ((eap->cmdidx == CMD_new
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8704 || eap->cmdidx == CMD_tabnew
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8705 || eap->cmdidx == CMD_tabedit
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
8706 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8707 || eap->cmdidx == CMD_vnew
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8708 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8709 ) && *eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8710 {
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
8711 /* ":new" or ":tabnew" without argument: edit an new empty buffer */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8712 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8713 (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
8714 ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
8715 old_curwin == NULL ? curwin : NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8716 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8717 else if ((eap->cmdidx != CMD_split
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
8718 #ifdef FEAT_WINDOWS
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8719 && eap->cmdidx != CMD_vsplit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8720 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8721 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8722 || *eap->arg != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8723 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8724 || cmdmod.browse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8725 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8726 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8727 {
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8728 #ifdef FEAT_AUTOCMD
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8729 /* Can't edit another file when "curbuf_lock" is set. Only ":edit"
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8730 * can bring us here, others are stopped earlier. */
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8731 if (*eap->arg != NUL && curbuf_locked())
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8732 return;
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
8733 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8734 n = readonlymode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8735 if (eap->cmdidx == CMD_view || eap->cmdidx == CMD_sview)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8736 readonlymode = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8737 else if (eap->cmdidx == CMD_enew)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8738 readonlymode = FALSE; /* 'readonly' doesn't make sense in an
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8739 empty buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8740 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8741 if (do_ecmd(0, (eap->cmdidx == CMD_enew ? NULL : eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8742 NULL, eap,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8743 /* ":edit" goes to first line if Vi compatible */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8744 (*eap->arg == NUL && eap->do_ecmd_lnum == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8745 && vim_strchr(p_cpo, CPO_GOTO1) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8746 ? ECMD_ONE : eap->do_ecmd_lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8747 (P_HID(curbuf) ? ECMD_HIDE : 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8748 + (eap->forceit ? ECMD_FORCEIT : 0)
5741
f069a3a0f844 updated for version 7.4.215
Bram Moolenaar <bram@vim.org>
parents: 5737
diff changeset
8749 /* after a split we can use an existing buffer */
f069a3a0f844 updated for version 7.4.215
Bram Moolenaar <bram@vim.org>
parents: 5737
diff changeset
8750 + (old_curwin != NULL ? ECMD_OLDBUF : 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8751 #ifdef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8752 + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8753 #endif
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
8754 , old_curwin == NULL ? curwin : NULL) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8755 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8756 /* Editing the file failed. If the window was split, close it. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8757 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8758 if (old_curwin != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8760 need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8761 if (!need_hide || P_HID(curbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8762 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8763 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8764 cleanup_T cs;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8765
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8766 /* Reset the error/interrupt/exception state here so that
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8767 * aborting() returns FALSE when closing a window. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8768 enter_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8769 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8770 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8771 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8772 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8773 win_close(curwin, !need_hide && !P_HID(curbuf));
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8774
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8775 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8776 /* Restore the error/interrupt/exception state if not
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8777 * discarded by a new aborting error, interrupt, or
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8778 * uncaught exception. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8779 leave_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
8780 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8781 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8783 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8784 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8785 else if (readonlymode && curbuf->b_nwindows == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8786 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8787 /* When editing an already visited buffer, 'readonly' won't be set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8788 * but the previous value is kept. With ":view" and ":sview" we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8789 * want the file to be readonly, except when another window is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8790 * editing the same buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8791 curbuf->b_p_ro = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8792 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8793 readonlymode = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8795 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8796 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8797 if (eap->do_ecmd_cmd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8798 do_cmdline_cmd(eap->do_ecmd_cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8799 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8800 n = curwin->w_arg_idx_invalid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8801 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8802 check_arg_idx(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8803 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8804 if (n != curwin->w_arg_idx_invalid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8805 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8806 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8807 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8808
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8809 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8810 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8811 * if ":split file" worked, set alternate file name in old window to new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8812 * file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8813 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8814 if (old_curwin != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8815 && *eap->arg != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8816 && curwin != old_curwin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8817 && win_valid(old_curwin)
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
8818 && old_curwin->w_buffer != curbuf
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
8819 && !cmdmod.keepalt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8820 old_curwin->w_alt_fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8821 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8822
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8823 ex_no_reprint = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8825
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8826 #ifndef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8827 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8828 * ":gui" and ":gvim" when there is no GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8829 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8830 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8831 ex_nogui(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8833 eap->errmsg = e_nogvim;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8834 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8835 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8837 #if defined(FEAT_GUI_W32) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8838 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8839 ex_tearoff(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8840 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8841 gui_make_tearoff(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8842 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8843 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8844
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
8845 #if (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_GTK)) && defined(FEAT_MENU)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8846 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8847 ex_popup(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8848 {
398
d5dbe17efce2 updated for version 7.0105
vimboss
parents: 372
diff changeset
8849 gui_make_popup(eap->arg, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8850 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8851 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8852
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8853 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8854 ex_swapname(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8855 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8856 if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8857 MSG(_("No swap file"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8858 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8859 msg(curbuf->b_ml.ml_mfp->mf_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8860 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8861
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8862 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8863 * ":syncbind" forces all 'scrollbind' windows to have the same relative
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8864 * offset.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8865 * (1998-11-02 16:21:01 R. Edward Ralston <eralston@computer.org>)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8866 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8867 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8868 ex_syncbind(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8869 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8870 #ifdef FEAT_SCROLLBIND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8871 win_T *wp;
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8872 win_T *save_curwin = curwin;
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8873 buf_T *save_curbuf = curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8874 long topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8875 long y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8876 linenr_T old_linenr = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8877
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8878 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8879
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8880 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8881 * determine max topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8882 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8883 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8884 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8885 topline = curwin->w_topline;
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
8886 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8887 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8888 if (wp->w_p_scb && wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8889 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8890 y = wp->w_buffer->b_ml.ml_line_count - p_so;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8891 if (topline > y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8892 topline = y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8893 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8894 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8895 if (topline < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8896 topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8897 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8898 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8899 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8900 topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8901 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8903
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8904 /*
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8905 * Set all scrollbind windows to the same topline.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8906 */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
8907 FOR_ALL_WINDOWS(curwin)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8908 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8909 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8910 {
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8911 curbuf = curwin->w_buffer;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8912 y = topline - curwin->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8913 if (y > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8914 scrollup(y, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8915 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8916 scrolldown(-y, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8917 curwin->w_scbind_pos = topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8918 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8919 cursor_correct();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8920 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8921 curwin->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8922 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8923 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8924 }
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8925 curwin = save_curwin;
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
8926 curbuf = save_curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8927 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8928 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8929 did_syncbind = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8930 checkpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8931 if (old_linenr != curwin->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8932 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8933 char_u ctrl_o[2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8934
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8935 ctrl_o[0] = Ctrl_O;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8936 ctrl_o[1] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8937 ins_typebuf(ctrl_o, REMAP_NONE, 0, TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8938 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8939 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8940 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8941 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8943
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8944 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8945 ex_read(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8946 {
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8947 int i;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8948 int empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8949 linenr_T lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8950
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8951 if (eap->usefilter) /* :r!cmd */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8952 do_bang(1, eap, FALSE, FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8953 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8955 if (u_save(eap->line2, (linenr_T)(eap->line2 + 1)) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8956 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8957
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8958 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8959 if (cmdmod.browse)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8960 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8961 char_u *browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8962
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
8963 browseFile = do_browse(0, (char_u *)_("Append File"), eap->arg,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8964 NULL, NULL, NULL, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8965 if (browseFile != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8967 i = readfile(browseFile, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8968 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8969 vim_free(browseFile);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8970 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8971 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8972 i = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8973 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8974 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8975 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8976 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8977 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8978 if (check_fname() == FAIL) /* check for no file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8979 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8980 i = readfile(curbuf->b_ffname, curbuf->b_fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8981 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8983 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8984 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8985 if (vim_strchr(p_cpo, CPO_ALTREAD) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8986 (void)setaltfname(eap->arg, eap->arg, (linenr_T)1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8987 i = readfile(eap->arg, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8988 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8989
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8990 }
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10520
diff changeset
8991 if (i != OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8992 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8993 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8994 if (!aborting())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8995 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8996 EMSG2(_(e_notopen), eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8997 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8998 else
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8999 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9000 if (empty && exmode_active)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9001 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9002 /* Delete the empty line that remains. Historically ex does
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9003 * this but vi doesn't. */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9004 if (eap->line2 == 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9005 lnum = curbuf->b_ml.ml_line_count;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9006 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9007 lnum = 1;
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9008 if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9009 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9010 ml_delete(lnum, FALSE);
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9011 if (curwin->w_cursor.lnum > 1
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9012 && curwin->w_cursor.lnum >= lnum)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9013 --curwin->w_cursor.lnum;
1929
9230c45fdde6 updated for version 7.2-226
vimboss
parents: 1926
diff changeset
9014 deleted_lines_mark(lnum, 1L);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9015 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9016 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9017 redraw_curbuf_later(VALID);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9018 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9019 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9020 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9021
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9022 static char_u *prev_dir = NULL;
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9023
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9024 #if defined(EXITFREE) || defined(PROTO)
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9025 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9026 free_cd_dir(void)
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9027 {
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9028 vim_free(prev_dir);
1471
e980e93d2ac2 updated for version 7.1-186
vimboss
parents: 1467
diff changeset
9029 prev_dir = NULL;
1837
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
9030
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
9031 vim_free(globaldir);
cf080795d202 updated for version 7.2-135
vimboss
parents: 1830
diff changeset
9032 globaldir = NULL;
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9033 }
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9034 #endif
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9035
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9036 /*
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9037 * Deal with the side effects of changing the current directory.
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9038 * When "local" is TRUE then this was after an ":lcd" command.
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9039 */
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9040 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9041 post_chdir(int local)
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9042 {
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9043 vim_free(curwin->w_localdir);
5584
c8c80c9d2e22 updated for version 7.4.139
Bram Moolenaar <bram@vim.org>
parents: 5566
diff changeset
9044 curwin->w_localdir = NULL;
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9045 if (local)
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9046 {
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9047 /* If still in global directory, need to remember current
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9048 * directory as global directory. */
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9049 if (globaldir == NULL && prev_dir != NULL)
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9050 globaldir = vim_strsave(prev_dir);
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9051 /* Remember this local directory for the window. */
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9052 if (mch_dirname(NameBuff, MAXPATHL) == OK)
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9053 curwin->w_localdir = vim_strsave(NameBuff);
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9054 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9055 else
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9056 {
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9057 /* We are now in the global directory, no need to remember its
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9058 * name. */
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9059 vim_free(globaldir);
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9060 globaldir = NULL;
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9061 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9062
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9063 shorten_fnames(TRUE);
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9064 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9065
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
9066
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9067 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9068 * ":cd", ":lcd", ":chdir" and ":lchdir".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9069 */
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1408
diff changeset
9070 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9071 ex_cd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9072 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9073 char_u *new_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9074 char_u *tofree;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9076 new_dir = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9077 #if !defined(UNIX) && !defined(VMS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9078 /* for non-UNIX ":cd" means: print current directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9079 if (*new_dir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9080 ex_pwd(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9081 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9082 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9083 {
1838
d66394147eea updated for version 7.2-136
vimboss
parents: 1837
diff changeset
9084 #ifdef FEAT_AUTOCMD
d66394147eea updated for version 7.2-136
vimboss
parents: 1837
diff changeset
9085 if (allbuf_locked())
d66394147eea updated for version 7.2-136
vimboss
parents: 1837
diff changeset
9086 return;
d66394147eea updated for version 7.2-136
vimboss
parents: 1837
diff changeset
9087 #endif
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9088 if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9089 && !eap->forceit)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9090 {
1441
21b11491a33f updated for version 7.1-156
vimboss
parents: 1427
diff changeset
9091 EMSG(_("E747: Cannot change directory, buffer is modified (add ! to override)"));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9092 return;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9093 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9094
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9095 /* ":cd -": Change to previous directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9096 if (STRCMP(new_dir, "-") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9098 if (prev_dir == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9099 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9100 EMSG(_("E186: No previous directory"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9101 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9102 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9103 new_dir = prev_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9104 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9106 /* Save current directory for next ":cd -" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9107 tofree = prev_dir;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9108 if (mch_dirname(NameBuff, MAXPATHL) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9109 prev_dir = vim_strsave(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9110 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9111 prev_dir = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9113 #if defined(UNIX) || defined(VMS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9114 /* for UNIX ":cd" means: go to home directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9115 if (*new_dir == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9116 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9117 /* use NameBuff for home directory name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9118 # ifdef VMS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9119 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9121 p = mch_getenv((char_u *)"SYS$LOGIN");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9122 if (p == NULL || *p == NUL) /* empty is the same as not set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9123 NameBuff[0] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9124 else
416
3da34f87c760 updated for version 7.0109
vimboss
parents: 406
diff changeset
9125 vim_strncpy(NameBuff, p, MAXPATHL - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9126 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9127 expand_env((char_u *)"$HOME", NameBuff, MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9128 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9129 new_dir = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9130 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9131 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9132 if (new_dir == NULL || vim_chdir(new_dir))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9133 EMSG(_(e_failed));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9134 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9135 {
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
9136 post_chdir(eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9138 /* Echo the new current directory if the command was typed. */
1930
89d1e8ed6c1d updated for version 7.2-227
vimboss
parents: 1929
diff changeset
9139 if (KeyTyped || p_verbose >= 5)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9140 ex_pwd(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9142 vim_free(tofree);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9143 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9146 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9147 * ":pwd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9148 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9149 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9150 ex_pwd(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9152 if (mch_dirname(NameBuff, MAXPATHL) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9153 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9154 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9155 slash_adjust(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9156 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9157 msg(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9159 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9160 EMSG(_("E187: Unknown"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9163 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9164 * ":=".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9165 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9166 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9167 ex_equal(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9169 smsg((char_u *)"%ld", (long)eap->line2);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9170 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9172
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9173 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9174 ex_sleep(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9175 {
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9176 int n;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9177 long len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9178
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9179 if (cursor_valid())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9180 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9181 n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9182 if (n >= 0)
5645
4e3a9dd25d42 updated for version 7.4.169
Bram Moolenaar <bram@vim.org>
parents: 5584
diff changeset
9183 windgoto((int)n, W_WINCOL(curwin) + curwin->w_wcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9184 }
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9185
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9186 len = eap->line2;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9187 switch (*eap->arg)
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9188 {
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9189 case 'm': break;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9190 case NUL: len *= 1000L; break;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9191 default: EMSG2(_(e_invarg2), eap->arg); return;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9192 }
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
9193 do_sleep(len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9195
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9196 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9197 * Sleep for "msec" milliseconds, but keep checking for a CTRL-C every second.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9198 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9199 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9200 do_sleep(long msec)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9202 long done;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9203 long wait_now;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9204
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9205 cursor_on();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9206 out_flush();
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9207 for (done = 0; !got_int && done < msec; done += wait_now)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9208 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9209 wait_now = msec - done > 1000L ? 1000L : msec - done;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9210 #ifdef FEAT_TIMERS
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9211 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9212 long due_time = check_due_timer();
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9213
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9214 if (due_time > 0 && due_time < wait_now)
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9215 wait_now = due_time;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9216 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9217 #endif
10240
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9218 #ifdef FEAT_JOB_CHANNEL
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9219 if (has_any_channel() && wait_now > 100L)
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9220 wait_now = 100L;
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9221 #endif
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
9222 ui_delay(wait_now, TRUE);
10240
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9223 #ifdef FEAT_JOB_CHANNEL
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9224 if (has_any_channel())
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9225 ui_breakcheck_force(TRUE);
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9226 else
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9227 #endif
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
9228 ui_breakcheck();
7109
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
9229 #ifdef MESSAGE_QUEUE
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
9230 /* Process the netbeans and clientserver messages that may have been
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
9231 * received in the call to ui_breakcheck() when the GUI is in use. This
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
9232 * may occur when running a test case. */
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
9233 parse_queued_messages();
3151
af76a61a7f79 updated for version 7.3.346
Bram Moolenaar <bram@vim.org>
parents: 3116
diff changeset
9234 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9235 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9236 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9238 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9239 do_exmap(exarg_T *eap, int isabbrev)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9240 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9241 int mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9242 char_u *cmdp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9244 cmdp = eap->cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9245 mode = get_map_mode(&cmdp, eap->forceit || isabbrev);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9247 switch (do_map((*cmdp == 'n') ? 2 : (*cmdp == 'u'),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9248 eap->arg, mode, isabbrev))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9249 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9250 case 1: EMSG(_(e_invarg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9251 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9252 case 2: EMSG(isabbrev ? _(e_noabbr) : _(e_nomap));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9253 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9254 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9257 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9258 * ":winsize" command (obsolete).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9259 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9260 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9261 ex_winsize(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9262 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9263 int w, h;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9264 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9265 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9267 w = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9268 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9269 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9270 h = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9271 if (*p != NUL && *arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9272 set_shellsize(w, h, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9273 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9274 EMSG(_("E465: :winsize requires two number arguments"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9275 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9277 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9278 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9279 ex_wincmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9281 int xchar = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9282 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9284 if (*eap->arg == 'g' || *eap->arg == Ctrl_G)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9285 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9286 /* CTRL-W g and CTRL-W CTRL-G have an extra command character */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9287 if (eap->arg[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9289 EMSG(_(e_invarg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9290 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9291 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9292 xchar = eap->arg[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9293 p = eap->arg + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9294 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9295 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9296 p = eap->arg + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9298 eap->nextcmd = check_nextcmd(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9299 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9300 if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9301 EMSG(_(e_invarg));
2887
15705b520c29 updated for version 7.3.217
Bram Moolenaar <bram@vim.org>
parents: 2853
diff changeset
9302 else if (!eap->skip)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9304 /* Pass flags on for ":vertical wincmd ]". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9305 postponed_split_flags = cmdmod.split;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
9306 postponed_split_tab = cmdmod.tab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9307 do_window(*eap->arg, eap->addr_count > 0 ? eap->line2 : 0L, xchar);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9308 postponed_split_flags = 0;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
9309 postponed_split_tab = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9312 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9313
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9314 #if defined(FEAT_GUI) || defined(UNIX) || defined(VMS) || defined(MSWIN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9315 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9316 * ":winpos".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9317 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9318 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9319 ex_winpos(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9320 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9321 int x, y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9322 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9323 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9324
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9325 if (*arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9326 {
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9327 # if defined(FEAT_GUI) || defined(MSWIN)
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9328 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9329 if (gui.in_use && gui_mch_get_winpos(&x, &y) != FAIL)
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9330 # else
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9331 if (mch_get_winpos(&x, &y) != FAIL)
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9332 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9333 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9334 sprintf((char *)IObuff, _("Window position: X %d, Y %d"), x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9335 msg(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9336 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9337 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9338 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9339 EMSG(_("E188: Obtaining window position not implemented for this platform"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9340 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9341 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9342 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9343 x = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9344 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9345 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9346 y = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9347 if (*p == NUL || *arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9349 EMSG(_("E466: :winpos requires two number arguments"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9350 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9352 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9353 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9354 gui_mch_set_winpos(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9355 else if (gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9356 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9357 /* Remember the coordinates for when the window is opened. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9358 gui_win_x = x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9359 gui_win_y = y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9360 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9361 # ifdef HAVE_TGETENT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9362 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9363 # endif
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9364 # else
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9365 # ifdef MSWIN
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9366 mch_set_winpos(x, y);
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
9367 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9368 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9369 # ifdef HAVE_TGETENT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9370 if (*T_CWP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9371 term_set_winpos(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9372 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9373 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9374 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9375 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9377 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9378 * Handle command that work like operators: ":delete", ":yank", ":>" and ":<".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9379 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9380 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9381 ex_operators(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9383 oparg_T oa;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9385 clear_oparg(&oa);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9386 oa.regname = eap->regname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9387 oa.start.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9388 oa.end.lnum = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9389 oa.line_count = eap->line2 - eap->line1 + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9390 oa.motion_type = MLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9391 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9392 virtual_op = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9393 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9394 if (eap->cmdidx != CMD_yank) /* position cursor for undo */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9395 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9396 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9397 curwin->w_cursor.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9398 beginline(BL_SOL | BL_FIX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9400
5498
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
9401 if (VIsual_active)
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
9402 end_visual_mode();
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
9403
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9404 switch (eap->cmdidx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9405 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9406 case CMD_delete:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9407 oa.op_type = OP_DELETE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9408 op_delete(&oa);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9409 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9410
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9411 case CMD_yank:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9412 oa.op_type = OP_YANK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9413 (void)op_yank(&oa, FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9414 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9415
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9416 default: /* CMD_rshift or CMD_lshift */
4889
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9417 if (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9418 #ifdef FEAT_RIGHTLEFT
4889
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9419 (eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9420 #else
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9421 eap->cmdidx == CMD_rshift
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9422 #endif
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
9423 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9424 oa.op_type = OP_RSHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9425 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9426 oa.op_type = OP_LSHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9427 op_shift(&oa, FALSE, eap->amount);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9428 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9429 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9430 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9431 virtual_op = MAYBE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9432 #endif
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9433 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9434 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9436 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9437 * ":put".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9438 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9439 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9440 ex_put(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9442 /* ":0put" works like ":1put!". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9443 if (eap->line2 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9444 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9445 eap->line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9446 eap->forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9447 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9448 curwin->w_cursor.lnum = eap->line2;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9449 do_put(eap->regname, eap->forceit ? BACKWARD : FORWARD, 1L,
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9450 PUT_LINE|PUT_CURSLINE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9452
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9453 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9454 * Handle ":copy" and ":move".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9455 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9456 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9457 ex_copymove(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9458 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9459 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9460
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
9461 n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE, 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9462 if (eap->arg == NULL) /* error detected */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9463 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9464 eap->nextcmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9465 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9466 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9467 get_flags(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9469 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9470 * move or copy lines from 'eap->line1'-'eap->line2' to below line 'n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9471 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9472 if (n == MAXLNUM || n < 0 || n > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9473 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9474 EMSG(_(e_invaddr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9475 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9476 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9478 if (eap->cmdidx == CMD_move)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9480 if (do_move(eap->line1, eap->line2, n) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9481 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9483 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9484 ex_copy(eap->line1, eap->line2, n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9485 u_clearline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9486 beginline(BL_SOL | BL_FIX);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9487 ex_may_print(eap);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9488 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9489
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9490 /*
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9491 * Print the current line if flags were given to the Ex command.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9492 */
5776
845608965bd9 updated for version 7.4.232
Bram Moolenaar <bram@vim.org>
parents: 5741
diff changeset
9493 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9494 ex_may_print(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9495 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9496 if (eap->flags != 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9497 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9498 print_line(curwin->w_cursor.lnum, (eap->flags & EXFLAG_NR),
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9499 (eap->flags & EXFLAG_LIST));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9500 ex_no_reprint = TRUE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9501 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9504 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9505 * ":smagic" and ":snomagic".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9506 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9507 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9508 ex_submagic(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9509 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9510 int magic_save = p_magic;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9511
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9512 p_magic = (eap->cmdidx == CMD_smagic);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9513 do_sub(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9514 p_magic = magic_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9517 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9518 * ":join".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9519 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9520 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9521 ex_join(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9523 curwin->w_cursor.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9524 if (eap->line1 == eap->line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9525 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9526 if (eap->addr_count >= 2) /* :2,2join does nothing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9527 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9528 if (eap->line2 == curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9529 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9530 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9531 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9532 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9533 ++eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9534 }
5848
75f222d67cea updated for version 7.4.267
Bram Moolenaar <bram@vim.org>
parents: 5790
diff changeset
9535 (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9536 beginline(BL_WHITE | BL_FIX);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9537 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9540 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9541 * ":[addr]@r" or ":[addr]*r": execute register
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9542 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9543 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9544 ex_at(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9546 int c;
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
9547 int prev_len = typebuf.tb_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9548
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9549 curwin->w_cursor.lnum = eap->line2;
10184
4669440016f2 commit https://github.com/vim/vim/commit/4930a76a0357f76a829eafe4985d04cf3ce0e9e0
Christian Brabandt <cb@256bit.org>
parents: 10106
diff changeset
9550 check_cursor_col();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9551
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9552 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9553 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9554 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9555
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9556 /* get the register name. No name means to use the previous one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9557 c = *eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9558 if (c == NUL || (c == '*' && *eap->cmd == '*'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9559 c = '@';
1034
98d1c149be76 updated for version 7.0-160
vimboss
parents: 1021
diff changeset
9560 /* Put the register in the typeahead buffer with the "silent" flag. */
98d1c149be76 updated for version 7.0-160
vimboss
parents: 1021
diff changeset
9561 if (do_execreg(c, TRUE, vim_strchr(p_cpo, CPO_EXECBUF) != NULL, TRUE)
98d1c149be76 updated for version 7.0-160
vimboss
parents: 1021
diff changeset
9562 == FAIL)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9563 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9564 beep_flush();
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9565 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9566 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9567 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9568 int save_efr = exec_from_reg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9569
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9570 exec_from_reg = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9572 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9573 * Execute from the typeahead buffer.
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
9574 * Continue until the stuff buffer is empty and all added characters
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
9575 * have been consumed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9576 */
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
9577 while (!stuff_empty() || typebuf.tb_len > prev_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9578 (void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9580 exec_from_reg = save_efr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9581 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9582 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9583
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9584 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9585 * ":!".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9586 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9587 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9588 ex_bang(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9589 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9590 do_bang(eap->addr_count, eap, eap->forceit, TRUE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9591 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9593 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9594 * ":undo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9595 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9596 static void
8368
db2a07b710ed commit https://github.com/vim/vim/commit/f1d2501ebe33e148886c2914acd33140e20ee222
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
9597 ex_undo(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9598 {
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 756
diff changeset
9599 if (eap->addr_count == 1) /* :undo 123 */
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9600 undo_time(eap->line2, FALSE, FALSE, TRUE);
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 756
diff changeset
9601 else
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 756
diff changeset
9602 u_undo(1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9603 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9604
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9605 #ifdef FEAT_PERSISTENT_UNDO
2340
99c1eba60b2d Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents: 2333
diff changeset
9606 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9607 ex_wundo(exarg_T *eap)
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9608 {
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9609 char_u hash[UNDO_HASH_SIZE];
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9610
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9611 u_compute_hash(hash);
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9612 u_write_undo(eap->arg, eap->forceit, curbuf, hash);
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9613 }
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9614
2340
99c1eba60b2d Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents: 2333
diff changeset
9615 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9616 ex_rundo(exarg_T *eap)
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9617 {
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9618 char_u hash[UNDO_HASH_SIZE];
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9619
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9620 u_compute_hash(hash);
2238
3d0a7beb0d75 Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
9621 u_read_undo(eap->arg, hash, NULL);
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9622 }
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9623 #endif
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
9624
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9625 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9626 * ":redo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9627 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9628 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9629 ex_redo(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9631 u_redo(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9632 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9634 /*
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9635 * ":earlier" and ":later".
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9636 */
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9637 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9638 ex_later(exarg_T *eap)
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9639 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9640 long count = 0;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9641 int sec = FALSE;
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9642 int file = FALSE;
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9643 char_u *p = eap->arg;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9644
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9645 if (*p == NUL)
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9646 count = 1;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9647 else if (isdigit(*p))
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9648 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9649 count = getdigits(&p);
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9650 switch (*p)
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9651 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9652 case 's': ++p; sec = TRUE; break;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9653 case 'm': ++p; sec = TRUE; count *= 60; break;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9654 case 'h': ++p; sec = TRUE; count *= 60 * 60; break;
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9655 case 'd': ++p; sec = TRUE; count *= 24 * 60 * 60; break;
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9656 case 'f': ++p; file = TRUE; break;
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9657 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9658 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9659
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9660 if (*p != NUL)
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9661 EMSG2(_(e_invarg2), eap->arg);
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9662 else
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9663 undo_time(eap->cmdidx == CMD_earlier ? -count : count,
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
9664 sec, file, FALSE);
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9665 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9666
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
9667 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9668 * ":redir": start/stop redirection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9669 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9670 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9671 ex_redir(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9672 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9673 char *mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9674 char_u *fname;
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9675 char_u *arg = eap->arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9676
9440
73c0d07cc15e commit https://github.com/vim/vim/commit/ba768495c2e6bae74e49d22d489fbf211ecad55e
Christian Brabandt <cb@256bit.org>
parents: 9438
diff changeset
9677 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9440
diff changeset
9678 if (redir_execute)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9440
diff changeset
9679 {
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9440
diff changeset
9680 EMSG(_("E930: Cannot use :redir inside execute()"));
9438
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
9681 return;
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
9682 }
9440
73c0d07cc15e commit https://github.com/vim/vim/commit/ba768495c2e6bae74e49d22d489fbf211ecad55e
Christian Brabandt <cb@256bit.org>
parents: 9438
diff changeset
9683 #endif
9438
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
9684
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9685 if (STRICMP(eap->arg, "END") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9686 close_redir();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9687 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9688 {
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9689 if (*arg == '>')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9690 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9691 ++arg;
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9692 if (*arg == '>')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9693 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9694 ++arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9695 mode = "a";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9696 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9697 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9698 mode = "w";
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9699 arg = skipwhite(arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9700
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9701 close_redir();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9702
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9703 /* Expand environment variables and "~/". */
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9704 fname = expand_env_save(arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9705 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9706 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9707 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9708 if (cmdmod.browse)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9709 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9710 char_u *browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9711
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
9712 browseFile = do_browse(BROWSE_SAVE,
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
9713 (char_u *)_("Save Redirection"),
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
9714 fname, NULL, NULL, BROWSE_FILTER_ALL_FILES, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9715 if (browseFile == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9716 return; /* operation cancelled */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9717 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9718 fname = browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9719 eap->forceit = TRUE; /* since dialog already asked */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9721 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9723 redir_fd = open_exfile(fname, eap->forceit, mode);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9724 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9725 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9726 #ifdef FEAT_EVAL
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9727 else if (*arg == '@')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9728 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9729 /* redirect to a register a-z (resp. A-Z for appending) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9730 close_redir();
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9731 ++arg;
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9732 if (ASCII_ISALPHA(*arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9733 # ifdef FEAT_CLIPBOARD
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9734 || *arg == '*'
1038
777d5460622d updated for version 7.0-164
vimboss
parents: 1034
diff changeset
9735 || *arg == '+'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9736 # endif
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9737 || *arg == '"')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9738 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9739 redir_reg = *arg++;
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9740 if (*arg == '>' && arg[1] == '>') /* append */
268
8e3c690f1f3c updated for version 7.0072
vimboss
parents: 236
diff changeset
9741 arg += 2;
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9742 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9743 {
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9744 /* Can use both "@a" and "@a>". */
296
00b73c762d77 updated for version 7.0078
vimboss
parents: 291
diff changeset
9745 if (*arg == '>')
00b73c762d77 updated for version 7.0078
vimboss
parents: 291
diff changeset
9746 arg++;
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9747 /* Make register empty when not using @A-@Z and the
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9748 * command is valid. */
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9749 if (*arg == NUL && !isupper(redir_reg))
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
9750 write_reg_contents(redir_reg, (char_u *)"", -1, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9751 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9752 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9753 if (*arg != NUL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9754 {
268
8e3c690f1f3c updated for version 7.0072
vimboss
parents: 236
diff changeset
9755 redir_reg = 0;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9756 EMSG2(_(e_invarg2), eap->arg);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9757 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9758 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9759 else if (*arg == '=' && arg[1] == '>')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9760 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9761 int append;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9762
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9763 /* redirect to a variable */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9764 close_redir();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9765 arg += 2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9766
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9767 if (*arg == '>')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9768 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9769 ++arg;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9770 append = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9771 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9772 else
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9773 append = FALSE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9774
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9775 if (var_redir_start(skipwhite(arg), append) == OK)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9776 redir_vname = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9777 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9778 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9780 /* TODO: redirect to a buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9781
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9782 else
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
9783 EMSG2(_(e_invarg2), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9784 }
972
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9785
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9786 /* Make sure redirection is not off. Can happen for cmdline completion
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9787 * that indirectly invokes a command to catch its output. */
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9788 if (redir_fd != NULL
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9789 #ifdef FEAT_EVAL
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9790 || redir_reg || redir_vname
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9791 #endif
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9792 )
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
9793 redir_off = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9796 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9797 * ":redraw": force redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9798 */
7864
6b0891de44a9 commit https://github.com/vim/vim/commit/fb1f62691eae7c79a28b3b17a60e72ce198c71a2
Christian Brabandt <cb@256bit.org>
parents: 7850
diff changeset
9799 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9800 ex_redraw(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9801 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9802 int r = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9803 int p = p_lz;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9805 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9806 p_lz = FALSE;
11010
c004e17fa36b patch 8.0.0394: tabs are not aligned when scrolling horizontally
Christian Brabandt <cb@256bit.org>
parents: 10952
diff changeset
9807 validate_cursor();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9808 update_topline();
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5720
diff changeset
9809 update_screen(eap->forceit ? CLEAR : VIsual_active ? INVERTED : 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9810 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9811 if (need_maketitle)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9812 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9813 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9814 RedrawingDisabled = r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9815 p_lz = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9816
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9817 /* Reset msg_didout, so that a message that's there is overwritten. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9818 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9819 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9820
5198
1b89e3f916c5 updated for version 7.4a.025
Bram Moolenaar <bram@vim.org>
parents: 4928
diff changeset
9821 /* No need to wait after an intentional redraw. */
1b89e3f916c5 updated for version 7.4a.025
Bram Moolenaar <bram@vim.org>
parents: 4928
diff changeset
9822 need_wait_return = FALSE;
1b89e3f916c5 updated for version 7.4a.025
Bram Moolenaar <bram@vim.org>
parents: 4928
diff changeset
9823
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9824 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9825 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9827 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9828 * ":redrawstatus": force redraw of status line(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9829 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9830 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9831 ex_redrawstatus(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9833 #if defined(FEAT_WINDOWS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9834 int r = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9835 int p = p_lz;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9837 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9838 p_lz = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9839 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9840 status_redraw_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9841 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9842 status_redraw_curbuf();
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5720
diff changeset
9843 update_screen(VIsual_active ? INVERTED : 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9844 RedrawingDisabled = r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9845 p_lz = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9846 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9847 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9848 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9849
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9850 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9851 close_redir(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9852 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9853 if (redir_fd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9854 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9855 fclose(redir_fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9856 redir_fd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9858 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9859 redir_reg = 0;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9860 if (redir_vname)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9861 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9862 var_redir_stop();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9863 redir_vname = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9864 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9865 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9868 #if defined(FEAT_SESSION) && defined(USE_CRNL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9869 # define MKSESSION_NL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9870 static int mksession_nl = FALSE; /* use NL only in put_eol() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9871 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9872
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9873 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9874 * ":mkexrc", ":mkvimrc", ":mkview" and ":mksession".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9875 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9876 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9877 ex_mkrc(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9878 exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9879 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9880 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9881 int failed = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9882 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9883 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9884 char_u *browseFile = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9885 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9886 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9887 int view_session = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9888 int using_vdir = FALSE; /* using 'viewdir'? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9889 char_u *viewFile = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9890 unsigned *flagp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9891 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9892
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9893 if (eap->cmdidx == CMD_mksession || eap->cmdidx == CMD_mkview)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9894 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9895 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9896 view_session = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9897 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9898 ex_ni(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9899 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9900 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9901 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9903 #ifdef FEAT_SESSION
1925
cdfc3897c895 updated for version 7.2-222
vimboss
parents: 1880
diff changeset
9904 /* Use the short file name until ":lcd" is used. We also don't use the
cdfc3897c895 updated for version 7.2-222
vimboss
parents: 1880
diff changeset
9905 * short file name when 'acd' is set, that is checked later. */
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
9906 did_lcd = FALSE;
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
9907
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9908 /* ":mkview" or ":mkview 9": generate file name with 'viewdir' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9909 if (eap->cmdidx == CMD_mkview
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9910 && (*eap->arg == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9911 || (vim_isdigit(*eap->arg) && eap->arg[1] == NUL)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9912 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9913 eap->forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9914 fname = get_view_file(*eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9915 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9916 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9917 viewFile = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9918 using_vdir = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9920 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9921 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9922 if (*eap->arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9923 fname = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9924 else if (eap->cmdidx == CMD_mkvimrc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9925 fname = (char_u *)VIMRC_FILE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9926 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9927 else if (eap->cmdidx == CMD_mksession)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9928 fname = (char_u *)SESSION_FILE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9929 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9930 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9931 fname = (char_u *)EXRC_FILE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9933 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9934 if (cmdmod.browse)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9935 {
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
9936 browseFile = do_browse(BROWSE_SAVE,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9937 # ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9938 eap->cmdidx == CMD_mkview ? (char_u *)_("Save View") :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9939 eap->cmdidx == CMD_mksession ? (char_u *)_("Save Session") :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9940 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9941 (char_u *)_("Save Setup"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9942 fname, (char_u *)"vim", NULL, BROWSE_FILTER_MACROS, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9943 if (browseFile == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9944 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9945 fname = browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9946 eap->forceit = TRUE; /* since dialog already asked */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9947 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9948 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9949
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9950 #if defined(FEAT_SESSION) && defined(vim_mkdir)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9951 /* When using 'viewdir' may have to create the directory. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9952 if (using_vdir && !mch_isdir(p_vdir))
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
9953 vim_mkdir_emsg(p_vdir, 0755);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9954 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9956 fd = open_exfile(fname, eap->forceit, WRITEBIN);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9957 if (fd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9958 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9959 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9960 if (eap->cmdidx == CMD_mkview)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9961 flagp = &vop_flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9962 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9963 flagp = &ssop_flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9964 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9965
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9966 #ifdef MKSESSION_NL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9967 /* "unix" in 'sessionoptions': use NL line separator */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9968 if (view_session && (*flagp & SSOP_UNIX))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9969 mksession_nl = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9970 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9972 /* Write the version command for :mkvimrc */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9973 if (eap->cmdidx == CMD_mkvimrc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9974 (void)put_line(fd, "version 6.0");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9975
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9976 #ifdef FEAT_SESSION
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9977 if (eap->cmdidx == CMD_mksession)
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9978 {
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9979 if (put_line(fd, "let SessionLoad = 1") == FAIL)
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9980 failed = TRUE;
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9981 }
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
9982
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9983 if (eap->cmdidx != CMD_mkview)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9984 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9985 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9986 /* Write setting 'compatible' first, because it has side effects.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9987 * For that same reason only do it when needed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9988 if (p_cp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9989 (void)put_line(fd, "if !&cp | set cp | endif");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9990 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9991 (void)put_line(fd, "if &cp | set nocp | endif");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9994 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9995 if (!view_session
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9996 || (eap->cmdidx == CMD_mksession
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9997 && (*flagp & SSOP_OPTIONS)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9998 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9999 failed |= (makemap(fd, NULL) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10000 || makeset(fd, OPT_GLOBAL, FALSE) == FAIL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10002 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10003 if (!failed && view_session)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10005 if (put_line(fd, "let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10006 failed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10007 if (eap->cmdidx == CMD_mksession)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10008 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10009 char_u *dirnow; /* current directory */
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10010
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10011 dirnow = alloc(MAXPATHL);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10012 if (dirnow == NULL)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10013 failed = TRUE;
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10014 else
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10015 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10016 /*
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10017 * Change to session file's dir.
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10018 */
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10019 if (mch_dirname(dirnow, MAXPATHL) == FAIL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10020 || mch_chdir((char *)dirnow) != 0)
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10021 *dirnow = NUL;
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10022 if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10023 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10024 if (vim_chdirfile(fname) == OK)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10025 shorten_fnames(TRUE);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10026 }
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10027 else if (*dirnow != NUL
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10028 && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10029 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10030 if (mch_chdir((char *)globaldir) == 0)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10031 shorten_fnames(TRUE);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10032 }
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10033
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10034 failed |= (makeopens(fd, dirnow) == FAIL);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10035
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10036 /* restore original dir */
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10037 if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10038 || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10039 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10040 if (mch_chdir((char *)dirnow) != 0)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10041 EMSG(_(e_prev_dir));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10042 shorten_fnames(TRUE);
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10043 }
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10044 vim_free(dirnow);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10045 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10046 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10047 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10048 {
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
10049 failed |= (put_view(fd, curwin, !using_vdir, flagp,
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
10050 -1) == FAIL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10052 if (put_line(fd, "let &so = s:so_save | let &siso = s:siso_save")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10053 == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10054 failed = TRUE;
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10055 if (put_line(fd, "doautoall SessionLoadPost") == FAIL)
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10056 failed = TRUE;
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 621
diff changeset
10057 if (eap->cmdidx == CMD_mksession)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 621
diff changeset
10058 {
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 621
diff changeset
10059 if (put_line(fd, "unlet SessionLoad") == FAIL)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 621
diff changeset
10060 failed = TRUE;
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 621
diff changeset
10061 }
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10062 }
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10063 #endif
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10064 if (put_line(fd, "\" vim: set ft=vim :") == FAIL)
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10065 failed = TRUE;
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
10066
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10067 failed |= fclose(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10069 if (failed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10070 EMSG(_(e_write));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10071 #if defined(FEAT_EVAL) && defined(FEAT_SESSION)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10072 else if (eap->cmdidx == CMD_mksession)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10073 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10074 /* successful session write - set this_session var */
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10075 char_u *tbuf;
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10076
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10077 tbuf = alloc(MAXPATHL);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10078 if (tbuf != NULL)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10079 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10080 if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10081 set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10082 vim_free(tbuf);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
10083 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10084 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10085 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10086 #ifdef MKSESSION_NL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10087 mksession_nl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10088 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10089 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10090
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10091 #ifdef FEAT_BROWSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10092 theend:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10093 vim_free(browseFile);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10094 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10095 #ifdef FEAT_SESSION
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10096 vim_free(viewFile);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10097 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10098 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10099
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10100 #if ((defined(FEAT_SESSION) || defined(FEAT_EVAL)) && defined(vim_mkdir)) \
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10101 || defined(PROTO)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10102 int
8368
db2a07b710ed commit https://github.com/vim/vim/commit/f1d2501ebe33e148886c2914acd33140e20ee222
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
10103 vim_mkdir_emsg(char_u *name, int prot)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10104 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10105 if (vim_mkdir(name, prot) != 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10106 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10107 EMSG2(_("E739: Cannot create directory: %s"), name);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10108 return FAIL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10109 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10110 return OK;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10111 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10112 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
10113
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10114 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10115 * Open a file for writing for an Ex command, with some checks.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10116 * Return file descriptor, or NULL on failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10117 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10118 FILE *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10119 open_exfile(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10120 char_u *fname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10121 int forceit,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10122 char *mode) /* "w" for create new file or "a" for append */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10124 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10125
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10126 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10127 /* with Unix it is possible to open a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10128 if (mch_isdir(fname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10129 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10130 EMSG2(_(e_isadir2), fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10131 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10133 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10134 if (!forceit && *mode != 'a' && vim_fexists(fname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10136 EMSG2(_("E189: \"%s\" exists (add ! to override)"), fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10137 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10139
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10140 if ((fd = mch_fopen((char *)fname, mode)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10141 EMSG2(_("E190: Cannot open \"%s\" for writing"), fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10142
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10143 return fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10146 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10147 * ":mark" and ":k".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10148 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10149 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10150 ex_mark(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10152 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10154 if (*eap->arg == NUL) /* No argument? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10155 EMSG(_(e_argreq));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10156 else if (eap->arg[1] != NUL) /* more than one character? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10157 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10158 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10159 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10160 pos = curwin->w_cursor; /* save curwin->w_cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10161 curwin->w_cursor.lnum = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10162 beginline(BL_WHITE | BL_FIX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10163 if (setmark(*eap->arg) == FAIL) /* set mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10164 EMSG(_("E191: Argument must be a letter or forward/backward quote"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10165 curwin->w_cursor = pos; /* restore curwin->w_cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10166 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10168
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10169 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10170 * Update w_topline, w_leftcol and the cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10171 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10172 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10173 update_topline_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10175 check_cursor(); /* put cursor on valid line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10176 update_topline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10177 if (!curwin->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10178 validate_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10179 update_curswant();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10182 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10183 * ":normal[!] {commands}": Execute normal mode commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10184 */
7840
28f569c7dab9 commit https://github.com/vim/vim/commit/20fb9f346497daca4d19402fdfa5de7958642477
Christian Brabandt <cb@256bit.org>
parents: 7819
diff changeset
10185 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10186 ex_normal(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10188 int save_msg_scroll = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10189 int save_restart_edit = restart_edit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10190 int save_msg_didout = msg_didout;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10191 int save_State = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10192 tasave_T tabuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10193 int save_insertmode = p_im;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10194 int save_finish_op = finish_op;
1689
a285f0cd8a46 updated for version 7.2b-022
vimboss
parents: 1683
diff changeset
10195 int save_opcount = opcount;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10196 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10197 char_u *arg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10198 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10199 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10200 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10201
856
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
10202 if (ex_normal_lock > 0)
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
10203 {
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
10204 EMSG(_(e_secure));
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
10205 return;
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
10206 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10207 if (ex_normal_busy >= p_mmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10208 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10209 EMSG(_("E192: Recursive use of :normal too deep"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10210 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10211 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10212 ++ex_normal_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10214 msg_scroll = FALSE; /* no msg scrolling in Normal mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10215 restart_edit = 0; /* don't go to Insert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10216 p_im = FALSE; /* don't use 'insertmode' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10217
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10218 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10219 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10220 * vgetc() expects a CSI and K_SPECIAL to have been escaped. Don't do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10221 * this for the K_SPECIAL leading byte, otherwise special keys will not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10222 * work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10223 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10224 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10225 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10226 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10228 /* Count the number of characters to be escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10229 for (p = eap->arg; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10231 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10232 if (*p == CSI) /* leadbyte CSI */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10233 len += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10234 # endif
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 461
diff changeset
10235 for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10236 if (*++p == K_SPECIAL /* trailbyte K_SPECIAL or CSI */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10237 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10238 || *p == CSI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10239 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10240 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10241 len += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10243 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10244 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10245 arg = alloc((unsigned)(STRLEN(eap->arg) + len + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10246 if (arg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10247 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10248 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10249 for (p = eap->arg; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10251 arg[len++] = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10252 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10253 if (*p == CSI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10254 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10255 arg[len++] = KS_EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10256 arg[len++] = (int)KE_CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10257 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10258 # endif
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 461
diff changeset
10259 for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10260 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10261 arg[len++] = *++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10262 if (*p == K_SPECIAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10263 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10264 arg[len++] = KS_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10265 arg[len++] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10267 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10268 else if (*p == CSI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10269 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10270 arg[len++] = KS_EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10271 arg[len++] = (int)KE_CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10272 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10273 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10274 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10275 arg[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10277 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10278 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10279 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10280 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10281
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10282 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10283 * Save the current typeahead. This is required to allow using ":normal"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10284 * from an event handler and makes sure we don't hang when the argument
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10285 * ends with half a command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10286 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10287 save_typeahead(&tabuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10288 if (tabuf.typebuf_valid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10289 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10290 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10291 * Repeat the :normal command for each line in the range. When no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10292 * range given, execute it just once, without positioning the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10293 * first.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10294 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10295 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10297 if (eap->addr_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10299 curwin->w_cursor.lnum = eap->line1++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10300 curwin->w_cursor.col = 0;
11258
84f71a8a5f2c patch 8.0.0515: ml_get errors in silent Ex mode
Christian Brabandt <cb@256bit.org>
parents: 11256
diff changeset
10301 check_cursor_moved(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10302 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10303
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10304 exec_normal_cmd(
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10305 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10306 arg != NULL ? arg :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10307 #endif
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10308 eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10310 while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10313 /* Might not return to the main loop when in an event handler. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10314 update_topline_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10316 /* Restore the previous typeahead. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10317 restore_typeahead(&tabuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10319 --ex_normal_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10320 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10321 restart_edit = save_restart_edit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10322 p_im = save_insertmode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10323 finish_op = save_finish_op;
1689
a285f0cd8a46 updated for version 7.2b-022
vimboss
parents: 1683
diff changeset
10324 opcount = save_opcount;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10325 msg_didout |= save_msg_didout; /* don't reset msg_didout now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10327 /* Restore the state (needed when called from a function executed for
6322
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10328 * 'indentexpr'). Update the mouse and cursor, they may have changed. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10329 State = save_State;
6322
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10330 #ifdef FEAT_MOUSE
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10331 setmouse();
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10332 #endif
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10333 #ifdef CURSOR_SHAPE
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10334 ui_cursor_shape(); /* may show different cursor shape */
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10335 #endif
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
10336
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10337 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10338 vim_free(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10339 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10340 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10342 /*
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10343 * ":startinsert", ":startreplace" and ":startgreplace"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10344 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10345 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10346 ex_startinsert(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10347 {
98
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10348 if (eap->forceit)
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10349 {
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10350 coladvance((colnr_T)MAXCOL);
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10351 curwin->w_curswant = MAXCOL;
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10352 curwin->w_set_curswant = FALSE;
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10353 }
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
10354
89
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
10355 /* Ignore the command when already in Insert mode. Inserting an
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
10356 * expression register that invokes a function can do this. */
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
10357 if (State & INSERT)
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
10358 return;
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
10359
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10360 if (eap->cmdidx == CMD_startinsert)
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10361 restart_edit = 'a';
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10362 else if (eap->cmdidx == CMD_startreplace)
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10363 restart_edit = 'R';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10364 else
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10365 restart_edit = 'V';
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10366
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
10367 if (!eap->forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10368 {
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
10369 if (eap->cmdidx == CMD_startinsert)
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
10370 restart_edit = 'i';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10371 curwin->w_curswant = 0; /* avoid MAXCOL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10372 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10373 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10374
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10375 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10376 * ":stopinsert"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10377 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10378 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10379 ex_stopinsert(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10380 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10381 restart_edit = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10382 stop_insert_mode = TRUE;
8817
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
10383 clearmode();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10384 }
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7840
diff changeset
10385
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10386 /*
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10387 * Execute normal mode command "cmd".
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10388 * "remap" can be REMAP_NONE or REMAP_YES.
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10389 */
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10390 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10391 exec_normal_cmd(char_u *cmd, int remap, int silent)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10392 {
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10393 /* Stuff the argument into the typeahead buffer. */
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10394 ins_typebuf(cmd, remap, 0, TRUE, silent);
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10395 exec_normal(FALSE);
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10396 }
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7840
diff changeset
10397
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10398 /*
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10399 * Execute normal_cmd() until there is no typeahead left.
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10400 */
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10401 void
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10402 exec_normal(int was_typed)
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10403 {
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10404 oparg_T oa;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10405
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10406 clear_oparg(&oa);
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10407 finish_op = FALSE;
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10408 while ((!stuff_empty() || ((was_typed || !typebuf_typed())
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
10409 && typebuf.tb_len > 0)) && !got_int)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10410 {
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10411 update_topline_cursor();
2682
35edf814f223 updated for version 7.3.100
Bram Moolenaar <bram@vim.org>
parents: 2652
diff changeset
10412 normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10413 }
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10414 }
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
10415
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10416 #ifdef FEAT_FIND_ID
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10417 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10418 ex_checkpath(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10419 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10420 find_pattern_in_path(NULL, 0, 0, FALSE, FALSE, CHECK_PATH, 1L,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10421 eap->forceit ? ACTION_SHOW_ALL : ACTION_SHOW,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10422 (linenr_T)1, (linenr_T)MAXLNUM);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10423 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10424
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10425 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10426 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10427 * ":psearch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10428 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10429 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10430 ex_psearch(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10431 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10432 g_do_tagpreview = p_pvh;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10433 ex_findpat(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10434 g_do_tagpreview = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10435 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10436 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10437
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10438 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10439 ex_findpat(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10440 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10441 int whole = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10442 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10443 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10444 int action;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10446 switch (cmdnames[eap->cmdidx].cmd_name[2])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10447 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10448 case 'e': /* ":psearch", ":isearch" and ":dsearch" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10449 if (cmdnames[eap->cmdidx].cmd_name[0] == 'p')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10450 action = ACTION_GOTO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10451 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10452 action = ACTION_SHOW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10453 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10454 case 'i': /* ":ilist" and ":dlist" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10455 action = ACTION_SHOW_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10456 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10457 case 'u': /* ":ijump" and ":djump" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10458 action = ACTION_GOTO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10459 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10460 default: /* ":isplit" and ":dsplit" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10461 action = ACTION_SPLIT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10462 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10463 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10464
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10465 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10466 if (vim_isdigit(*eap->arg)) /* get count */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10467 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10468 n = getdigits(&eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10469 eap->arg = skipwhite(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10470 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10471 if (*eap->arg == '/') /* Match regexp, not just whole words */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10472 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10473 whole = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10474 ++eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10475 p = skip_regexp(eap->arg, '/', p_magic, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10476 if (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10477 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10478 *p++ = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10479 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10481 /* Check for trailing illegal characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10482 if (!ends_excmd(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10483 eap->errmsg = e_trailing;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10484 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10485 eap->nextcmd = check_nextcmd(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10486 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10487 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10488 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10489 find_pattern_in_path(eap->arg, 0, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10490 whole, !eap->forceit,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10491 *eap->cmd == 'd' ? FIND_DEFINE : FIND_ANY,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10492 n, action, eap->line1, eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10493 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10494 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10496 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10497
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10498 # ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10499 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10500 * ":ptag", ":ptselect", ":ptjump", ":ptnext", etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10501 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10502 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10503 ex_ptag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10504 {
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
10505 g_do_tagpreview = p_pvh; /* will be reset to 0 in ex_tag_cmd() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10506 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10507 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10508
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10509 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10510 * ":pedit"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10511 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10512 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10513 ex_pedit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10514 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10515 win_T *curwin_save = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10517 g_do_tagpreview = p_pvh;
815
c68b7b2b9e07 updated for version 7.0c02
vimboss
parents: 788
diff changeset
10518 prepare_tagpreview(TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10519 keep_help_flag = curwin_save->w_buffer->b_help;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10520 do_exedit(eap, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10521 keep_help_flag = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10522 if (curwin != curwin_save && win_valid(curwin_save))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10523 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10524 /* Return cursor to where we were */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10525 validate_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10526 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10527 win_enter(curwin_save, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10528 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10529 g_do_tagpreview = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10530 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10531 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10532
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10533 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10534 * ":stag", ":stselect" and ":stjump".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10535 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10536 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10537 ex_stag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10538 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10539 postponed_split = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10540 postponed_split_flags = cmdmod.split;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
10541 postponed_split_tab = cmdmod.tab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10542 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10543 postponed_split_flags = 0;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
10544 postponed_split_tab = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10545 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10546 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10548 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10549 * ":tag", ":tselect", ":tjump", ":tnext", etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10550 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10551 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10552 ex_tag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10553 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10554 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10557 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10558 ex_tag_cmd(exarg_T *eap, char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10559 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10560 int cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10562 switch (name[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10564 case 'j': cmd = DT_JUMP; /* ":tjump" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10565 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10566 case 's': cmd = DT_SELECT; /* ":tselect" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10567 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10568 case 'p': cmd = DT_PREV; /* ":tprevious" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10569 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10570 case 'N': cmd = DT_PREV; /* ":tNext" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10571 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10572 case 'n': cmd = DT_NEXT; /* ":tnext" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10573 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10574 case 'o': cmd = DT_POP; /* ":pop" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10575 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10576 case 'f': /* ":tfirst" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10577 case 'r': cmd = DT_FIRST; /* ":trewind" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10578 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10579 case 'l': cmd = DT_LAST; /* ":tlast" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10580 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10581 default: /* ":tag" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10582 #ifdef FEAT_CSCOPE
1603
694e8715dce6 updated for version 7.1-316
vimboss
parents: 1570
diff changeset
10583 if (p_cst && *eap->arg != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10584 {
10373
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
10585 ex_cstag(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10586 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10588 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10589 cmd = DT_TAG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10590 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10591 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10592
649
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10593 if (name[0] == 'l')
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10594 {
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10595 #ifndef FEAT_QUICKFIX
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10596 ex_ni(eap);
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10597 return;
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10598 #else
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10599 cmd = DT_LTAG;
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10600 #endif
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10601 }
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
10602
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10603 do_tag(eap->arg, cmd, eap->addr_count > 0 ? (int)eap->line2 : 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10604 eap->forceit, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10605 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10606
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10607 /*
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10608 * Check "str" for starting with a special cmdline variable.
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10609 * If found return one of the SPEC_ values and set "*usedlen" to the length of
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10610 * the variable. Otherwise return -1 and "*usedlen" is unchanged.
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10611 */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10612 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10613 find_cmdline_var(char_u *src, int *usedlen)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10614 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10615 int len;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10616 int i;
1879
e8eeeff19eae updated for version 7.2-176
vimboss
parents: 1877
diff changeset
10617 static char *(spec_str[]) = {
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10618 "%",
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10619 #define SPEC_PERC 0
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10620 "#",
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10621 #define SPEC_HASH 1
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10622 "<cword>", /* cursor word */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10623 #define SPEC_CWORD 2
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10624 "<cWORD>", /* cursor WORD */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10625 #define SPEC_CCWORD 3
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10626 "<cfile>", /* cursor path name */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10627 #define SPEC_CFILE 4
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10628 "<sfile>", /* ":so" file name */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10629 #define SPEC_SFILE 5
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10630 "<slnum>", /* ":so" file line number */
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10631 #define SPEC_SLNUM 6
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10632 #ifdef FEAT_AUTOCMD
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10633 "<afile>", /* autocommand file name */
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10634 # define SPEC_AFILE 7
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10635 "<abuf>", /* autocommand buffer number */
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10636 # define SPEC_ABUF 8
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10637 "<amatch>", /* autocommand match name */
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10638 # define SPEC_AMATCH 9
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10639 #endif
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10640 #ifdef FEAT_CLIENTSERVER
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10641 "<client>"
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10642 # ifdef FEAT_AUTOCMD
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10643 # define SPEC_CLIENT 10
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10644 # else
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10645 # define SPEC_CLIENT 7
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10646 # endif
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10647 #endif
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10648 };
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
10649
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
10650 for (i = 0; i < (int)(sizeof(spec_str) / sizeof(char *)); ++i)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10651 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10652 len = (int)STRLEN(spec_str[i]);
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10653 if (STRNCMP(src, spec_str[i], len) == 0)
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10654 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10655 *usedlen = len;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10656 return i;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10657 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10658 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10659 return -1;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10660 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10662 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10663 * Evaluate cmdline variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10664 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10665 * change '%' to curbuf->b_ffname
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10666 * '#' to curwin->w_altfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10667 * '<cword>' to word under the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10668 * '<cWORD>' to WORD under the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10669 * '<cfile>' to path name under the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10670 * '<sfile>' to sourced file name
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10671 * '<slnum>' to sourced file line number
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10672 * '<afile>' to file name for autocommand
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10673 * '<abuf>' to buffer number for autocommand
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10674 * '<amatch>' to matching name for autocommand
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10675 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10676 * When an error is detected, "errormsg" is set to a non-NULL pointer (may be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10677 * "" for error without a message) and NULL is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10678 * Returns an allocated string if a valid match was found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10679 * Returns NULL if no match was found. "usedlen" then still contains the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10680 * number of characters to skip.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10681 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10682 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10683 eval_vars(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10684 char_u *src, /* pointer into commandline */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10685 char_u *srcstart, /* beginning of valid memory for src */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10686 int *usedlen, /* characters after src that are used */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10687 linenr_T *lnump, /* line number for :e command, or NULL */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10688 char_u **errormsg, /* pointer to error message */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10689 int *escaped) /* return value has escaped white space (can
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
10690 * be NULL) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10692 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10693 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10694 char_u *result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10695 char_u *resultbuf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10696 int resultlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10697 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10698 int valid = VALID_HEAD + VALID_PATH; /* assume valid result */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10699 int spec_idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10700 #ifdef FEAT_MODIFY_FNAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10701 int skip_mod = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10702 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10703 char_u strbuf[30];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10704
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10705 *errormsg = NULL;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
10706 if (escaped != NULL)
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
10707 *escaped = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10708
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10709 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10710 * Check if there is something to do.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10711 */
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10712 spec_idx = find_cmdline_var(src, usedlen);
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
10713 if (spec_idx < 0) /* no match */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10714 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10715 *usedlen = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10716 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10717 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10719 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10720 * Skip when preceded with a backslash "\%" and "\#".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10721 * Note: In "\\%" the % is also not recognized!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10722 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10723 if (src > srcstart && src[-1] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10724 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10725 *usedlen = 0;
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
10726 STRMOVE(src - 1, src); /* remove backslash */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10727 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10728 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10729
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10730 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10731 * word or WORD under cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10732 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10733 if (spec_idx == SPEC_CWORD || spec_idx == SPEC_CCWORD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10735 resultlen = find_ident_under_cursor(&result, spec_idx == SPEC_CWORD ?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10736 (FIND_IDENT|FIND_STRING) : FIND_STRING);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10737 if (resultlen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10738 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10739 *errormsg = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10740 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10741 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10742 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10744 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10745 * '#': Alternate file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10746 * '%': Current file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10747 * File name under the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10748 * File name for autocommand
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10749 * and following modifiers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10750 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10751 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10752 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10753 switch (spec_idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10755 case SPEC_PERC: /* '%': current file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10756 if (curbuf->b_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10758 result = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10759 valid = 0; /* Must have ":p:h" to be valid */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10760 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10761 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10762 result = curbuf->b_fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10763 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10765 case SPEC_HASH: /* '#' or "#99": alternate file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10766 if (src[1] == '#') /* "##": the argument list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10767 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10768 result = arg_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10769 resultbuf = result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10770 *usedlen = 2;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
10771 if (escaped != NULL)
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
10772 *escaped = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10773 #ifdef FEAT_MODIFY_FNAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10774 skip_mod = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10775 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10776 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10777 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10778 s = src + 1;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10779 if (*s == '<') /* "#<99" uses v:oldfiles */
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10780 ++s;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10781 i = (int)getdigits(&s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10782 *usedlen = (int)(s - src); /* length of what we expand */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10783
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10784 if (src[1] == '<')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10785 {
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10786 if (*usedlen < 2)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10787 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10788 /* Should we give an error message for #<text? */
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10789 *usedlen = 1;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10790 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10791 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10792 #ifdef FEAT_EVAL
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10793 result = list_find_str(get_vim_var_list(VV_OLDFILES),
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10794 (long)i);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10795 if (result == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10796 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10797 *errormsg = (char_u *)"";
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10798 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10799 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10800 #else
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10801 *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10802 return NULL;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10803 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10805 else
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10806 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10807 buf = buflist_findnr(i);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10808 if (buf == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10809 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10810 *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10811 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10812 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10813 if (lnump != NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10814 *lnump = ECMD_LAST;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10815 if (buf->b_fname == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10816 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10817 result = (char_u *)"";
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10818 valid = 0; /* Must have ":p:h" to be valid */
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10819 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10820 else
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10821 result = buf->b_fname;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
10822 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10823 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10825 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10826 case SPEC_CFILE: /* file name under cursor */
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
10827 result = file_name_at_cursor(FNAME_MESS|FNAME_HYP, 1L, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10828 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10829 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10830 *errormsg = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10831 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10832 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10833 resultbuf = result; /* remember allocated string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10834 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10835 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10837 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10838 case SPEC_AFILE: /* file name for autocommand */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10839 result = autocmd_fname;
1723
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10840 if (result != NULL && !autocmd_fname_full)
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10841 {
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10842 /* Still need to turn the fname into a full path. It is
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10843 * postponed to avoid a delay when <afile> is not used. */
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10844 autocmd_fname_full = TRUE;
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10845 result = FullName_save(autocmd_fname, FALSE);
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10846 vim_free(autocmd_fname);
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10847 autocmd_fname = result;
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
10848 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10849 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10851 *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10852 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10853 }
1471
e980e93d2ac2 updated for version 7.1-186
vimboss
parents: 1467
diff changeset
10854 result = shorten_fname1(result);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10855 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10857 case SPEC_ABUF: /* buffer number for autocommand */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10858 if (autocmd_bufnr <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10859 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10860 *errormsg = (char_u *)_("E496: no autocommand buffer number to substitute for \"<abuf>\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10861 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10862 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10863 sprintf((char *)strbuf, "%d", autocmd_bufnr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10864 result = strbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10865 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10866
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10867 case SPEC_AMATCH: /* match name for autocommand */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10868 result = autocmd_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10869 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10870 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10871 *errormsg = (char_u *)_("E497: no autocommand match name to substitute for \"<amatch>\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10872 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10873 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10874 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10875
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10876 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10877 case SPEC_SFILE: /* file name for ":so" command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10878 result = sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10879 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10881 *errormsg = (char_u *)_("E498: no :source file name to substitute for \"<sfile>\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10882 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10883 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10884 break;
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10885 case SPEC_SLNUM: /* line in file for ":so" command */
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10886 if (sourcing_name == NULL || sourcing_lnum == 0)
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10887 {
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10888 *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10889 return NULL;
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10890 }
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10891 sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10892 result = strbuf;
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
10893 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10894 #if defined(FEAT_CLIENTSERVER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10895 case SPEC_CLIENT: /* Source of last submitted input */
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
10896 sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
10897 (long_u)clientWindow);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10898 result = strbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10899 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10900 #endif
11428
346168f2a6cb patch 8.0.0598: building with gcc 7.1 yields new warnings
Christian Brabandt <cb@256bit.org>
parents: 11374
diff changeset
10901 default:
346168f2a6cb patch 8.0.0598: building with gcc 7.1 yields new warnings
Christian Brabandt <cb@256bit.org>
parents: 11374
diff changeset
10902 result = (char_u *)""; /* avoid gcc warning */
346168f2a6cb patch 8.0.0598: building with gcc 7.1 yields new warnings
Christian Brabandt <cb@256bit.org>
parents: 11374
diff changeset
10903 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10904 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10906 resultlen = (int)STRLEN(result); /* length of new string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10907 if (src[*usedlen] == '<') /* remove the file name extension */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10908 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10909 ++*usedlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10910 if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10911 resultlen = (int)(s - result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10912 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10913 #ifdef FEAT_MODIFY_FNAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10914 else if (!skip_mod)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10915 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10916 valid |= modify_fname(src, usedlen, &result, &resultbuf,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10917 &resultlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10918 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10919 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10920 *errormsg = (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10921 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10923 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10924 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10925 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10927 if (resultlen == 0 || valid != VALID_HEAD + VALID_PATH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10928 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10929 if (valid != VALID_HEAD + VALID_PATH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10930 /* xgettext:no-c-format */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10931 *errormsg = (char_u *)_("E499: Empty file name for '%' or '#', only works with \":p:h\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10932 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10933 *errormsg = (char_u *)_("E500: Evaluates to an empty string");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10934 result = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10936 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10937 result = vim_strnsave(result, resultlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10938 vim_free(resultbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10939 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10940 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10941
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10942 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10943 * Concatenate all files in the argument list, separated by spaces, and return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10944 * it in one allocated string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10945 * Spaces and backslashes in the file names are escaped with a backslash.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10946 * Returns NULL when out of memory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10947 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10948 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
10949 arg_all(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10950 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10951 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10952 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10953 char_u *retval = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10954 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10956 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10957 * Do this loop two times:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10958 * first time: compute the total length
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10959 * second time: concatenate the names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10960 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10961 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10962 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10963 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10964 for (idx = 0; idx < ARGCOUNT; ++idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10966 p = alist_name(&ARGLIST[idx]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10967 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10968 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10969 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10970 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10971 /* insert a space in between names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10972 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10973 retval[len] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10974 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10975 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10976 for ( ; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10977 {
6832
1ccf96128410 patch 7.4.737
Bram Moolenaar <bram@vim.org>
parents: 6775
diff changeset
10978 if (*p == ' '
1ccf96128410 patch 7.4.737
Bram Moolenaar <bram@vim.org>
parents: 6775
diff changeset
10979 #ifndef BACKSLASH_IN_FILENAME
1ccf96128410 patch 7.4.737
Bram Moolenaar <bram@vim.org>
parents: 6775
diff changeset
10980 || *p == '\\'
1ccf96128410 patch 7.4.737
Bram Moolenaar <bram@vim.org>
parents: 6775
diff changeset
10981 #endif
1ccf96128410 patch 7.4.737
Bram Moolenaar <bram@vim.org>
parents: 6775
diff changeset
10982 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10983 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10984 /* insert a backslash */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10985 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10986 retval[len] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10987 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10989 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10990 retval[len] = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10991 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10993 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10994 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10996 /* second time: break here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10997 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10999 retval[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11000 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11002
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11003 /* allocate memory */
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
11004 retval = alloc((unsigned)len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11005 if (retval == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11006 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11007 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11008
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11009 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11010 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11011
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11012 #if defined(FEAT_AUTOCMD) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11013 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11014 * Expand the <sfile> string in "arg".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11015 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11016 * Returns an allocated string, or NULL for any error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11017 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11018 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11019 expand_sfile(char_u *arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11021 char_u *errormsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11022 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11023 char_u *result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11024 char_u *newres;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11025 char_u *repl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11026 int srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11027 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11028
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11029 result = vim_strsave(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11030 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11031 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11032
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11033 for (p = result; *p; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11035 if (STRNCMP(p, "<sfile>", 7) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11036 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11037 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11038 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11039 /* replace "<sfile>" with the sourced file name, and do ":" stuff */
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
11040 repl = eval_vars(p, result, &srclen, NULL, &errormsg, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11041 if (errormsg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11042 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11043 if (*errormsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11044 emsg(errormsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11045 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11046 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11048 if (repl == NULL) /* no match (cannot happen) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11049 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11050 p += srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11051 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11052 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11053 len = (int)STRLEN(result) - srclen + (int)STRLEN(repl) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11054 newres = alloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11055 if (newres == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11057 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11058 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11059 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11061 mch_memmove(newres, result, (size_t)(p - result));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11062 STRCPY(newres + (p - result), repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11063 len = (int)STRLEN(newres);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11064 STRCAT(newres, p + srclen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11065 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11066 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11067 result = newres;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11068 p = newres + len; /* continue after the match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11069 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11070 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11071
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11072 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11073 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11074 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11076 #ifdef FEAT_SESSION
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11077 static int ses_winsizes(FILE *fd, int restore_size,
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11078 win_T *tab_firstwin);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11079 static int ses_win_rec(FILE *fd, frame_T *fr);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11080 static frame_T *ses_skipframe(frame_T *fr);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11081 static int ses_do_frame(frame_T *fr);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11082 static int ses_do_win(win_T *wp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11083 static int ses_arglist(FILE *fd, char *cmd, garray_T *gap, int fullname, unsigned *flagp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11084 static int ses_put_fname(FILE *fd, char_u *name, unsigned *flagp);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
11085 static int ses_fname(FILE *fd, buf_T *buf, unsigned *flagp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11087 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11088 * Write openfile commands for the current buffers to an .exrc file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11089 * Return FAIL on error, OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11090 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11091 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11092 makeopens(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11093 FILE *fd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11094 char_u *dirnow) /* Current directory name */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11095 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11096 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11097 int only_save_windows = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11098 int nr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11099 int restore_size = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11100 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11101 char_u *sname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11102 win_T *edited_win = NULL;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11103 int tabnr;
5877
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11104 int restore_stal = FALSE;
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11105 win_T *tab_firstwin;
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11106 frame_T *tab_topframe;
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11107 int cur_arg_idx = 0;
1485
6d95d8976b00 updated for version 7.1-200
vimboss
parents: 1471
diff changeset
11108 int next_arg_idx = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11110 if (ssop_flags & SSOP_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11111 only_save_windows = FALSE; /* Save ALL buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11113 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11114 * Begin by setting the this_session variable, and then other
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11115 * sessionable variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11116 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11117 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11118 if (put_line(fd, "let v:this_session=expand(\"<sfile>:p\")") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11119 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11120 if (ssop_flags & SSOP_GLOBALS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11121 if (store_session_globals(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11122 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11123 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11124
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11125 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11126 * Close all windows but one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11127 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11128 if (put_line(fd, "silent only") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11129 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11131 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11132 * Now a :cd command to the session directory or the current directory
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11133 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11134 if (ssop_flags & SSOP_SESDIR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11135 {
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11136 if (put_line(fd, "exe \"cd \" . escape(expand(\"<sfile>:p:h\"), ' ')")
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11137 == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11138 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11139 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11140 else if (ssop_flags & SSOP_CURDIR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11141 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11142 sname = home_replace_save(NULL, globaldir != NULL ? globaldir : dirnow);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11143 if (sname == NULL
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11144 || fputs("cd ", fd) < 0
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11145 || ses_put_fname(fd, sname, &ssop_flags) == FAIL
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11146 || put_eol(fd) == FAIL)
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11147 {
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11148 vim_free(sname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11149 return FAIL;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
11150 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11151 vim_free(sname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11152 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11154 /*
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11155 * If there is an empty, unnamed buffer we will wipe it out later.
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11156 * Remember the buffer number.
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11157 */
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11158 if (put_line(fd, "if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''") == FAIL)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11159 return FAIL;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11160 if (put_line(fd, " let s:wipebuf = bufnr('%')") == FAIL)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11161 return FAIL;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11162 if (put_line(fd, "endif") == FAIL)
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11163 return FAIL;
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11164
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
11165 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11166 * Now save the current files, current buffer first.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11167 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11168 if (put_line(fd, "set shortmess=aoO") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11169 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11171 /* Now put the other buffers into the buffer list */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
11172 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11173 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11174 if (!(only_save_windows && buf->b_nwindows == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11175 && !(buf->b_help && !(ssop_flags & SSOP_HELP))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11176 && buf->b_fname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11177 && buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11178 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11179 if (fprintf(fd, "badd +%ld ", buf->b_wininfo == NULL ? 1L
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11180 : buf->b_wininfo->wi_fpos.lnum) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11181 || ses_fname(fd, buf, &ssop_flags) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11182 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11183 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11185
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11186 /* the global argument list */
5720
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11187 if (ses_arglist(fd, "argglobal", &global_alist.al_ga,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11188 !(ssop_flags & SSOP_CURDIR), &ssop_flags) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11189 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11191 if (ssop_flags & SSOP_RESIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11193 /* Note: after the restore we still check it worked!*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11194 if (fprintf(fd, "set lines=%ld columns=%ld" , Rows, Columns) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11195 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11196 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11197 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11199 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11200 if (gui.in_use && (ssop_flags & SSOP_WINPOS))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11202 int x, y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11204 if (gui_mch_get_winpos(&x, &y) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11206 /* Note: after the restore we still check it worked!*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11207 if (fprintf(fd, "winpos %d %d", x, y) < 0 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11208 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11211 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11212
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11213 /*
5877
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11214 * When there are two or more tabpages and 'showtabline' is 1 the tabline
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11215 * will be displayed when creating the next tab. That resizes the windows
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11216 * in the first tab, which may cause problems. Set 'showtabline' to 2
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11217 * temporarily to avoid that.
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11218 */
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11219 if (p_stal == 1 && first_tabpage->tp_next != NULL)
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11220 {
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11221 if (put_line(fd, "set stal=2") == FAIL)
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11222 return FAIL;
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11223 restore_stal = TRUE;
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11224 }
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11225
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11226 /*
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11227 * May repeat putting Windows for each tab, when "tabpages" is in
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11228 * 'sessionoptions'.
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11229 * Don't use goto_tabpage(), it may change directory and trigger
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11230 * autocommands.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11231 */
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11232 tab_firstwin = firstwin; /* first window in tab page "tabnr" */
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11233 tab_topframe = topframe;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11234 for (tabnr = 1; ; ++tabnr)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11235 {
6739
f012247e8ec8 patch 7.4.693
Bram Moolenaar <bram@vim.org>
parents: 6581
diff changeset
11236 int need_tabnew = FALSE;
f012247e8ec8 patch 7.4.693
Bram Moolenaar <bram@vim.org>
parents: 6581
diff changeset
11237 int cnr = 1;
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11238
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11239 if ((ssop_flags & SSOP_TABPAGES))
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11240 {
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11241 tabpage_T *tp = find_tabpage(tabnr);
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11242
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11243 if (tp == NULL)
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11244 break; /* done all tab pages */
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11245 if (tp == curtab)
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11246 {
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11247 tab_firstwin = firstwin;
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11248 tab_topframe = topframe;
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11249 }
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11250 else
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11251 {
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11252 tab_firstwin = tp->tp_firstwin;
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11253 tab_topframe = tp->tp_topframe;
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11254 }
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11255 if (tabnr > 1)
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11256 need_tabnew = TRUE;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11257 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11258
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11259 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11260 * Before creating the window layout, try loading one file. If this
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11261 * is aborted we don't end up with a number of useless windows.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11262 * This may have side effects! (e.g., compressed or network file).
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11263 */
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11264 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11265 {
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11266 if (ses_do_win(wp)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11267 && wp->w_buffer->b_ffname != NULL
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11268 && !wp->w_buffer->b_help
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11269 #ifdef FEAT_QUICKFIX
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11270 && !bt_nofile(wp->w_buffer)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11271 #endif
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11272 )
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11273 {
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11274 if (fputs(need_tabnew ? "tabedit " : "edit ", fd) < 0
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11275 || ses_fname(fd, wp->w_buffer, &ssop_flags) == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11276 return FAIL;
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11277 need_tabnew = FALSE;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11278 if (!wp->w_arg_idx_invalid)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11279 edited_win = wp;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11280 break;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11281 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11282 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11283
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11284 /* If no file got edited create an empty tab page. */
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11285 if (need_tabnew && put_line(fd, "tabnew") == FAIL)
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11286 return FAIL;
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11287
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11288 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11289 * Save current window layout.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11290 */
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11291 if (put_line(fd, "set splitbelow splitright") == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11292 return FAIL;
1048
73c0eeeee0b7 updated for version 7.0-174
vimboss
parents: 1038
diff changeset
11293 if (ses_win_rec(fd, tab_topframe) == FAIL)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11294 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11295 if (!p_sb && put_line(fd, "set nosplitbelow") == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11296 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11297 if (!p_spr && put_line(fd, "set nosplitright") == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11298 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11299
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11300 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11301 * Check if window sizes can be restored (no windows omitted).
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11302 * Remember the window number of the current window after restoring.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11303 */
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11304 nr = 0;
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11305 for (wp = tab_firstwin; wp != NULL; wp = W_NEXT(wp))
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11306 {
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11307 if (ses_do_win(wp))
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11308 ++nr;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11309 else
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11310 restore_size = FALSE;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11311 if (curwin == wp)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11312 cnr = nr;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11313 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11314
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11315 /* Go to the first window. */
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11316 if (put_line(fd, "wincmd t") == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11317 return FAIL;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11318
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11319 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11320 * If more than one window, see if sizes can be restored.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11321 * First set 'winheight' and 'winwidth' to 1 to avoid the windows being
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11322 * resized when moving between windows.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11323 * Do this before restoring the view, so that the topline and the
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11324 * cursor can be set. This is done again below.
10726
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11325 * winminheight and winminwidth need to be set to avoid an error if the
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11326 * user has set winheight or winwidth.
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11327 */
10726
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11328 if (put_line(fd, "set winminheight=1 winheight=1 winminwidth=1 winwidth=1") == FAIL)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11329 return FAIL;
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11330 if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11331 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11332
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11333 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11334 * Restore the view of the window (options, file, cursor, etc.).
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11335 */
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11336 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11337 {
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11338 if (!ses_do_win(wp))
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11339 continue;
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11340 if (put_view(fd, wp, wp != edited_win, &ssop_flags,
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11341 cur_arg_idx) == FAIL)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11342 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11343 if (nr > 1 && put_line(fd, "wincmd w") == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11344 return FAIL;
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11345 next_arg_idx = wp->w_arg_idx;
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11346 }
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11347
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11348 /* The argument index in the first tab page is zero, need to set it in
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11349 * each window. For further tab pages it's the window where we do
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11350 * "tabedit". */
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11351 cur_arg_idx = next_arg_idx;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11352
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11353 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11354 * Restore cursor to the current window if it's not the first one.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11355 */
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11356 if (cnr > 1 && (fprintf(fd, "%dwincmd w", cnr) < 0
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11357 || put_eol(fd) == FAIL))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11358 return FAIL;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11359
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11360 /*
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11361 * Restore window sizes again after jumping around in windows, because
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11362 * the current window has a minimum size while others may not.
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11363 */
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11364 if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11365 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11366
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11367 /* Don't continue in another tab page when doing only the current one
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11368 * or when at the last tab page. */
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11369 if (!(ssop_flags & SSOP_TABPAGES))
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11370 break;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11371 }
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11372
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11373 if (ssop_flags & SSOP_TABPAGES)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11374 {
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11375 if (fprintf(fd, "tabnext %d", tabpage_index(curtab)) < 0
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11376 || put_eol(fd) == FAIL)
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11377 return FAIL;
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11378 }
5877
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11379 if (restore_stal && put_line(fd, "set stal=1") == FAIL)
24c90f1fec85 updated for version 7.4.281
Bram Moolenaar <bram@vim.org>
parents: 5848
diff changeset
11380 return FAIL;
827
fd1b3406fd1c updated for version 7.0d02
vimboss
parents: 822
diff changeset
11381
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11382 /*
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11383 * Wipe out an empty unnamed buffer we started in.
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11384 */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11385 if (put_line(fd, "if exists('s:wipebuf')") == FAIL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11386 return FAIL;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
11387 if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL)
859
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11388 return FAIL;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11389 if (put_line(fd, "endif") == FAIL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11390 return FAIL;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11391 if (put_line(fd, "unlet! s:wipebuf") == FAIL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11392 return FAIL;
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11393
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11394 /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11395 if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s",
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11396 p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL)
99305c4c42d4 updated for version 7.0g02
vimboss
parents: 857
diff changeset
11397 return FAIL;
10726
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11398 /* Re-apply 'winminheight' and 'winminwidth'. */
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11399 if (fprintf(fd, "set winminheight=%ld winminwidth=%ld",
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11400 p_wmh, p_wmw) < 0 || put_eol(fd) == FAIL)
78927b31c73a patch 8.0.0253: error when loading session if winminheight is 2
Christian Brabandt <cb@256bit.org>
parents: 10722
diff changeset
11401 return FAIL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11402
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11403 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11404 * Lastly, execute the x.vim file if it exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11405 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11406 if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11407 || put_line(fd, "if file_readable(s:sx)") == FAIL
1769
649d340f34d3 updated for version 7.2-067
vimboss
parents: 1757
diff changeset
11408 || put_line(fd, " exe \"source \" . fnameescape(s:sx)") == FAIL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11409 || put_line(fd, "endif") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11410 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11411
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11412 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11413 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11415 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11416 ses_winsizes(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11417 FILE *fd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11418 int restore_size,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11419 win_T *tab_firstwin)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11420 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11421 int n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11422 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11424 if (restore_size && (ssop_flags & SSOP_WINSIZE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11425 {
1021
81cf1b6e0a2d updated for version 7.0-147
vimboss
parents: 972
diff changeset
11426 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11427 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11428 if (!ses_do_win(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11429 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11430 ++n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11431
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11432 /* restore height when not full height */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11433 if (wp->w_height + wp->w_status_height < topframe->fr_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11434 && (fprintf(fd,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11435 "exe '%dresize ' . ((&lines * %ld + %ld) / %ld)",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11436 n, (long)wp->w_height, Rows / 2, Rows) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11437 || put_eol(fd) == FAIL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11438 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11440 /* restore width when not full width */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11441 if (wp->w_width < Columns && (fprintf(fd,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11442 "exe 'vert %dresize ' . ((&columns * %ld + %ld) / %ld)",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11443 n, (long)wp->w_width, Columns / 2, Columns) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11444 || put_eol(fd) == FAIL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11445 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11447 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11448 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11449 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11450 /* Just equalise window sizes */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11451 if (put_line(fd, "wincmd =") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11452 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11454 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11455 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11457 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11458 * Write commands to "fd" to recursively create windows for frame "fr",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11459 * horizontally and vertically split.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11460 * After the commands the last window in the frame is the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11461 * Returns FAIL when writing the commands to "fd" fails.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11462 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11463 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11464 ses_win_rec(FILE *fd, frame_T *fr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11465 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11466 frame_T *frc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11467 int count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11469 if (fr->fr_layout != FR_LEAF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11470 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11471 /* Find first frame that's not skipped and then create a window for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11472 * each following one (first frame is already there). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11473 frc = ses_skipframe(fr->fr_child);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11474 if (frc != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11475 while ((frc = ses_skipframe(frc->fr_next)) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11476 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11477 /* Make window as big as possible so that we have lots of room
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11478 * to split. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11479 if (put_line(fd, "wincmd _ | wincmd |") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11480 || put_line(fd, fr->fr_layout == FR_COL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11481 ? "split" : "vsplit") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11482 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11483 ++count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11484 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11485
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11486 /* Go back to the first window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11487 if (count > 0 && (fprintf(fd, fr->fr_layout == FR_COL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11488 ? "%dwincmd k" : "%dwincmd h", count) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11489 || put_eol(fd) == FAIL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11490 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11492 /* Recursively create frames/windows in each window of this column or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11493 * row. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11494 frc = ses_skipframe(fr->fr_child);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11495 while (frc != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11496 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11497 ses_win_rec(fd, frc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11498 frc = ses_skipframe(frc->fr_next);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11499 /* Go to next window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11500 if (frc != NULL && put_line(fd, "wincmd w") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11501 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11503 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11504 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11505 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11506
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11507 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11508 * Skip frames that don't contain windows we want to save in the Session.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11509 * Returns NULL when there none.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11510 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11511 static frame_T *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11512 ses_skipframe(frame_T *fr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11513 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11514 frame_T *frc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11516 for (frc = fr; frc != NULL; frc = frc->fr_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11517 if (ses_do_frame(frc))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11518 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11519 return frc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11522 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11523 * Return TRUE if frame "fr" has a window somewhere that we want to save in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11524 * the Session.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11525 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11526 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11527 ses_do_frame(frame_T *fr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11528 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11529 frame_T *frc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11530
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11531 if (fr->fr_layout == FR_LEAF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11532 return ses_do_win(fr->fr_win);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11533 for (frc = fr->fr_child; frc != NULL; frc = frc->fr_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11534 if (ses_do_frame(frc))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11535 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11536 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11537 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11538
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11539 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11540 * Return non-zero if window "wp" is to be stored in the Session.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11541 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11542 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11543 ses_do_win(win_T *wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11544 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11545 if (wp->w_buffer->b_fname == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11546 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11547 /* When 'buftype' is "nofile" can't restore the window contents. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11548 || bt_nofile(wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11549 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11550 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11551 return (ssop_flags & SSOP_BLANK);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11552 if (wp->w_buffer->b_help)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11553 return (ssop_flags & SSOP_HELP);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11554 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11557 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11558 * Write commands to "fd" to restore the view of a window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11559 * Caller must make sure 'scrolloff' is zero.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11560 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11561 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11562 put_view(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11563 FILE *fd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11564 win_T *wp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11565 int add_edit, /* add ":edit" command to view */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11566 unsigned *flagp, /* vop_flags or ssop_flags */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11567 int current_arg_idx) /* current argument index of the window, use
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11568 * -1 if unknown */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11569 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11570 win_T *save_curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11571 int f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11572 int do_cursor;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11573 int did_next = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11575 /* Always restore cursor position for ":mksession". For ":mkview" only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11576 * when 'viewoptions' contains "cursor". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11577 do_cursor = (flagp == &ssop_flags || *flagp & SSOP_CURSOR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11579 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11580 * Local argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11581 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11582 if (wp->w_alist == &global_alist)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11584 if (put_line(fd, "argglobal") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11585 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11587 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11588 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11589 if (ses_arglist(fd, "arglocal", &wp->w_alist->al_ga,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11590 flagp == &vop_flags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11591 || !(*flagp & SSOP_CURDIR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11592 || wp->w_localdir != NULL, flagp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11593 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11594 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11595
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11596 /* Only when part of a session: restore the argument index. Some
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11597 * arguments may have been deleted, check if the index is valid. */
2276
ebabd8a8b714 Fix that :mksession may generate "2argu" even though there is no such
Bram Moolenaar <bram@vim.org>
parents: 2268
diff changeset
11598 if (wp->w_arg_idx != current_arg_idx && wp->w_arg_idx < WARGCOUNT(wp)
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11599 && flagp == &ssop_flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11600 {
1467
198ea7a9c633 updated for version 7.1-182
vimboss
parents: 1459
diff changeset
11601 if (fprintf(fd, "%ldargu", (long)wp->w_arg_idx + 1) < 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11602 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11603 return FAIL;
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11604 did_next = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11605 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11606
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11607 /* Edit the file. Skip this when ":next" already did it. */
280
453b78cb4881 updated for version 7.0075
vimboss
parents: 272
diff changeset
11608 if (add_edit && (!did_next || wp->w_arg_idx_invalid))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11610 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11611 * Load the file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11612 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11613 if (wp->w_buffer->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11614 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11615 && !bt_nofile(wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11616 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11617 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11619 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11620 * Editing a file in this buffer: use ":edit file".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11621 * This may have side effects! (e.g., compressed or network file).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11622 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11623 if (fputs("edit ", fd) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11624 || ses_fname(fd, wp->w_buffer, flagp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11625 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11626 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11627 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11628 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11629 /* No file in this buffer, just make it empty. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11630 if (put_line(fd, "enew") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11631 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11632 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11633 if (wp->w_buffer->b_ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11634 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11635 /* The buffer does have a name, but it's not a file name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11636 if (fputs("file ", fd) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11637 || ses_fname(fd, wp->w_buffer, flagp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11638 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11641 do_cursor = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11642 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11643 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11644
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11645 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11646 * Local mappings and abbreviations.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11647 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11648 if ((*flagp & (SSOP_OPTIONS | SSOP_LOCALOPTIONS))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11649 && makemap(fd, wp->w_buffer) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11650 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11652 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11653 * Local options. Need to go to the window temporarily.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11654 * Store only local values when using ":mkview" and when ":mksession" is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11655 * used and 'sessionoptions' doesn't include "options".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11656 * Some folding options are always stored when "folds" is included,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11657 * otherwise the folds would not be restored correctly.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11658 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11659 save_curwin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11660 curwin = wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11661 curbuf = curwin->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11662 if (*flagp & (SSOP_OPTIONS | SSOP_LOCALOPTIONS))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11663 f = makeset(fd, OPT_LOCAL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11664 flagp == &vop_flags || !(*flagp & SSOP_OPTIONS));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11665 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11666 else if (*flagp & SSOP_FOLDS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11667 f = makefoldset(fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11668 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11669 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11670 f = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11671 curwin = save_curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11672 curbuf = curwin->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11673 if (f == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11674 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11676 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11677 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11678 * Save Folds when 'buftype' is empty and for help files.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11679 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11680 if ((*flagp & SSOP_FOLDS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11681 && wp->w_buffer->b_ffname != NULL
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11635
diff changeset
11682 && (*wp->w_buffer->b_p_bt == NUL || wp->w_buffer->b_help))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11684 if (put_folds(fd, wp) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11685 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11686 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11687 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11688
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11689 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11690 * Set the cursor after creating folds, since that moves the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11691 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11692 if (do_cursor)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11695 /* Restore the cursor line in the file and relatively in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11696 * window. Don't use "G", it changes the jumplist. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11697 if (fprintf(fd, "let s:l = %ld - ((%ld * winheight(0) + %ld) / %ld)",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11698 (long)wp->w_cursor.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11699 (long)(wp->w_cursor.lnum - wp->w_topline),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11700 (long)wp->w_height / 2, (long)wp->w_height) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11701 || put_eol(fd) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11702 || put_line(fd, "if s:l < 1 | let s:l = 1 | endif") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11703 || put_line(fd, "exe s:l") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11704 || put_line(fd, "normal! zt") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11705 || fprintf(fd, "%ld", (long)wp->w_cursor.lnum) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11706 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11707 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11708 /* Restore the cursor column and left offset when not wrapping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11709 if (wp->w_cursor.col == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11710 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11711 if (put_line(fd, "normal! 0") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11712 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11713 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11714 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11715 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11716 if (!wp->w_p_wrap && wp->w_leftcol > 0 && wp->w_width > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11717 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11718 if (fprintf(fd,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11719 "let s:c = %ld - ((%ld * winwidth(0) + %ld) / %ld)",
4155
454d35a43392 updated for version 7.3.830
Bram Moolenaar <bram@vim.org>
parents: 4133
diff changeset
11720 (long)wp->w_virtcol + 1,
454d35a43392 updated for version 7.3.830
Bram Moolenaar <bram@vim.org>
parents: 4133
diff changeset
11721 (long)(wp->w_virtcol - wp->w_leftcol),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11722 (long)wp->w_width / 2, (long)wp->w_width) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11723 || put_eol(fd) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11724 || put_line(fd, "if s:c > 0") == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11725 || fprintf(fd,
4155
454d35a43392 updated for version 7.3.830
Bram Moolenaar <bram@vim.org>
parents: 4133
diff changeset
11726 " exe 'normal! ' . s:c . '|zs' . %ld . '|'",
454d35a43392 updated for version 7.3.830
Bram Moolenaar <bram@vim.org>
parents: 4133
diff changeset
11727 (long)wp->w_virtcol + 1) < 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11728 || put_eol(fd) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11729 || put_line(fd, "else") == FAIL
4172
1c819b05529c updated for version 7.3.838
Bram Moolenaar <bram@vim.org>
parents: 4155
diff changeset
11730 || fprintf(fd, " normal! 0%d|", wp->w_virtcol + 1) < 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11731 || put_eol(fd) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11732 || put_line(fd, "endif") == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11733 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11735 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11736 {
4155
454d35a43392 updated for version 7.3.830
Bram Moolenaar <bram@vim.org>
parents: 4133
diff changeset
11737 if (fprintf(fd, "normal! 0%d|", wp->w_virtcol + 1) < 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11738 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11739 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11740 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11741 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11742 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11744 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11745 * Local directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11746 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11747 if (wp->w_localdir != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11748 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11749 if (fputs("lcd ", fd) < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11750 || ses_put_fname(fd, wp->w_localdir, flagp) == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11751 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11752 return FAIL;
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11753 did_lcd = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11754 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11755
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11756 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11757 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11759 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11760 * Write an argument list to the session file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11761 * Returns FAIL if writing fails.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11762 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11763 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11764 ses_arglist(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11765 FILE *fd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11766 char *cmd,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11767 garray_T *gap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11768 int fullname, /* TRUE: use full path name */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11769 unsigned *flagp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11770 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11771 int i;
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11772 char_u *buf = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11773 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11774
5720
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11775 if (fputs(cmd, fd) < 0 || put_eol(fd) == FAIL)
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11776 return FAIL;
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11777 if (put_line(fd, "silent! argdel *") == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11778 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11779 for (i = 0; i < gap->ga_len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11780 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11781 /* NULL file names are skipped (only happens when out of memory). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11782 s = alist_name(&((aentry_T *)gap->ga_data)[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11783 if (s != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11784 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11785 if (fullname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11786 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11787 buf = alloc(MAXPATHL);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11788 if (buf != NULL)
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11789 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11790 (void)vim_FullName(s, buf, MAXPATHL, FALSE);
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11791 s = buf;
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11792 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11793 }
10809
3adae5c1b1cd patch 8.0.0294: argument list is not stored correctly in a session file
Christian Brabandt <cb@256bit.org>
parents: 10753
diff changeset
11794 if (fputs("$argadd ", fd) < 0
5720
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11795 || ses_put_fname(fd, s, flagp) == FAIL
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11796 || put_eol(fd) == FAIL)
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11797 {
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11798 vim_free(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11799 return FAIL;
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11800 }
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
11801 vim_free(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11803 }
5720
0ace3a24c2a0 updated for version 7.4.205
Bram Moolenaar <bram@vim.org>
parents: 5645
diff changeset
11804 return OK;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11807 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11808 * Write a buffer name to the session file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11809 * Also ends the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11810 * Returns FAIL if writing fails.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11811 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11812 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11813 ses_fname(FILE *fd, buf_T *buf, unsigned *flagp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11814 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11815 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11816
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11817 /* Use the short file name if the current directory is known at the time
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11818 * the session file will be sourced.
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11819 * Don't do this for ":mkview", we don't know the current directory.
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11820 * Don't do this after ":lcd", we don't keep track of what the current
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11821 * directory is. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11822 if (buf->b_sfname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11823 && flagp == &ssop_flags
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11824 && (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR))
1925
cdfc3897c895 updated for version 7.2-222
vimboss
parents: 1880
diff changeset
11825 #ifdef FEAT_AUTOCHDIR
cdfc3897c895 updated for version 7.2-222
vimboss
parents: 1880
diff changeset
11826 && !p_acd
cdfc3897c895 updated for version 7.2-222
vimboss
parents: 1880
diff changeset
11827 #endif
1113
1df41c98fc2e updated for version 7.0-239
vimboss
parents: 1098
diff changeset
11828 && !did_lcd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11829 name = buf->b_sfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11830 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11831 name = buf->b_ffname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11832 if (ses_put_fname(fd, name, flagp) == FAIL || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11833 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11834 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11835 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11837 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11838 * Write a file name to the session file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11839 * Takes care of the "slash" option in 'sessionoptions' and escapes special
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11840 * characters.
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11841 * Returns FAIL if writing fails or out of memory.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11842 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11843 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11844 ses_put_fname(FILE *fd, char_u *name, unsigned *flagp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11846 char_u *sname;
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11847 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11848 int retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11849
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11850 sname = home_replace_save(NULL, name);
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11851 if (sname == NULL)
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11852 return FAIL;
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11853
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11854 if (*flagp & SSOP_SLASH)
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11855 {
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11856 /* change all backslashes to forward slashes */
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
11857 for (p = sname; *p != NUL; MB_PTR_ADV(p))
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11858 if (*p == '\\')
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11859 *p = '/';
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11860 }
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11861
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4236
diff changeset
11862 /* escape special characters */
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11863 p = vim_strsave_fnameescape(sname, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11864 vim_free(sname);
2602
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11865 if (p == NULL)
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11866 return FAIL;
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11867
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11868 /* write the result */
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11869 if (fputs((char *)p, fd) < 0)
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11870 retval = FAIL;
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11871
71219f47ccd9 updated for version 7.3.025
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
11872 vim_free(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11873 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11874 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11875
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11876 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11877 * ":loadview [nr]"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11878 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11879 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11880 ex_loadview(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11881 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11882 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11884 fname = get_view_file(*eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11885 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11886 {
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
11887 do_source(fname, FALSE, DOSO_NONE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11888 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11890 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11891
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11892 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11893 * Get the name of the view file for the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11894 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11895 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11896 get_view_file(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11897 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11898 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11899 char_u *p, *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11900 char_u *retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11901 char_u *sname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11902
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11903 if (curbuf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11904 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11905 EMSG(_(e_noname));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11906 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11907 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11908 sname = home_replace_save(NULL, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11909 if (sname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11910 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11911
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11912 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11913 * We want a file name without separators, because we're not going to make
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11914 * a directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11915 * "normal" path separator -> "=+"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11916 * "=" -> "=="
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11917 * ":" path separator -> "=-"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11918 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11919 for (p = sname; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11920 if (*p == '=' || vim_ispathsep(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11921 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11922 retval = alloc((unsigned)(STRLEN(sname) + len + STRLEN(p_vdir) + 9));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11923 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11924 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11925 STRCPY(retval, p_vdir);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11926 add_pathsep(retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11927 s = retval + STRLEN(retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11928 for (p = sname; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11929 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11930 if (*p == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11931 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11932 *s++ = '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11933 *s++ = '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11934 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11935 else if (vim_ispathsep(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11936 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11937 *s++ = '=';
2823
8bd38abda314 updated for version 7.3.187
Bram Moolenaar <bram@vim.org>
parents: 2791
diff changeset
11938 #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11939 if (*p == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11940 *s++ = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11941 else
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
11942 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11943 *s++ = '+';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11944 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11945 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11946 *s++ = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11947 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11948 *s++ = '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11949 *s++ = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11950 STRCPY(s, ".vim");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11951 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11953 vim_free(sname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11954 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11955 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11956
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11957 #endif /* FEAT_SESSION */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11958
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11959 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11960 * Write end-of-line character(s) for ":mkexrc", ":mkvimrc" and ":mksession".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11961 * Return FAIL for a write error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11962 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11963 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11964 put_eol(FILE *fd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11966 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11967 #ifdef USE_CRNL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11968 (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11969 # ifdef MKSESSION_NL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11970 !mksession_nl &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11971 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11972 (putc('\r', fd) < 0)) ||
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11973 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11974 (putc('\n', fd) < 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11975 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11976 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11977 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11978
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11979 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11980 * Write a line to "fd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11981 * Return FAIL for a write error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11982 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11983 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11984 put_line(FILE *fd, char *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11985 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11986 if (fputs(s, fd) < 0 || put_eol(fd) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11987 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11988 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11990
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11991 #ifdef FEAT_VIMINFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11992 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11993 * ":rviminfo" and ":wviminfo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11994 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11995 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11996 ex_viminfo(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
11997 exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11999 char_u *save_viminfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12000
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12001 save_viminfo = p_viminfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12002 if (*p_viminfo == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12003 p_viminfo = (char_u *)"'100";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12004 if (eap->cmdidx == CMD_rviminfo)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12005 {
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
12006 if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
12007 | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12008 EMSG(_("E195: Cannot open viminfo file for reading"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12009 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12010 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12011 write_viminfo(eap->arg, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12012 p_viminfo = save_viminfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12014 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12016 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
12017 /*
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
12018 * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
310
04bf54c587f4 updated for version 7.0082
vimboss
parents: 296
diff changeset
12019 * "format" must contain "%s".
272
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
12020 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12021 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12022 dialog_msg(char_u *buff, char *format, char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12023 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12024 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12025 fname = (char_u *)_("Untitled");
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
12026 vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12027 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12028 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12029
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12030 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12031 * ":behave {mswin,xterm}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12032 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12033 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12034 ex_behave(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12036 if (STRCMP(eap->arg, "mswin") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12037 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12038 set_option_value((char_u *)"selection", 0L, (char_u *)"exclusive", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12039 set_option_value((char_u *)"selectmode", 0L, (char_u *)"mouse,key", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12040 set_option_value((char_u *)"mousemodel", 0L, (char_u *)"popup", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12041 set_option_value((char_u *)"keymodel", 0L,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12042 (char_u *)"startsel,stopsel", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12043 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12044 else if (STRCMP(eap->arg, "xterm") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12045 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12046 set_option_value((char_u *)"selection", 0L, (char_u *)"inclusive", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12047 set_option_value((char_u *)"selectmode", 0L, (char_u *)"", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12048 set_option_value((char_u *)"mousemodel", 0L, (char_u *)"extend", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12049 set_option_value((char_u *)"keymodel", 0L, (char_u *)"", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12050 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12051 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12052 EMSG2(_(e_invarg2), eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12053 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12054
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12055 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12056 /*
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12057 * Function given to ExpandGeneric() to obtain the possible arguments of the
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12058 * ":behave {mswin,xterm}" command.
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12059 */
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12060 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12061 get_behave_arg(expand_T *xp UNUSED, int idx)
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12062 {
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12063 if (idx == 0)
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12064 return (char_u *)"mswin";
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12065 if (idx == 1)
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12066 return (char_u *)"xterm";
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12067 return NULL;
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12068 }
10275
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12069
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12070 /*
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12071 * Function given to ExpandGeneric() to obtain the possible arguments of the
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12072 * ":messages {clear}" command.
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12073 */
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12074 char_u *
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12075 get_messages_arg(expand_T *xp UNUSED, int idx)
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12076 {
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12077 if (idx == 0)
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12078 return (char_u *)"clear";
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12079 return NULL;
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10264
diff changeset
12080 }
2097
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12081 #endif
8f72e3512b43 updated for version 7.2.381
Bram Moolenaar <bram@zimbu.org>
parents: 2068
diff changeset
12082
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12083 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12084 static int filetype_detect = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12085 static int filetype_plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12086 static int filetype_indent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12087
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12088 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12089 * ":filetype [plugin] [indent] {on,off,detect}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12090 * on: Load the filetype.vim file to install autocommands for file types.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12091 * off: Load the ftoff.vim file to remove all autocommands for file types.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12092 * plugin on: load filetype.vim and ftplugin.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12093 * plugin off: load ftplugof.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12094 * indent on: load filetype.vim and indent.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12095 * indent off: load indoff.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12096 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12097 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12098 ex_filetype(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12099 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12100 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12101 int plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12102 int indent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12104 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12106 /* Print current status. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12107 smsg((char_u *)"filetype detection:%s plugin:%s indent:%s",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12108 filetype_detect ? "ON" : "OFF",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12109 filetype_plugin ? (filetype_detect ? "ON" : "(on)") : "OFF",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12110 filetype_indent ? (filetype_detect ? "ON" : "(on)") : "OFF");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12111 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12114 /* Accept "plugin" and "indent" in any order. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12115 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12116 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12117 if (STRNCMP(arg, "plugin", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12118 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12119 plugin = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12120 arg = skipwhite(arg + 6);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12121 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12122 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12123 if (STRNCMP(arg, "indent", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12124 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12125 indent = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12126 arg = skipwhite(arg + 6);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12127 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12128 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12129 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12130 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12131 if (STRCMP(arg, "on") == 0 || STRCMP(arg, "detect") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12133 if (*arg == 'o' || !filetype_detect)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12134 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12135 source_runtime((char_u *)FILETYPE_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12136 filetype_detect = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12137 if (plugin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12138 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12139 source_runtime((char_u *)FTPLUGIN_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12140 filetype_plugin = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12142 if (indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12143 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12144 source_runtime((char_u *)INDENT_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12145 filetype_indent = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12146 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12147 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12148 if (*arg == 'd')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12149 {
9260
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
12150 (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE, NULL);
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 715
diff changeset
12151 do_modelines(0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12152 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12154 else if (STRCMP(arg, "off") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12156 if (plugin || indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12158 if (plugin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12159 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12160 source_runtime((char_u *)FTPLUGOF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12161 filetype_plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12163 if (indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12164 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12165 source_runtime((char_u *)INDOFF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12166 filetype_indent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12168 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12169 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12170 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
12171 source_runtime((char_u *)FTOFF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12172 filetype_detect = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12174 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12175 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12176 EMSG2(_(e_invarg2), arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12177 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12178
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12179 /*
11459
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12180 * ":setfiletype [FALLBACK] {name}"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12181 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12182 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12183 ex_setfiletype(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12184 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12185 if (!did_filetype)
11459
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12186 {
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12187 char_u *arg = eap->arg;
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12188
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12189 if (STRNCMP(arg, "FALLBACK ", 9) == 0)
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12190 arg += 9;
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12191
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12192 set_option_value((char_u *)"filetype", 0L, arg, OPT_LOCAL);
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12193 if (arg != eap->arg)
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12194 did_filetype = FALSE;
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
12195 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12197 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12199 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12200 ex_digraphs(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12202 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12203 if (*eap->arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12204 putdigraph(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12205 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12206 listdigraphs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12207 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12208 EMSG(_("E196: No digraphs in this version"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12209 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12211
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12212 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12213 ex_set(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12215 int flags = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12217 if (eap->cmdidx == CMD_setlocal)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12218 flags = OPT_LOCAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12219 else if (eap->cmdidx == CMD_setglobal)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12220 flags = OPT_GLOBAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12221 #if defined(FEAT_EVAL) && defined(FEAT_AUTOCMD) && defined(FEAT_BROWSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12222 if (cmdmod.browse && flags == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12223 ex_options(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12224 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12225 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12226 (void)do_set(eap->arg, flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12227 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12229 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12230 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12231 * ":nohlsearch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12232 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12233 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12234 ex_nohlsearch(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12235 {
5458
6ae816249627 updated for version 7.4.079
Bram Moolenaar <bram@vim.org>
parents: 5245
diff changeset
12236 SET_NO_HLSEARCH(TRUE);
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
12237 redraw_all_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12238 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12239
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12240 /*
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12241 * ":[N]match {group} {pattern}"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12242 * Sets nextcmd to the start of the next command, if any. Also called when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12243 * skipping commands to find the next command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12244 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12245 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12246 ex_match(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12247 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12248 char_u *p;
1349
da1d62fe5379 updated for version 7.1-063
vimboss
parents: 1326
diff changeset
12249 char_u *g = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12250 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12251 int c;
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1322
diff changeset
12252 int id;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12253
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12254 if (eap->line2 <= 3)
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1322
diff changeset
12255 id = eap->line2;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12256 else
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12257 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12258 EMSG(e_invcmd);
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12259 return;
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
12260 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12261
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12262 /* First clear any old pattern. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12263 if (!eap->skip)
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1322
diff changeset
12264 match_delete(curwin, id, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12265
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12266 if (ends_excmd(*eap->arg))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12267 end = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12268 else if ((STRNICMP(eap->arg, "none", 4) == 0
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
12269 && (VIM_ISWHITE(eap->arg[4]) || ends_excmd(eap->arg[4]))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12270 end = eap->arg + 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12271 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12272 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12273 p = skiptowhite(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12274 if (!eap->skip)
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1322
diff changeset
12275 g = vim_strnsave(eap->arg, (int)(p - eap->arg));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12276 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12277 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12279 /* There must be two arguments. */
7262
fadf7fc3b666 commit https://github.com/vim/vim/commit/9a7d58e42ed54406437c2394e5a489ee6a9e4220
Christian Brabandt <cb@256bit.org>
parents: 7168
diff changeset
12280 vim_free(g);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12281 EMSG2(_(e_invarg2), eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12282 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12283 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12284 end = skip_regexp(p + 1, *p, TRUE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12285 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12286 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12287 if (*end != NUL && !ends_excmd(*skipwhite(end + 1)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12288 {
7262
fadf7fc3b666 commit https://github.com/vim/vim/commit/9a7d58e42ed54406437c2394e5a489ee6a9e4220
Christian Brabandt <cb@256bit.org>
parents: 7168
diff changeset
12289 vim_free(g);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12290 eap->errmsg = e_trailing;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12291 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12292 }
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
12293 if (*end != *p)
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
12294 {
7262
fadf7fc3b666 commit https://github.com/vim/vim/commit/9a7d58e42ed54406437c2394e5a489ee6a9e4220
Christian Brabandt <cb@256bit.org>
parents: 7168
diff changeset
12295 vim_free(g);
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
12296 EMSG2(_(e_invarg2), p);
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
12297 return;
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
12298 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12299
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12300 c = *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12301 *end = NUL;
6947
1efa7c2b9368 patch 7.4.792
Bram Moolenaar <bram@vim.org>
parents: 6838
diff changeset
12302 match_add(curwin, g, p + 1, 10, id, NULL, NULL);
1326
22886f3d882d updated for version 7.1-040
vimboss
parents: 1322
diff changeset
12303 vim_free(g);
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
12304 *end = c;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12305 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12307 eap->nextcmd = find_nextcmd(end);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12308 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12309 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12310
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12311 #ifdef FEAT_CRYPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12312 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12313 * ":X": Get crypt key
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12314 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12315 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12316 ex_X(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12317 {
6353
60659773c73b updated for version 7.4.509
Bram Moolenaar <bram@vim.org>
parents: 6322
diff changeset
12318 crypt_check_current_method();
6122
18ac55444b37 updated for version 7.4.399
Bram Moolenaar <bram@vim.org>
parents: 6116
diff changeset
12319 (void)crypt_get_key(TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12321 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12323 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12324 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12325 ex_fold(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12326 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12327 if (foldManualAllowed(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12328 foldCreate(eap->line1, eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12329 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12330
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12331 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12332 ex_foldopen(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12333 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12334 opFoldRange(eap->line1, eap->line2, eap->cmdidx == CMD_foldopen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12335 eap->forceit, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12336 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12337
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12338 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
12339 ex_folddo(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12340 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12341 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12342
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12343 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12344 start_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12345 #endif
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12346
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12347 /* First set the marks for all lines closed/open. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12348 for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12349 if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12350 ml_setmarked(lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12352 /* Execute the command on the marked lines. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12353 global_exe(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12354 ml_clearmarked(); /* clear rest of the marks */
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12355 #ifdef FEAT_CLIPBOARD
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12356 end_global_changes();
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12357 #endif
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12358 }
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
12359 #endif