annotate src/ex_docmd.c @ 27970:212c5894b8b1 v8.2.4510

patch 8.2.4510: Vim9: shortening commands leads to confusing script Commit: https://github.com/vim/vim/commit/204852ae2adfdde10c656ca7f14e5b4207a69172 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 5 12:56:44 2022 +0000 patch 8.2.4510: Vim9: shortening commands leads to confusing script Problem: Vim9: shortening commands leads to confusing script. Solution: In Vim9 script require at least ":cont" for ":continue", "const" instead of "cons", "break" instead of "brea", "catch" instead of "cat", "else" instead of "el" "elseif" instead of "elsei" "endfor" instead of "endfo" "endif" instead of "en" "endtry" instead of "endt", "finally" instead of "fina", "throw" instead of "th", "while" instead of "wh".
author Bram Moolenaar <Bram@vim.org>
date Sat, 05 Mar 2022 14:00:03 +0100
parents 2485bf68de34
children 442ca2007bec
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_EVAL
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
23 static char_u *do_one_cmd(char_u **, int, cstack_T *, char_u *(*fgetline)(int, void *, int, getline_opt_T), void *cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 #else
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
25 static char_u *do_one_cmd(char_u **, int, char_u *(*fgetline)(int, void *, int, getline_opt_T), void *cookie);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
26 static int if_level = 0; // depth in :if
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
28 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
29
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 #ifndef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 # define ex_emenu ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 # define ex_menu ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 # define ex_menutranslate ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
35 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
36 static void ex_doautocmd(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
37 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
38 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
39 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
40 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
41 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
42 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
43 static void ex_blast(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
44 static char_u *getargcmd(char_u **);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
45 static int getargopt(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 #ifndef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 # define ex_make ex_ni
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
48 # define ex_cbuffer ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 # define ex_cc ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 # define ex_cnext ex_ni
16505
28e3ba82d8c8 patch 8.1.1256: cannot navigate through errors relative to the cursor
Bram Moolenaar <Bram@vim.org>
parents: 16479
diff changeset
51 # define ex_cbelow ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 # define ex_cfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 # define qf_list ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 # define qf_age ex_ni
9538
26da1efa9e46 commit https://github.com/vim/vim/commit/f6acffbe83e622542d9fdf3066f51933e46e4954
Christian Brabandt <cb@256bit.org>
parents: 9536
diff changeset
55 # define qf_history ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 # define ex_helpgrep ex_ni
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
57 # define ex_vimgrep ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 #endif
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
59 #if !defined(FEAT_QUICKFIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 # define ex_cclose ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 # define ex_copen ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 # define ex_cwindow ex_ni
9432
abb72f0b9e06 commit https://github.com/vim/vim/commit/dcb170018642ec144cd87d9d9fe076575b8d1263
Christian Brabandt <cb@256bit.org>
parents: 9284
diff changeset
63 # define ex_cbottom ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 #endif
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
65 #if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
66 # define ex_cexpr ex_ni
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
67 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
69 static linenr_T default_address(exarg_T *eap);
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
70 static linenr_T get_address(exarg_T *, char_u **, cmd_addr_T addr_type, int skip, int silent, int to_other_file, int address_count);
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
71 static void address_default_all(exarg_T *eap);
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
72 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
73 #if !defined(FEAT_PERL) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
74 || !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
75 || !defined(FEAT_TCL) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
76 || !defined(FEAT_RUBY) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
77 || !defined(FEAT_LUA) \
aee7e1e5e0ce Build problem when using all interfaces except Lua.
Bram Moolenaar <bram@vim.org>
parents: 2330
diff changeset
78 || !defined(FEAT_MZSCHEME)
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
79 # define HAVE_EX_SCRIPT_NI
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
80 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
81 #endif
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
82 static char *invalid_range(exarg_T *eap);
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
83 static void correct_range(exarg_T *eap);
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
84 #ifdef FEAT_QUICKFIX
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
85 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
86 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
87 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
88 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
89 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
90 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
91 static void ex_quit_all(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
92 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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 static void ex_tabs(exarg_T *eap);
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
102 #if defined(FEAT_QUICKFIX)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
103 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
104 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
105 static void ex_pedit(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 # define ex_pclose ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 # define ex_ptag ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 # define ex_pedit ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
111 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
112 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
113 static void ex_print(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 #ifdef FEAT_BYTEOFF
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
115 static void ex_goto(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 # define ex_goto ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
119 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
120 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
121 static void ex_recover(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
122 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
123 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
124 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
125 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
126 static void ex_edit(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 #ifndef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 # define ex_gui ex_nogui
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
129 static void ex_nogui(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 #endif
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15866
diff changeset
131 #if defined(FEAT_GUI_MSWIN) && 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
132 static void ex_tearoff(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 # define ex_tearoff ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 #endif
13392
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
136 #if (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_GTK) \
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
137 || defined(FEAT_TERM_POPUP_MENU)) && defined(FEAT_MENU)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
138 static void ex_popup(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 # define ex_popup ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 #ifndef FEAT_GUI_MSWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 # define ex_simalt ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 #endif
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
145 #if !defined(FEAT_GUI_MSWIN) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_MOTIF)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 # define gui_mch_find_dialog ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 # define gui_mch_replace_dialog ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 #endif
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
149 #if !defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 # define ex_helpfind ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 #ifndef FEAT_CSCOPE
10373
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
153 # define ex_cscope ex_ni
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
154 # define ex_scscope ex_ni
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
155 # define ex_cstag ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 #ifndef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 # define ex_syntax ex_ni
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2238
diff changeset
159 # define ex_ownsyntax ex_ni
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
160 #endif
4766
ec24ff78a79c updated for version 7.3.1130
Bram Moolenaar <bram@vim.org>
parents: 4764
diff changeset
161 #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
162 # define ex_syntime ex_ni
f824cb97eb92 updated for version 7.3.1129
Bram Moolenaar <bram@vim.org>
parents: 4710
diff changeset
163 #endif
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
164 #ifndef FEAT_SPELL
310
04bf54c587f4 updated for version 7.0082
vimboss
parents: 296
diff changeset
165 # define ex_spell ex_ni
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
166 # define ex_mkspell ex_ni
351
a89aebda7f37 updated for version 7.0091
vimboss
parents: 344
diff changeset
167 # define ex_spelldump ex_ni
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 698
diff changeset
168 # define ex_spellinfo ex_ni
372
a698eb686ded updated for version 7.0096
vimboss
parents: 358
diff changeset
169 # define ex_spellrepall ex_ni
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
170 #endif
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
171 #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
172 # 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
173 # 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
174 #endif
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
175 #ifndef FEAT_LUA
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
176 # define ex_lua ex_script_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
177 # define ex_luado ex_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
178 # define ex_luafile ex_ni
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
179 #endif
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
180 #ifndef FEAT_MZSCHEME
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
181 # define ex_mzscheme ex_script_ni
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
182 # define ex_mzfile ex_ni
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
183 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 #ifndef FEAT_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 # define ex_perl ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 # define ex_perldo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 #ifndef FEAT_PYTHON
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 # define ex_python ex_script_ni
4435
9b800f0a757f updated for version 7.3.966
Bram Moolenaar <bram@vim.org>
parents: 4417
diff changeset
190 # define ex_pydo ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 # define ex_pyfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 #endif
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
193 #ifndef FEAT_PYTHON3
2350
06feaf4fe36a Rename some "python3" symbols to "py3", as the command name.
Bram Moolenaar <bram@vim.org>
parents: 2340
diff changeset
194 # define ex_py3 ex_script_ni
4417
c16602758d84 updated for version 7.3.957
Bram Moolenaar <bram@vim.org>
parents: 4365
diff changeset
195 # define ex_py3do ex_ni
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
196 # define ex_py3file ex_ni
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
197 #endif
10722
7598ce51bf2a patch 8.0.0251: not easy to select Python 2 or 3
Christian Brabandt <cb@256bit.org>
parents: 10656
diff changeset
198 #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
199 # 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
200 # 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
201 # 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
202 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 #ifndef FEAT_TCL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 # define ex_tcl ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 # define ex_tcldo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 # define ex_tclfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 #ifndef FEAT_RUBY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 # define ex_ruby ex_script_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 # define ex_rubydo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 # define ex_rubyfile ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 #ifndef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 # define ex_loadkeymap ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
216 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
217 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
218 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
219 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
220 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
221 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
222 static void ex_winsize(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
223 static void ex_wincmd(exarg_T *eap);
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
224 #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
225 static void ex_winpos(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 # define ex_winpos ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
229 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
230 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
231 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
232 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
233 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
234 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
235 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
236 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
237 #ifdef FEAT_PERSISTENT_UNDO
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
238 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
239 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
240 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
241 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
242 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
243 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
244 static void ex_redrawstatus(exarg_T *eap);
15396
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
245 static void ex_redrawtabline(exarg_T *eap);
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
246 static void close_redir(void);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
247 static void ex_mark(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
248 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
249 static void ex_stopinsert(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 #ifdef FEAT_FIND_ID
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
251 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
252 static void ex_findpat(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 # define ex_findpat ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 # define ex_checkpath ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 #endif
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
257 #if defined(FEAT_FIND_ID) && defined(FEAT_QUICKFIX)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
258 static void ex_psearch(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 # define ex_psearch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
262 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
263 static void ex_tag_cmd(exarg_T *eap, char_u *name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 #ifndef FEAT_EVAL
22559
715e8f14f314 patch 8.2.1828: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 22555
diff changeset
265 # define ex_block ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
266 # define ex_break ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
267 # define ex_breakadd ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
268 # define ex_breakdel ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
269 # define ex_breaklist ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
270 # define ex_call ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
271 # define ex_catch ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
272 # define ex_compiler ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
273 # define ex_continue ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
274 # define ex_debug ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
275 # define ex_debuggreedy ex_ni
20528
489cb75c76b6 patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Bram Moolenaar <Bram@vim.org>
parents: 20474
diff changeset
276 # define ex_defcompile ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
277 # define ex_delfunction ex_ni
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
278 # define ex_disassemble ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 # define ex_echo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 # define ex_echohl ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
281 # define ex_else ex_ni
22559
715e8f14f314 patch 8.2.1828: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 22555
diff changeset
282 # define ex_endblock ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
283 # define ex_endfunction ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 # define ex_endif ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
285 # define ex_endtry ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 # define ex_endwhile ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
287 # define ex_eval ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
288 # define ex_execute ex_ni
24535
f522ef9e5ea3 patch 8.2.2807: build fails with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 24533
diff changeset
289 # define ex_incdec ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
290 # define ex_finally ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
291 # define ex_finish ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
292 # define ex_function ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
293 # define ex_if ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
294 # define ex_let ex_ni
22393
d1b9bd52d721 patch 8.2.1745: tiny version doesn't build
Bram Moolenaar <Bram@vim.org>
parents: 22391
diff changeset
295 # define ex_var ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
296 # define ex_lockvar ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
297 # define ex_oldfiles ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
298 # define ex_options ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
299 # define ex_packadd ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
300 # define ex_packloadall ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
301 # define ex_return ex_ni
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
302 # define ex_scriptnames ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 # define ex_throw ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 # define ex_try ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 # define ex_unlet ex_ni
146
5cc0aca13a3f updated for version 7.0046
vimboss
parents: 128
diff changeset
306 # define ex_unlockvar ex_ni
17622
ccbf8c2a47ee patch 8.1.1808: build failure for tiny version
Bram Moolenaar <Bram@vim.org>
parents: 17576
diff changeset
307 # define ex_while ex_ni
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
308 # define ex_import ex_ni
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
309 # define ex_export ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 #endif
17536
e00d12c085a5 patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17496
diff changeset
311 #ifndef FEAT_SESSION
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 # define ex_loadview ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 #endif
17458
cfdef48743ed patch 8.1.1727: code for viminfo support is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17431
diff changeset
314 #ifndef FEAT_VIMINFO
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 # define ex_viminfo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
317 static void ex_behave(exarg_T *eap);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
318 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
319 static void ex_setfiletype(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 #ifndef FEAT_DIFF
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 14
diff changeset
321 # define ex_diffoff ex_ni
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 # define ex_diffpatch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 # define ex_diffgetput ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 # define ex_diffsplit ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 # define ex_diffthis ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 # define ex_diffupdate ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 #endif
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
328 static void ex_digraphs(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 #ifdef FEAT_SEARCH_EXTRA
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
330 static void ex_nohlsearch(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 # define ex_nohlsearch ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 # define ex_match ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 #ifdef FEAT_CRYPT
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
336 static void ex_X(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 # define ex_X ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 #ifdef FEAT_FOLDING
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
341 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
342 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
343 static void ex_folddo(exarg_T *eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 # define ex_fold ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 # define ex_foldopen ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 # define ex_folddo ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 #endif
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
349 #if !(defined(HAVE_LOCALE_H) || defined(X_LOCALE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 # define ex_language ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 #ifndef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 # define ex_sign ex_ni
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 #endif
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
355 #ifndef FEAT_NETBEANS_INTG
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2180
diff changeset
356 # define ex_nbclose ex_ni
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
357 # define ex_nbkey ex_ni
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2180
diff changeset
358 # define ex_nbstart ex_ni
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 28
diff changeset
359 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
361 #ifndef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
362 # define ex_profile ex_ni
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
363 #endif
11621
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
364 #ifndef FEAT_TERMINAL
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
365 # define ex_terminal ex_ni
b8299e742f41 patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents: 11547
diff changeset
366 #endif
16608
0422b14bce58 patch 8.1.1307: cannot reconnect to the X server after it restarted
Bram Moolenaar <Bram@vim.org>
parents: 16576
diff changeset
367 #if !defined(FEAT_X11) || !defined(FEAT_XCLIPBOARD)
0422b14bce58 patch 8.1.1307: cannot reconnect to the X server after it restarted
Bram Moolenaar <Bram@vim.org>
parents: 16576
diff changeset
368 # define ex_xrestore ex_ni
0422b14bce58 patch 8.1.1307: cannot reconnect to the X server after it restarted
Bram Moolenaar <Bram@vim.org>
parents: 16576
diff changeset
369 #endif
18763
49b78d6465e5 patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents: 18715
diff changeset
370 #if !defined(FEAT_PROP_POPUP)
16780
491c01280a5d patch 8.1.1392: build failure in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 16764
diff changeset
371 # define ex_popupclear ex_ni
491c01280a5d patch 8.1.1392: build failure in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 16764
diff changeset
372 #endif
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
373
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 * Declare cmdnames[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 #define DO_DECLARE_EXCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 #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
379 #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
380
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 static char_u dollar_command[2] = {'$', 0};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
385 // Struct for storing a line inside a while/for loop
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 typedef struct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
388 char_u *line; // command line
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
389 linenr_T lnum; // sourcing_lnum of the line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 } wcmd_T;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
393 * 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
394 * This is required, because do_one_cmd() may invoke ex_function(), which
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
395 * reads more lines that may come from the while/for loop.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
396 */
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
397 struct loop_cookie
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
399 garray_T *lines_gap; // growarray with line info
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
400 int current_line; // last read line from growarray
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
401 int repeating; // TRUE when looping a second time
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
402 // When "repeating" is FALSE use "getline" and "cookie" to get lines
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
403 char_u *(*getline)(int, void *, int, getline_opt_T);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 void *cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
407 static char_u *get_loop_line(int c, void *cookie, int indent, getline_opt_T options);
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7703
diff changeset
408 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
409 static void free_cmdlines(garray_T *gap);
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
410
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
411 // Struct to save a few things while debugging. Used in do_cmdline() only.
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
412 struct dbg_stuff
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
413 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
414 int trylevel;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
415 int force_abort;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
416 except_T *caught_stack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
417 char_u *vv_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
418 char_u *vv_throwpoint;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
419 int did_emsg;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
420 int got_int;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
421 int did_throw;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
422 int need_rethrow;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
423 int check_cstack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
424 except_T *current_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
425 };
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
426
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
427 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
428 save_dbg_stuff(struct dbg_stuff *dsp)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
429 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
430 dsp->trylevel = trylevel; trylevel = 0;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
431 dsp->force_abort = force_abort; force_abort = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
432 dsp->caught_stack = caught_stack; caught_stack = NULL;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
433 dsp->vv_exception = v_exception(NULL);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
434 dsp->vv_throwpoint = v_throwpoint(NULL);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
435
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
436 // Necessary for debugging an inactive ":catch", ":finally", ":endtry"
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
437 dsp->did_emsg = did_emsg; did_emsg = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
438 dsp->got_int = got_int; got_int = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
439 dsp->did_throw = did_throw; did_throw = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
440 dsp->need_rethrow = need_rethrow; need_rethrow = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
441 dsp->check_cstack = check_cstack; check_cstack = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
442 dsp->current_exception = current_exception; current_exception = NULL;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
443 }
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
444
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
445 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
446 restore_dbg_stuff(struct dbg_stuff *dsp)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
447 {
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
448 suppress_errthrow = FALSE;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
449 trylevel = dsp->trylevel;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
450 force_abort = dsp->force_abort;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
451 caught_stack = dsp->caught_stack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
452 (void)v_exception(dsp->vv_exception);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
453 (void)v_throwpoint(dsp->vv_throwpoint);
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
454 did_emsg = dsp->did_emsg;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
455 got_int = dsp->got_int;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
456 did_throw = dsp->did_throw;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
457 need_rethrow = dsp->need_rethrow;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
458 check_cstack = dsp->check_cstack;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
459 current_exception = dsp->current_exception;
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
460 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 * do_exmode(): Repeatedly get commands for the "Ex" mode, until the ":vi"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 * command is given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
468 do_exmode(
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
469 int improved) // TRUE for "improved Ex" mode
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 int save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 int prev_msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 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
474 varnumber_T changedtick;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
475
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
476 if (improved)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
477 exmode_active = EXMODE_VIM;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
478 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
479 exmode_active = EXMODE_NORMAL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
480 State = NORMAL;
25790
16a7d1154be8 patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents: 25757
diff changeset
481 trigger_modechanged();
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
482
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
483 // When using ":global /pat/ visual" and then "Q" we return to continue
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
484 // the :global command.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
485 if (global_busy)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
486 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 save_msg_scroll = msg_scroll;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
489 ++RedrawingDisabled; // don't redisplay the window
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
490 ++no_wait_return; // don't wait for return
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 #ifdef FEAT_GUI
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
492 // Ignore scrollbar and mouse events in Ex mode
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 ++hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
496 msg(_("Entering Ex mode. Type \"visual\" to go to Normal mode."));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 while (exmode_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
499 // Check for a ":normal" command and no more characters left.
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
500 if (ex_normal_busy > 0 && typebuf.tb_len == 0)
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
501 {
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
502 exmode_active = FALSE;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
503 break;
6df0106fc595 updated for version 7.0049
vimboss
parents: 153
diff changeset
504 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 msg_scroll = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 ex_pressedreturn = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 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
509 changedtick = CHANGEDTICK(curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 prev_msg_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 prev_line = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 if (improved)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 do_cmdline(NULL, getexline, NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 do_cmdline(NULL, getexmodeline, NULL, DOCMD_NOWAIT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 lines_left = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
521 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
522 || changedtick != CHANGEDTICK(curbuf)) && !ex_no_reprint)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
523 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
524 if (curbuf->b_ml.ml_flags & ML_EMPTY)
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
525 emsg(_(e_empty_buffer));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
526 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
527 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
528 if (ex_pressedreturn)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
529 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
530 // go up one line, to overwrite the ":<CR>" line, so the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
531 // output doesn't contain empty lines.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
532 msg_row = prev_msg_row;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
533 if (prev_msg_row == Rows - 1)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
534 msg_row--;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
535 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
536 msg_col = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
537 print_line_no_prefix(curwin->w_cursor.lnum, FALSE, FALSE);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
538 msg_clr_eos();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
539 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
540 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
541 else if (ex_pressedreturn && !ex_no_reprint) // must be at EOF
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
542 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
543 if (curbuf->b_ml.ml_flags & ML_EMPTY)
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
544 emsg(_(e_empty_buffer));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
545 else
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
546 emsg(_(e_at_end_of_file));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
547 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 --hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 update_screen(CLEAR);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 /*
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
561 * Print the executed command for when 'verbose' is set.
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
562 * When "lnum" is 0 only print the command.
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
563 */
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
564 static void
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
565 msg_verbose_cmd(linenr_T lnum, char_u *cmd)
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
566 {
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
567 ++no_wait_return;
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
568 verbose_enter_scroll();
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
569
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
570 if (lnum == 0)
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
571 smsg(_("Executing: %s"), cmd);
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
572 else
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
573 smsg(_("line %ld: %s"), (long)lnum, cmd);
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
574 if (msg_silent == 0)
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
575 msg_puts("\n"); // don't overwrite this
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
576
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
577 verbose_leave_scroll();
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
578 --no_wait_return;
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
579 }
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
580
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
581 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 * Execute a simple command line. Used for translated commands like "*".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
585 do_cmdline_cmd(char_u *cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 return do_cmdline(cmd, NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 /*
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
592 * Execute the "+cmd" argument of "edit +cmd fname" and the like.
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
593 * This allows for using a range without ":" in Vim9 script.
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
594 */
25567
0082503ff2ff patch 8.2.3320: some local functions are not static
Bram Moolenaar <Bram@vim.org>
parents: 25523
diff changeset
595 static int
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
596 do_cmd_argument(char_u *cmd)
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
597 {
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
598 return do_cmdline(cmd, NULL, NULL,
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
599 DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED|DOCMD_RANGEOK);
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
600 }
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
601
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
602 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 * do_cmdline(): execute one Ex command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 * 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
606 * If "cmdline" is NULL, or more lines are needed, fgetline() is used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 * 2. Split up in parts separated with '|'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 * This function can be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 * flags:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 * DOCMD_VERBOSE - The command will be included in the error message.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 * 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
614 * DOCMD_REPEAT - Repeat execution until fgetline() returns NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 * DOCMD_KEYTYPED - Don't reset KeyTyped.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 * return FAIL if cmdline could not be executed, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
622 do_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
623 char_u *cmdline,
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
624 char_u *(*fgetline)(int, void *, int, getline_opt_T),
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
625 void *cookie, // argument for fgetline()
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
626 int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
628 char_u *next_cmdline; // next cmd to execute
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
629 char_u *cmdline_copy = NULL; // copy of cmd line
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
630 int used_getline = FALSE; // used "fgetline" to obtain command
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
631 static int recursive = 0; // recursive depth
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 int msg_didout_before_start = 0;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
633 int count = 0; // line number count
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
634 int did_inc = FALSE; // incremented RedrawingDisabled
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 int retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 #ifdef FEAT_EVAL
18904
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
637 cstack_T cstack; // conditional stack
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
638 garray_T lines_ga; // keep lines for ":while"/":for"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
639 int current_line = 0; // active line in lines_ga
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
640 int current_line_before = 0;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
641 char_u *fname = NULL; // function or script name
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
642 linenr_T *breakpoint = NULL; // ptr to breakpoint field in cookie
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
643 int *dbg_tick = NULL; // ptr to dbg_tick field in cookie
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
644 struct dbg_stuff debug_saved; // saved things for debug mode
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 int initial_trylevel;
20538
9f921ba86d05 patch 8.2.0823: Vim9: script reload test is disabled
Bram Moolenaar <Bram@vim.org>
parents: 20536
diff changeset
646 msglist_T **saved_msg_list = NULL;
22685
80b4e604d1d5 patch 8.2.1891: Vim9: skipping over expression doesn't handle line breaks
Bram Moolenaar <Bram@vim.org>
parents: 22616
diff changeset
647 msglist_T *private_msg_list = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
649 // "fgetline" and "cookie" passed to do_one_cmd()
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
650 char_u *(*cmd_getline)(int, void *, int, getline_opt_T);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 void *cmd_cookie;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
652 struct loop_cookie cmd_loop_cookie;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 void *real_cookie;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
654 int getline_is_func;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 #else
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
656 # define cmd_getline fgetline
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 # define cmd_cookie cookie
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
659 static int call_depth = 0; // recursiveness
20009
6eb3c91d9875 patch 8.2.0560: compiler warning in tiny build
Bram Moolenaar <Bram@vim.org>
parents: 20007
diff changeset
660 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
661 // For every pair of do_cmdline()/do_one_cmd() calls, use an extra memory
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
662 // location for storing error messages to be converted to an exception.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
663 // This ensures that the do_errthrow() call in do_one_cmd() does not
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
664 // combine the messages stored by an earlier invocation of do_one_cmd()
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
665 // with the command name of the later one. This would happen when
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
666 // BufWritePost autocommands are executed after a write error.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 saved_msg_list = msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 msg_list = &private_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
671 // It's possible to create an endless loop with ":execute", catch that
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
672 // here. The value of 200 allows nested function calls, ":source", etc.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
673 // 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
674 if (call_depth >= 200
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
675 #ifdef FEAT_EVAL
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
676 && call_depth >= p_mfd
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
677 #endif
8f2191b56d52 commit https://github.com/vim/vim/commit/b094ff4b2be4d8b7364c566a1cc7e27aa4452a50
Christian Brabandt <cb@256bit.org>
parents: 10488
diff changeset
678 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 {
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
680 emsg(_(e_command_too_recursive));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
682 // When converting to an exception, we do not include the command name
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
683 // since this is not an error of the specific command.
18904
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
684 do_errthrow((cstack_T *)NULL, (char_u *)NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 msg_list = saved_msg_list;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 ++call_depth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 #ifdef FEAT_EVAL
23742
1f24fcf5945a patch 8.2.2412: not all fields in "cstack" are initialized
Bram Moolenaar <Bram@vim.org>
parents: 23717
diff changeset
692 CLEAR_FIELD(cstack);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 cstack.cs_idx = -1;
27028
c9474ae175f4 patch 8.2.4043: using int for second argument of ga_init2()
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
694 ga_init2(&lines_ga, sizeof(wcmd_T), 10);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
696 real_cookie = getline_cookie(fgetline, cookie);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
698 // 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
699 getline_is_func = getline_equal(fgetline, cookie, get_func_line);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
700 if (getline_is_func && ex_nesting_level == func_level(real_cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 ++ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
703 // Get the function or script name and the address where the next breakpoint
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
704 // line and the debug tick for a function or script are stored.
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
705 if (getline_is_func)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 fname = func_name(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 breakpoint = func_breakpoint(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 dbg_tick = func_dbg_tick(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 }
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
711 else if (getline_equal(fgetline, cookie, getsourceline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 {
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
713 fname = SOURCING_NAME;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 breakpoint = source_breakpoint(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 dbg_tick = source_dbg_tick(real_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 * Initialize "force_abort" and "suppress_errthrow" at the top level.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 if (!recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 force_abort = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 suppress_errthrow = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 * If requested, store and reset the global values controlling the
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
729 * exception handling (used when debugging). Otherwise clear it to avoid
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
730 * a bogus compiler warning when the optimizer uses inline functions...
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 */
878
64be6e0b070a updated for version 7.0-004
vimboss
parents: 866
diff changeset
732 if (flags & DOCMD_EXCRESET)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
733 save_dbg_stuff(&debug_saved);
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
734 else
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
735 CLEAR_FIELD(debug_saved);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 initial_trylevel = trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 * "did_throw" will be set to TRUE when an exception is being thrown.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 did_throw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 * "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
746 * cancel the whole command line, and any if/endif or loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 * If force_abort is set, we cancel everything.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 */
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
749 #ifdef FEAT_EVAL
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
750 did_emsg_cumul += did_emsg;
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
751 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 did_emsg = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 * KeyTyped is only set when calling vgetc(). Reset it here when not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 * calling vgetc() (sourced command lines).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
758 if (!(flags & DOCMD_KEYTYPED)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
759 && !getline_equal(fgetline, cookie, getexline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 KeyTyped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 * Continue executing command lines:
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
764 * - when inside an ":if", ":while" or ":for"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 * - for multiple commands on one line, separated with '|'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 * - when repeating until there are no more lines (for ":source")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 next_cmdline = cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
771 #ifdef FEAT_EVAL
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
772 getline_is_func = getline_equal(fgetline, cookie, get_func_line);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
773 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
774
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
775 // stop skipping cmds for an error msg after all endif/while/for
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 if (next_cmdline == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 && !force_abort
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 && cstack.cs_idx < 0
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
780 && !(getline_is_func && func_has_abort(real_cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 )
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
783 {
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
784 #ifdef FEAT_EVAL
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
785 did_emsg_cumul += did_emsg;
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
786 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 did_emsg = FALSE;
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
788 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
791 * 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
792 * 2. If no line given: Get an allocated line with fgetline().
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 * 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
794 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
797 // 1. If repeating, get a previous line from lines_ga.
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
798 if (cstack.cs_looplevel > 0 && current_line < lines_ga.ga_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
800 // Each '|' separated command is stored separately in lines_ga, to
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
801 // be able to jump to it. Don't use next_cmdline now.
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
802 VIM_CLEAR(cmdline_copy);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
804 // Check if a function has returned or, unless it has an unclosed
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
805 // try conditional, aborted.
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
806 if (getline_is_func)
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
807 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
808 # ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
809 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
810 func_line_end(real_cookie);
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
811 # endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
812 if (func_has_ended(real_cookie))
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
813 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
814 retval = FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
815 break;
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
816 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
817 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
818 #ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
819 else if (do_profiling == PROF_YES
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
820 && getline_equal(fgetline, cookie, getsourceline))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
821 script_line_end();
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
822 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
824 // 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
825 if (source_finished(fgetline, cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
831 // If breakpoints have been added/deleted need to check for it.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 if (breakpoint != NULL && dbg_tick != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 && *dbg_tick != debug_tick)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
836 getline_equal(fgetline, cookie, getsourceline),
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
837 fname, SOURCING_LNUM);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
839 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 next_cmdline = ((wcmd_T *)(lines_ga.ga_data))[current_line].line;
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
842 SOURCING_LNUM = ((wcmd_T *)(lines_ga.ga_data))[current_line].lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
844 // Did we encounter a breakpoint?
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 if (breakpoint != NULL && *breakpoint != 0
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
846 && *breakpoint <= SOURCING_LNUM)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 {
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
848 dbg_breakpoint(fname, SOURCING_LNUM);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
849 // Find next breakpoint.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
851 getline_equal(fgetline, cookie, getsourceline),
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
852 fname, SOURCING_LNUM);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 }
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
855 # ifdef FEAT_PROFILE
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
856 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
857 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
858 if (getline_is_func)
23717
e3720756acdc patch 8.2.2400: Vim9: compiled functions are not profiled
Bram Moolenaar <Bram@vim.org>
parents: 23709
diff changeset
859 func_line_start(real_cookie, SOURCING_LNUM);
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
860 else if (getline_equal(fgetline, cookie, getsourceline))
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
861 script_line_start();
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
862 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
863 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
867 // 2. If no line given, get an allocated line with fgetline().
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 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 * Need to set msg_didout for the first line after an ":if",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 * otherwise the ":if" will be overwritten.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
874 if (count == 1 && getline_equal(fgetline, cookie, getexline))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 msg_didout = TRUE;
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
876 if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 #endif
23398
40f824f5c7c7 patch 8.2.2242: Vim9: bar line continuation does not work at script level
Bram Moolenaar <Bram@vim.org>
parents: 23390
diff changeset
882 , in_vim9script() ? GETLINE_CONCAT_CONTBAR
40f824f5c7c7 patch 8.2.2242: Vim9: bar line continuation does not work at script level
Bram Moolenaar <Bram@vim.org>
parents: 23390
diff changeset
883 : GETLINE_CONCAT_CONT)) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
885 // Don't call wait_return for aborted command line. The NULL
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
886 // returned for the end of a sourced file or executed function
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
887 // doesn't do this.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 if (KeyTyped && !(flags & DOCMD_REPEAT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 used_getline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 * Keep the first typed line. Clear it when more lines are typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 if (flags & DOCMD_KEEPLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 vim_free(repeat_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 if (count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 repeat_cmdline = vim_strsave(next_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 repeat_cmdline = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
908 // 3. Make a copy of the command so we can mess with it.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 else if (cmdline_copy == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 next_cmdline = vim_strsave(next_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 if (next_cmdline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 {
25306
078edc1821bf patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 25304
diff changeset
914 emsg(_(e_out_of_memory));
7
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 cmdline_copy = next_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 /*
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
923 * Inside a while/for loop, and when the command looks like a ":while"
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
924 * or ":for", the line is stored, because we may need it later when
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
925 * looping.
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
926 *
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
927 * When there is a '|' and another command, it is stored separately,
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
928 * because we need to be able to jump back to it from an
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
929 * :endwhile/:endfor.
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
930 *
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
931 * Pass a different "fgetline" function to do_one_cmd() below,
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
932 * that it stores lines in or reads them from "lines_ga". Makes it
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
933 * possible to define a function inside a while/for loop and handles
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
934 * line continuation.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 */
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
936 if ((cstack.cs_looplevel > 0 || has_loop_cmd(next_cmdline)))
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
937 {
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
938 cmd_getline = get_loop_line;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
939 cmd_cookie = (void *)&cmd_loop_cookie;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
940 cmd_loop_cookie.lines_gap = &lines_ga;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
941 cmd_loop_cookie.current_line = current_line;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
942 cmd_loop_cookie.getline = fgetline;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
943 cmd_loop_cookie.cookie = cookie;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
944 cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
945
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
946 // Save the current line when encountering it the first time.
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
947 if (current_line == lines_ga.ga_len
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
948 && store_loop_line(&lines_ga, next_cmdline) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 retval = FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 }
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
953 current_line_before = current_line;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
954 }
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
955 else
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
956 {
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
957 cmd_getline = fgetline;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
958 cmd_cookie = cookie;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
959 }
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
960
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 did_endif = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 if (count++ == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 * All output from the commands is put below each other, without
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 * waiting for a return. Don't do this when executing commands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 * from a script or when being called recursive (e.g. for ":e
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 * +command file").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 if (!(flags & DOCMD_NOWAIT) && !recursive)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 msg_didout_before_start = msg_didout;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
975 msg_didany = FALSE; // no output yet
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 msg_start();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
977 msg_scroll = TRUE; // put messages below each other
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
978 ++no_wait_return; // don't wait for return until finished
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 ++RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 did_inc = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983
20575
501b72481d0a patch 8.2.0841: 'verbose' value 16 causes duplicate output
Bram Moolenaar <Bram@vim.org>
parents: 20538
diff changeset
984 if ((p_verbose >= 15 && SOURCING_NAME != NULL) || p_verbose >= 16)
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
985 msg_verbose_cmd(SOURCING_LNUM, cmdline_copy);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 * 2. Execute one '|' separated command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 * do_one_cmd() will return NULL if there is no trailing '|'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 * "cmdline_copy" can change, e.g. for '%' and '#' expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 ++recursive;
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
993 next_cmdline = do_one_cmd(&cmdline_copy, flags,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 &cstack,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 cmd_getline, cmd_cookie);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 --recursive;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 #ifdef FEAT_EVAL
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1001 if (cmd_cookie == (void *)&cmd_loop_cookie)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1002 // Use "current_line" from "cmd_loop_cookie", it may have been
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1003 // incremented when defining a function.
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1004 current_line = cmd_loop_cookie.current_line;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 if (next_cmdline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 {
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
1009 VIM_CLEAR(cmdline_copy);
17652
9efb4dda9720 patch 8.1.1823: command line history code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17650
diff changeset
1010
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 * If the command was typed, remember it for the ':' register.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 * Do this AFTER executing the command to make :@: work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1015 if (getline_equal(fgetline, cookie, getexline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 && new_last_cmdline != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 vim_free(last_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 last_cmdline = new_last_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 new_last_cmdline = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1025 // need to copy the command after the '|' to cmdline_copy, for the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1026 // next do_one_cmd()
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
1027 STRMOVE(cmdline_copy, next_cmdline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 next_cmdline = cmdline_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1033 // reset did_emsg for a function that is not aborted by an error
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 if (did_emsg && !force_abort
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1035 && getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 && !func_has_abort(real_cookie))
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
1037 {
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
1038 // did_emsg_cumul is not set here
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 did_emsg = FALSE;
22948
707b90980de5 patch 8.2.2021: Vim9: get E1099 when autocommand resets did_emsg
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
1040 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1042 if (cstack.cs_looplevel > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 ++current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1047 * An ":endwhile", ":endfor" and ":continue" is handled here.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1048 * If we were executing commands, jump back to the ":while" or
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1049 * ":for".
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1050 * If we were not executing commands, decrement cs_looplevel.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1052 if (cstack.cs_lflags & (CSL_HAD_CONT | CSL_HAD_ENDLOOP))
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1053 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1054 cstack.cs_lflags &= ~(CSL_HAD_CONT | CSL_HAD_ENDLOOP);
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1055
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1056 // Jump back to the matching ":while" or ":for". Be careful
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1057 // not to use a cs_line[] from an entry that isn't a ":while"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1058 // or ":for": It would make "current_line" invalid and can
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1059 // cause a crash.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 if (!did_emsg && !got_int && !did_throw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 && cstack.cs_idx >= 0
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1062 && (cstack.cs_flags[cstack.cs_idx]
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1063 & (CSF_WHILE | CSF_FOR))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 && cstack.cs_line[cstack.cs_idx] >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 && (cstack.cs_flags[cstack.cs_idx] & CSF_ACTIVE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 current_line = cstack.cs_line[cstack.cs_idx];
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1068 // remember we jumped there
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1069 cstack.cs_lflags |= CSL_HAD_LOOP;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1070 line_breakcheck(); // check if CTRL-C typed
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1071
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1072 // Check for the next breakpoint at or after the ":while"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1073 // or ":for".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 if (breakpoint != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 *breakpoint = dbg_find_breakpoint(
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1077 getline_equal(fgetline, cookie, getsourceline),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 *dbg_tick = debug_tick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 }
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1083 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1085 // can only get here with ":endwhile" or ":endfor"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 if (cstack.cs_idx >= 0)
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1087 rewind_conditionals(&cstack, cstack.cs_idx - 1,
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1088 CSF_WHILE | CSF_FOR, &cstack.cs_looplevel);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1093 * For a ":while" or ":for" we need to remember the line number.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1095 else if (cstack.cs_lflags & CSL_HAD_LOOP)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1096 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1097 cstack.cs_lflags &= ~CSL_HAD_LOOP;
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1098 cstack.cs_line[cstack.cs_idx] = current_line_before;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1102 // Check for the next breakpoint after a watchexpression
13262
69278c25429d patch 8.0.1505: debugger can't break on a condition
Christian Brabandt <cb@256bit.org>
parents: 13244
diff changeset
1103 if (breakpoint != NULL && has_watchexpr())
69278c25429d patch 8.0.1505: debugger can't break on a condition
Christian Brabandt <cb@256bit.org>
parents: 13244
diff changeset
1104 {
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
1105 *breakpoint = dbg_find_breakpoint(FALSE, fname, SOURCING_LNUM);
13262
69278c25429d patch 8.0.1505: debugger can't break on a condition
Christian Brabandt <cb@256bit.org>
parents: 13244
diff changeset
1106 *dbg_tick = debug_tick;
69278c25429d patch 8.0.1505: debugger can't break on a condition
Christian Brabandt <cb@256bit.org>
parents: 13244
diff changeset
1107 }
69278c25429d patch 8.0.1505: debugger can't break on a condition
Christian Brabandt <cb@256bit.org>
parents: 13244
diff changeset
1108
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 * When not inside any ":while" loop, clear remembered lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1112 if (cstack.cs_looplevel == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 if (lines_ga.ga_len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 {
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
1116 SOURCING_LNUM =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 ((wcmd_T *)lines_ga.ga_data)[lines_ga.ga_len - 1].lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 free_cmdlines(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 current_line = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1124 * A ":finally" makes did_emsg, got_int, and did_throw pending for
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1125 * being restored at the ":endtry". Reset them here and set the
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1126 * ACTIVE and FINALLY flags, so that the finally clause gets executed.
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1127 * This includes the case where a missing ":endif", ":endwhile" or
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1128 * ":endfor" was detected by the ":finally" itself.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 */
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1130 if (cstack.cs_lflags & CSL_HAD_FINA)
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1131 {
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1132 cstack.cs_lflags &= ~CSL_HAD_FINA;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1133 report_make_pending(cstack.cs_pending[cstack.cs_idx]
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1134 & (CSTP_ERROR | CSTP_INTERRUPT | CSTP_THROW),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 did_throw ? (void *)current_exception : NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 did_emsg = got_int = did_throw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 cstack.cs_flags[cstack.cs_idx] |= CSF_ACTIVE | CSF_FINALLY;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1140 // Update global "trylevel" for recursive calls to do_cmdline() from
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1141 // within this loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 trylevel = initial_trylevel + cstack.cs_trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 /*
1190
4e90dc161511 updated for version 7.1b
vimboss
parents: 1132
diff changeset
1145 * If the outermost try conditional (across function calls and sourced
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 * files) is aborted because of an error, an interrupt, or an uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 * exception, cancel everything. If it is left normally, reset
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 * force_abort to get the non-EH compatible abortion behavior for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 * the rest of the script.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 if (trylevel == 0 && !did_emsg && !got_int && !did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 force_abort = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1154 // Convert an interrupt to an exception if appropriate.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 (void)do_intthrow(&cstack);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1156 #endif // FEAT_EVAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 * Continue executing command lines when:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 * - no CTRL-C typed, no aborting error, no exception thrown or try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 * conditionals need to be checked for executing finally clauses or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 * catching an interrupt exception
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 * - didn't get an error message or lines are not typed
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1165 * - there is a command after '|', inside a :if, :while, :for or :try, or
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 * looping for ":source" command or function call.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 while (!((got_int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 #ifdef FEAT_EVAL
24555
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24543
diff changeset
1170 || (did_emsg && (force_abort || in_vim9script()))
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24543
diff changeset
1171 || did_throw
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 && cstack.cs_trylevel == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 )
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1178 && !(did_emsg
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1179 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1180 // Keep going when inside try/catch, so that the error can be
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1181 // deal with, except when it is a syntax error, it may cause
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1182 // the :endtry to be missed.
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1183 && (cstack.cs_trylevel == 0 || did_emsg_syntax)
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1184 #endif
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1185 && used_getline
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1186 && (getline_equal(fgetline, cookie, getexmodeline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1187 || getline_equal(fgetline, cookie, getexline)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 && (next_cmdline != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 || cstack.cs_idx >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 || (flags & DOCMD_REPEAT)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 vim_free(cmdline_copy);
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1195 did_emsg_syntax = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 free_cmdlines(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 ga_clear(&lines_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 if (cstack.cs_idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 * If a sourced file or executed function ran to its end, report the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 * unclosed conditional.
24555
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24543
diff changeset
1205 * In Vim9 script do not give a second error, executing aborts after
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24543
diff changeset
1206 * the first one.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 */
24555
83877a1b66fd patch 8.2.2817: Vim9: script sourcing continues after an error
Bram Moolenaar <Bram@vim.org>
parents: 24543
diff changeset
1208 if (!got_int && !did_throw && !(did_emsg && in_vim9script())
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1209 && ((getline_equal(fgetline, cookie, getsourceline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1210 && !source_finished(fgetline, cookie))
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1211 || (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 && !func_has_ended(real_cookie))))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
1215 emsg(_(e_missing_endtry));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 else if (cstack.cs_flags[cstack.cs_idx] & CSF_WHILE)
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
1217 emsg(_(e_missing_endwhile));
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1218 else if (cstack.cs_flags[cstack.cs_idx] & CSF_FOR)
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
1219 emsg(_(e_missing_endfor));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 else
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
1221 emsg(_(e_missing_endif));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 * Reset "trylevel" in case of a ":finish" or ":return" or a missing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 * ":endtry" in a sourced file or executed function. If the try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 * conditional is in its finally clause, ignore anything pending.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 * If it is in a catch clause, finish the caught exception.
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1229 * Also cleanup any "cs_forinfo" structures.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 do
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1232 {
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1233 int idx = cleanup_conditionals(&cstack, 0, TRUE);
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1234
111
a3d7e800ddec updated for version 7.0041
vimboss
parents: 98
diff changeset
1235 if (idx >= 0)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1236 --idx; // remove try block not in its finally clause
77
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1237 rewind_conditionals(&cstack, idx, CSF_WHILE | CSF_FOR,
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1238 &cstack.cs_looplevel);
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1239 }
31e555c6c691 updated for version 7.0032
vimboss
parents: 72
diff changeset
1240 while (cstack.cs_idx >= 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 trylevel = initial_trylevel;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1244 // If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1245 // lack was reported above and the error message is to be converted to an
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1246 // 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
1247 do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 ? (char_u *)"endfunction" : (char_u *)NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 if (trylevel == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 {
22543
1722ed01c729 patch 8.2.1820: Vim9: crash when error happens in timer callback
Bram Moolenaar <Bram@vim.org>
parents: 22442
diff changeset
1252 // Just in case did_throw got set but current_exception wasn't.
1722ed01c729 patch 8.2.1820: Vim9: crash when error happens in timer callback
Bram Moolenaar <Bram@vim.org>
parents: 22442
diff changeset
1253 if (current_exception == NULL)
1722ed01c729 patch 8.2.1820: Vim9: crash when error happens in timer callback
Bram Moolenaar <Bram@vim.org>
parents: 22442
diff changeset
1254 did_throw = FALSE;
1722ed01c729 patch 8.2.1820: Vim9: crash when error happens in timer callback
Bram Moolenaar <Bram@vim.org>
parents: 22442
diff changeset
1255
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 * When an exception is being thrown out of the outermost try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 * conditional, discard the uncaught exception, disable the conversion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 * of interrupts or errors to exceptions, and ensure that no more
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 * commands are executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 if (did_throw)
25445
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1263 handle_did_throw();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 * On an interrupt or an aborting error not converted to an exception,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 * disable the conversion of errors to exceptions. (Interrupts are not
20009
6eb3c91d9875 patch 8.2.0560: compiler warning in tiny build
Bram Moolenaar <Bram@vim.org>
parents: 20007
diff changeset
1268 * converted anymore, here.) This enables also the interrupt message
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 * when force_abort is set and did_emsg unset in case of an interrupt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 * from a finally clause after an error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 else if (got_int || (did_emsg && force_abort))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 suppress_errthrow = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 * The current cstack will be freed when do_cmdline() returns. An uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 * exception will have to be rethrown in the previous cstack. If a function
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 * has just returned or a script file was just finished and the previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 * cstack belongs to the same function or, respectively, script file, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 * will have to be checked for finally clauses to be executed due to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 * ":return" or ":finish". This is done in do_one_cmd().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 if (did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 need_rethrow = TRUE;
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1286 if ((getline_equal(fgetline, cookie, getsourceline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 && ex_nesting_level > source_level(real_cookie))
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1288 || (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 && ex_nesting_level > func_level(real_cookie) + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 if (!did_throw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 check_cstack = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1296 // When leaving a function, reduce nesting level.
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1297 if (getline_equal(fgetline, cookie, get_func_line))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 --ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 * Go to debug mode when returning from a function in which we are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 * single-stepping.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 */
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1303 if ((getline_equal(fgetline, cookie, getsourceline)
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1304 || getline_equal(fgetline, cookie, get_func_line))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 && ex_nesting_level + 1 <= debug_break_level)
2635
1c4ec9ed71ca updated for version 7.3.056
Bram Moolenaar <bram@vim.org>
parents: 2633
diff changeset
1306 do_debug(getline_equal(fgetline, cookie, getsourceline)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 ? (char_u *)_("End of sourced file")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 : (char_u *)_("End of function"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 * Restore the exception environment (done after returning from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 * debugger).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 if (flags & DOCMD_EXCRESET)
8
7edf9b6e4c36 Various changes
vimboss
parents: 7
diff changeset
1316 restore_dbg_stuff(&debug_saved);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 msg_list = saved_msg_list;
19685
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1319
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1320 // Cleanup if "cs_emsg_silent_list" remains.
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1321 if (cstack.cs_emsg_silent_list != NULL)
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1322 {
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1323 eslist_T *elem, *temp;
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1324
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1325 for (elem = cstack.cs_emsg_silent_list; elem != NULL; elem = temp)
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1326 {
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1327 temp = elem->next;
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1328 vim_free(elem);
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1329 }
d64f403289db patch 8.2.0399: various memory leaks
Bram Moolenaar <Bram@vim.org>
parents: 19621
diff changeset
1330 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1331 #endif // FEAT_EVAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 * 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
1335 * hit return before redrawing the screen. With the ":global" command we do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 * this only once after the command is finished.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 if (did_inc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 --no_wait_return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 * When just finished an ":if"-":else" which was typed, no need to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 * wait for hit-return. Also for an error situation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 if (retval == FAIL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 || (did_endif && KeyTyped && !did_emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 need_wait_return = FALSE;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1355 msg_didany = FALSE; // don't wait when restarting edit
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 else if (need_wait_return)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 * The msg_start() above clears msg_didout. The wait_return we do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 * here should not overwrite the command that may be shown before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 * doing that.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 msg_didout |= msg_didout_before_start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 wait_return(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368
3976
67e3b2753a6e updated for version 7.3.743
Bram Moolenaar <bram@vim.org>
parents: 3972
diff changeset
1369 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1370 did_endif = FALSE; // in case do_cmdline used recursively
3976
67e3b2753a6e updated for version 7.3.743
Bram Moolenaar <bram@vim.org>
parents: 3972
diff changeset
1371 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 * Reset if_level, in case a sourced script file contains more ":if" than
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 * ":endif" (could be ":if x | foo | endif").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 if_level = 0;
3972
6e1fe64cf440 updated for version 7.3.741
Bram Moolenaar <bram@vim.org>
parents: 3963
diff changeset
1377 #endif
3963
1773d5aa6437 updated for version 7.3.737
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
1378
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 --call_depth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382
25447
93f8b181db8f patch 8.2.3260: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 25445
diff changeset
1383 #if defined(FEAT_EVAL) || defined(PROTO)
25445
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1384 /*
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1385 * Handle when "did_throw" is set after executing commands.
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1386 */
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1387 void
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1388 handle_did_throw()
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1389 {
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1390 char *p = NULL;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1391 msglist_T *messages = NULL;
25451
6f2384c064e4 patch 8.2.3262: build failure when ABORT_ON_INTERNAL_ERROR is defined
Bram Moolenaar <Bram@vim.org>
parents: 25447
diff changeset
1392 ESTACK_CHECK_DECLARATION
25445
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1393
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1394 /*
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1395 * If the uncaught exception is a user exception, report it as an
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1396 * error. If it is an error exception, display the saved error
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1397 * message now. For an interrupt exception, do nothing; the
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1398 * interrupt message is given elsewhere.
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1399 */
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1400 switch (current_exception->type)
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1401 {
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1402 case ET_USER:
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1403 vim_snprintf((char *)IObuff, IOSIZE,
26948
51ddf6740ac6 patch 8.2.4003: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26941
diff changeset
1404 _(e_exception_not_caught_str),
25445
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1405 current_exception->value);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1406 p = (char *)vim_strsave(IObuff);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1407 break;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1408 case ET_ERROR:
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1409 messages = current_exception->messages;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1410 current_exception->messages = NULL;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1411 break;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1412 case ET_INTERRUPT:
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1413 break;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1414 }
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1415
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1416 estack_push(ETYPE_EXCEPT, current_exception->throw_name,
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1417 current_exception->throw_lnum);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1418 ESTACK_CHECK_SETUP
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1419 current_exception->throw_name = NULL;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1420
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1421 discard_current_exception(); // uses IObuff if 'verbose'
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1422 suppress_errthrow = TRUE;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1423 force_abort = TRUE;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1424
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1425 if (messages != NULL)
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1426 {
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1427 do
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1428 {
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1429 msglist_T *next = messages->next;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1430 int save_compiling = estack_compiling;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1431
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1432 estack_compiling = messages->msg_compiling;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1433 emsg(messages->msg);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1434 vim_free(messages->msg);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1435 vim_free(messages->sfile);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1436 vim_free(messages);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1437 messages = next;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1438 estack_compiling = save_compiling;
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1439 }
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1440 while (messages != NULL);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1441 }
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1442 else if (p != NULL)
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1443 {
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1444 emsg(p);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1445 vim_free(p);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1446 }
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1447 vim_free(SOURCING_NAME);
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1448 ESTACK_CHECK_NOW
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1449 estack_pop();
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1450 }
65f04b6effd5 patch 8.2.3259: when 'indentexpr' causes an error did_throw may hang
Bram Moolenaar <Bram@vim.org>
parents: 25384
diff changeset
1451
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1453 * Obtain a line when inside a ":while" or ":for" loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 static char_u *
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1456 get_loop_line(int c, void *cookie, int indent, getline_opt_T options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 {
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1458 struct loop_cookie *cp = (struct loop_cookie *)cookie;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 wcmd_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 char_u *line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 if (cp->current_line + 1 >= cp->lines_gap->ga_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 if (cp->repeating)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1465 return NULL; // trying to read past ":endwhile"/":endfor"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1466
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1467 // First time inside the ":while"/":for": get line normally.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 if (cp->getline == NULL)
26804
34f1b7d6974a patch 8.2.3930: getcmdline() argument has a misleading type
Bram Moolenaar <Bram@vim.org>
parents: 26771
diff changeset
1469 line = getcmdline(c, 0L, indent, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 else
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1471 line = cp->getline(c, cp->cookie, indent, options);
857
b933657f7c9d updated for version 7.0g01
vimboss
parents: 856
diff changeset
1472 if (line != NULL && store_loop_line(cp->lines_gap, line) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 ++cp->current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 return line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 KeyTyped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 ++cp->current_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line;
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
1481 SOURCING_LNUM = wp->lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 return vim_strsave(wp->line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 * Store a line in "gap" so that a ":while" loop can execute it again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1489 store_loop_line(garray_T *gap, char_u *line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 if (ga_grow(gap, 1) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493 ((wcmd_T *)(gap->ga_data))[gap->ga_len].line = vim_strsave(line);
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
1494 ((wcmd_T *)(gap->ga_data))[gap->ga_len].lnum = SOURCING_LNUM;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 ++gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 /*
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1500 * Free the lines stored for a ":while" or ":for" loop.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1503 free_cmdlines(garray_T *gap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 while (gap->ga_len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 vim_free(((wcmd_T *)(gap->ga_data))[gap->ga_len - 1].line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 --gap->ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 /*
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1514 * 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
1515 * "func". * Otherwise return TRUE when "fgetline" equals "func".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1518 getline_equal(
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
1519 char_u *(*fgetline)(int, void *, int, getline_opt_T),
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1520 void *cookie UNUSED, // argument for fgetline()
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
1521 char_u *(*func)(int, void *, int, getline_opt_T))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 #ifdef FEAT_EVAL
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1524 char_u *(*gp)(int, void *, int, getline_opt_T);
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1525 struct loop_cookie *cp;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1526
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1527 // When "fgetline" is "get_loop_line()" use the "cookie" to find the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1528 // function that's originally used to obtain the lines. This may be
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1529 // nested several levels.
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1530 gp = fgetline;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1531 cp = (struct loop_cookie *)cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1532 while (gp == get_loop_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 gp = cp->getline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 cp = cp->cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 return gp == func;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 #else
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1539 return fgetline == func;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 /*
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1544 * If "fgetline" is get_loop_line(), return the cookie used by the original
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 * getline function. Otherwise return "cookie".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 void *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1548 getline_cookie(
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
1549 char_u *(*fgetline)(int, void *, int, getline_opt_T) UNUSED,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1550 void *cookie) // argument for fgetline()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 {
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
1552 #ifdef FEAT_EVAL
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1553 char_u *(*gp)(int, void *, int, getline_opt_T);
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1554 struct loop_cookie *cp;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1555
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1556 // When "fgetline" is "get_loop_line()" use the "cookie" to find the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1557 // cookie that's originally used to obtain the lines. This may be nested
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1558 // several levels.
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1559 gp = fgetline;
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1560 cp = (struct loop_cookie *)cookie;
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
1561 while (gp == get_loop_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 gp = cp->getline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 cp = cp->cookie;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 return cp;
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
1567 #else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 return cookie;
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
1569 #endif
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
1570 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1572 #if defined(FEAT_EVAL) || defined(PROT)
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1573 /*
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1574 * Get the next line source line without advancing.
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1575 */
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1576 char_u *
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1577 getline_peek(
21883
a427f5f26419 patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents: 21845
diff changeset
1578 char_u *(*fgetline)(int, void *, int, getline_opt_T) UNUSED,
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1579 void *cookie) // argument for fgetline()
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1580 {
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1581 char_u *(*gp)(int, void *, int, getline_opt_T);
21056
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1582 struct loop_cookie *cp;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1583 wcmd_T *wp;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1584
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1585 // When "fgetline" is "get_loop_line()" use the "cookie" to find the
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1586 // cookie that's originally used to obtain the lines. This may be nested
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1587 // several levels.
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1588 gp = fgetline;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1589 cp = (struct loop_cookie *)cookie;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1590 while (gp == get_loop_line)
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1591 {
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1592 if (cp->current_line + 1 < cp->lines_gap->ga_len)
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1593 {
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1594 // executing lines a second time, use the stored copy
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1595 wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line + 1;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1596 return wp->line;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1597 }
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1598 gp = cp->getline;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1599 cp = cp->cookie;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1600 }
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1601 if (gp == getsourceline)
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1602 return source_nextline(cp);
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1603 return NULL;
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1604 }
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1605 #endif
a7c202f5cbe9 patch 8.2.1079: Vim9: no line break allowed in a while loop
Bram Moolenaar <Bram@vim.org>
parents: 21016
diff changeset
1606
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1607
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1608 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1609 * 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
1610 * ":bwipeout", etc.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1611 * Returns the buffer number.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1612 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1613 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1614 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
1615 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1616 buf_T *buf;
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1617 buf_T *nextbuf;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1618 int count = offset;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1619
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1620 buf = firstbuf;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1621 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
1622 buf = buf->b_next;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1623 while (count != 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1624 {
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1625 count += (offset < 0) ? 1 : -1;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1626 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
1627 if (nextbuf == NULL)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1628 break;
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1629 buf = nextbuf;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1630 if (addr_type == ADDR_LOADED_BUFFERS)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1631 // skip over unloaded buffers
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1632 while (buf->b_ml.ml_mfp == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1633 {
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1634 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
1635 if (nextbuf == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1636 break;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1637 buf = nextbuf;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1638 }
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1639 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1640 // we might have gone too far, last buffer is not loadedd
6417
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1641 if (addr_type == ADDR_LOADED_BUFFERS)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1642 while (buf->b_ml.ml_mfp == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1643 {
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1644 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
1645 if (nextbuf == NULL)
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1646 break;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1647 buf = nextbuf;
77fe94082f53 updated for version 7.4.539
Bram Moolenaar <bram@vim.org>
parents: 6409
diff changeset
1648 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1649 return buf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1650 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1651
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
1652 /*
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
1653 * Return the window number of "win".
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
1654 * When "win" is NULL return the number of windows.
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
1655 */
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1656 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1657 current_win_nr(win_T *win)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1658 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1659 win_T *wp;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1660 int nr = 0;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1661
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
1662 FOR_ALL_WINDOWS(wp)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1663 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1664 ++nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1665 if (wp == win)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1666 break;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1667 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1668 return nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1669 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1670
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1671 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1672 current_tab_nr(tabpage_T *tab)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1673 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1674 tabpage_T *tp;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1675 int nr = 0;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1676
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
1677 FOR_ALL_TABPAGES(tp)
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1678 {
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1679 ++nr;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1680 if (tp == tab)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1681 break;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1682 }
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1683 return nr;
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
21357
72bf1b368cfe patch 8.2.1229: build error without the eval feature
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1686 static int
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1687 comment_start(char_u *p, int starts_with_colon UNUSED)
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1688 {
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1689 #ifdef FEAT_EVAL
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1690 if (in_vim9script())
23179
821701ecbde7 patch 8.2.2135: Vim9: #{ still seen as start of dict in some places
Bram Moolenaar <Bram@vim.org>
parents: 23171
diff changeset
1691 return p[0] == '#' && !starts_with_colon;
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1692 #endif
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1693 return *p == '"';
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1694 }
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1695
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1696 # define CURRENT_WIN_NR current_win_nr(curwin)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1697 # define LAST_WIN_NR current_win_nr(NULL)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1698 # define CURRENT_TAB_NR current_tab_nr(curtab)
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
1699 # define LAST_TAB_NR current_tab_nr(NULL)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1700
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 * Execute one Ex command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 *
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1704 * If "flags" has DOCMD_VERBOSE, the command will be included in the error
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1705 * message.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 * 1. skip comment lines and leading space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 * 2. handle command modifiers
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
1709 * 3. find the command
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1710 * 4. parse range
6400
2c0cddd0df8c updated for version 7.4.531
Bram Moolenaar <bram@vim.org>
parents: 6398
diff changeset
1711 * 5. Parse the command.
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1712 * 6. parse arguments
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1713 * 7. switch on command name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 *
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1715 * Note: "fgetline" can be NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 * This function may be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1720 do_one_cmd(
18904
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1721 char_u **cmdlinep,
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1722 int flags,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 #ifdef FEAT_EVAL
18904
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1724 cstack_T *cstack,
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1725 #endif
21885
72525eabfe61 patch 8.2.1492: build failures
Bram Moolenaar <Bram@vim.org>
parents: 21883
diff changeset
1726 char_u *(*fgetline)(int, void *, int, getline_opt_T),
18904
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1727 void *cookie) // argument for fgetline()
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1728 {
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1729 char_u *p;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1730 linenr_T lnum;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1731 long n;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1732 char *errormsg = NULL; // error message
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1733 char_u *after_modifier = NULL;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1734 exarg_T ea; // Ex command arguments
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1735 cmdmod_T save_cmdmod;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1736 int save_reg_executing = reg_executing;
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1737 int ni; // set when Not Implemented
2bdc2e1f6e1f patch 8.2.0013: not using a typedef for condstack
Bram Moolenaar <Bram@vim.org>
parents: 18849
diff changeset
1738 char_u *cmd;
21357
72bf1b368cfe patch 8.2.1229: build error without the eval feature
Bram Moolenaar <Bram@vim.org>
parents: 21353
diff changeset
1739 int starts_with_colon = FALSE;
19497
639b1d672757 patch 8.2.0306: Vim9: :substitute(pat(repl does not work in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 19481
diff changeset
1740 #ifdef FEAT_EVAL
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
1741 int may_have_range;
23938
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
1742 int vim9script;
22732
4c21a3a47707 patch 8.2.1914: Vim9: cannot put line break in expression for '=' register
Bram Moolenaar <Bram@vim.org>
parents: 22724
diff changeset
1743 int did_set_expr_line = FALSE;
19497
639b1d672757 patch 8.2.0306: Vim9: :substitute(pat(repl does not work in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 19481
diff changeset
1744 #endif
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1745 int sourcing = flags & DOCMD_VERBOSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
1747 CLEAR_FIELD(ea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 ea.line1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 ea.line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 ++ex_nesting_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1754 // 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
1755 if (quitmore
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1757 // avoid that a function call in 'statusline' does this
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
1758 && !getline_equal(fgetline, cookie, get_func_line)
4133
36fd800b8c6c updated for version 7.3.819
Bram Moolenaar <bram@vim.org>
parents: 3997
diff changeset
1759 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1760 // avoid that an autocommand, e.g. QuitPre, does this
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1761 && !getline_equal(fgetline, cookie, getnextac))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 --quitmore;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 * Reset browse, confirm, etc.. They are restored when returning, for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 * recursive calls.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 save_cmdmod = cmdmod;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1770 // "#!anything" is handled like a comment.
930
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1771 if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1772 goto doend;
529c6a431ff5 updated for version 7.0-056
vimboss
parents: 878
diff changeset
1773
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
1774 /*
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
1775 * 1. Skip comment lines and leading white space and colons.
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
1776 * 2. Handle command modifiers.
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
1777 */
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
1778 // The "ea" structure holds the arguments that can be used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 ea.cmd = *cmdlinep;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1780 ea.cmdlinep = cmdlinep;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1781 ea.getline = fgetline;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1782 ea.cookie = cookie;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1783 #ifdef FEAT_EVAL
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1784 ea.cstack = cstack;
19497
639b1d672757 patch 8.2.0306: Vim9: :substitute(pat(repl does not work in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 19481
diff changeset
1785 starts_with_colon = *skipwhite(ea.cmd) == ':';
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1786 #endif
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
1787 if (parse_command_modifiers(&ea, &errormsg, &cmdmod, FALSE) == FAIL)
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
1788 goto doend;
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
1789 apply_cmdmod(&cmdmod);
23944
6e593e0aaadf patch 8.2.2514: Vim9: build error in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 23938
diff changeset
1790 #ifdef FEAT_EVAL
23938
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
1791 vim9script = in_vim9script();
23944
6e593e0aaadf patch 8.2.2514: Vim9: build error in tiny version
Bram Moolenaar <Bram@vim.org>
parents: 23938
diff changeset
1792 #endif
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
1793 after_modifier = ea.cmd;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 ea.skip = did_emsg || got_int || did_throw || (cstack->cs_idx >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 && !(cstack->cs_flags[cstack->cs_idx] & CSF_ACTIVE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 ea.skip = (if_level > 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1803 * 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
1804 *
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1805 * 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
1806 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1807 cmd = ea.cmd;
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1808 #ifdef FEAT_EVAL
22772
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1809 // In Vim9 script a colon is required before the range. This may also be
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1810 // after command modifiers.
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
1811 if (vim9script && (flags & DOCMD_RANGEOK) == 0)
22772
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1812 {
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1813 may_have_range = FALSE;
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1814 for (p = ea.cmd; p >= *cmdlinep; --p)
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1815 {
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1816 if (*p == ':')
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1817 may_have_range = TRUE;
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1818 if (p < ea.cmd && !VIM_ISWHITE(*p))
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1819 break;
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1820 }
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1821 }
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1822 else
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1823 may_have_range = TRUE;
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
1824 if (may_have_range)
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1825 #endif
22260
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
1826 ea.cmd = skip_range(ea.cmd, TRUE, NULL);
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1827
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1828 #ifdef FEAT_EVAL
22772
82a7aff951d2 patch 8.2.1934: Vim9: command modifiers in :def function not tested
Bram Moolenaar <Bram@vim.org>
parents: 22750
diff changeset
1829 if (vim9script && !may_have_range)
20982
bb49b5090a9c patch 8.2.1042: Vim9: cannot put an operator on the next line
Bram Moolenaar <Bram@vim.org>
parents: 20897
diff changeset
1830 {
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
1831 if (ea.cmd == cmd + 1 && *cmd == '$')
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
1832 // should be "$VAR = val"
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
1833 --ea.cmd;
24049
fc4c2beea99a patch 8.2.2566: Vim9: Function name is not recognized
Bram Moolenaar <Bram@vim.org>
parents: 23978
diff changeset
1834 p = find_ex_command(&ea, NULL, lookup_scriptitem, NULL);
22790
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1835 if (ea.cmdidx == CMD_SIZE)
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1836 {
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1837 char_u *ar = skip_range(ea.cmd, TRUE, NULL);
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1838
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1839 // If a ':' before the range is missing, give a clearer error
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1840 // message.
24934
75bd12f3bfeb patch 8.2.3004: Vim9: error for missing colon given while skipping
Bram Moolenaar <Bram@vim.org>
parents: 24846
diff changeset
1841 if (ar > ea.cmd && !ea.skip)
22790
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1842 {
23346
2060f53b7c17 patch 8.2.2216: Vim9: range with missing colon can be hard to spot
Bram Moolenaar <Bram@vim.org>
parents: 23342
diff changeset
1843 semsg(_(e_colon_required_before_range_str), ea.cmd);
22790
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1844 goto doend;
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1845 }
44317eb799d7 patch 8.2.1943: Vim9: wrong error message when colon is missing
Bram Moolenaar <Bram@vim.org>
parents: 22772
diff changeset
1846 }
20982
bb49b5090a9c patch 8.2.1042: Vim9: cannot put an operator on the next line
Bram Moolenaar <Bram@vim.org>
parents: 20897
diff changeset
1847 }
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1848 else
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1849 #endif
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1850 p = find_ex_command(&ea, NULL, NULL, NULL);
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1851
14591
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1852 #ifdef FEAT_EVAL
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1853 # ifdef FEAT_PROFILE
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1854 // Count this line for profiling if skip is TRUE.
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1855 if (do_profiling == PROF_YES
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1856 && (!ea.skip || cstack->cs_idx == 0 || (cstack->cs_idx > 0
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1857 && (cstack->cs_flags[cstack->cs_idx - 1] & CSF_ACTIVE))))
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1858 {
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1859 int skip = did_emsg || got_int || did_throw;
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1860
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1861 if (ea.cmdidx == CMD_catch)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1862 skip = !skip && !(cstack->cs_idx >= 0
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1863 && (cstack->cs_flags[cstack->cs_idx] & CSF_THROWN)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1864 && !(cstack->cs_flags[cstack->cs_idx] & CSF_CAUGHT));
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1865 else if (ea.cmdidx == CMD_else || ea.cmdidx == CMD_elseif)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1866 skip = skip || !(cstack->cs_idx >= 0
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1867 && !(cstack->cs_flags[cstack->cs_idx]
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1868 & (CSF_ACTIVE | CSF_TRUE)));
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1869 else if (ea.cmdidx == CMD_finally)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1870 skip = FALSE;
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1871 else if (ea.cmdidx != CMD_endif
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1872 && ea.cmdidx != CMD_endfor
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1873 && ea.cmdidx != CMD_endtry
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1874 && ea.cmdidx != CMD_endwhile)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1875 skip = ea.skip;
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1876
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1877 if (!skip)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1878 {
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1879 if (getline_equal(fgetline, cookie, get_func_line))
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1880 func_line_exec(getline_cookie(fgetline, cookie));
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1881 else if (getline_equal(fgetline, cookie, getsourceline))
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1882 script_line_exec();
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1883 }
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1884 }
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1885 # endif
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1886
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1887 // May go to debug mode. If this happens and the ">quit" debug command is
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1888 // used, throw an interrupt exception and skip the next command.
14591
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1889 dbg_check_breakpoint(&ea);
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1890 if (!ea.skip && got_int)
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1891 {
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1892 ea.skip = TRUE;
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1893 (void)do_intthrow(cstack);
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1894 }
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1895 #endif
96878f6f5d4c patch 8.1.0309: profiling does not show a count for condition lines
Christian Brabandt <cb@256bit.org>
parents: 14585
diff changeset
1896
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1897 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1898 * 4. parse a range specifier of the form: addr [,addr] [;addr] ..
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 * where 'addr' is:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 * % (entire file)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 * $ [+-NUM]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904 * 'x [+-NUM] (where x denotes a currently defined mark)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1905 * . [+-NUM]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 * [+-NUM]..
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 * NUM
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 * The ea.cmd pointer is updated to point to the first character following the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 * range spec. If an initial address is found, but no second, the upper bound
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 * is equal to the lower.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1914 // 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
1915 if (!IS_USER_CMDIDX(ea.cmdidx))
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1916 {
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1917 if (ea.cmdidx != CMD_SIZE)
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1918 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
1919 else
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1920 ea.addr_type = ADDR_LINES;
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1921
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1922 // :wincmd range depends on the argument.
6506
a5a6f1467b1e updated for version 7.4.580
Bram Moolenaar <bram@vim.org>
parents: 6489
diff changeset
1923 if (ea.cmdidx == CMD_wincmd && p != NULL)
a5a6f1467b1e updated for version 7.4.580
Bram Moolenaar <bram@vim.org>
parents: 6489
diff changeset
1924 get_wincmd_addr_type(skipwhite(p), &ea);
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1925 #ifdef FEAT_QUICKFIX
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1926 // :.cc in quickfix window uses line number
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1927 if ((ea.cmdidx == CMD_cc || ea.cmdidx == CMD_ll) && bt_quickfix(curbuf))
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1928 ea.addr_type = ADDR_OTHER;
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
1929 #endif
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1930 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1931
6489
cba15023c403 updated for version 7.4.572
Bram Moolenaar <bram@vim.org>
parents: 6480
diff changeset
1932 ea.cmd = cmd;
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1933 #ifdef FEAT_EVAL
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
1934 if (!may_have_range)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
1935 ea.line1 = ea.line2 = default_address(&ea);
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
1936 else
21335
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1937 #endif
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1938 if (parse_cmd_address(&ea, &errormsg, FALSE) == FAIL)
af3663df42bf patch 8.2.1218: Vim9: cannot use 'text'->func()
Bram Moolenaar <Bram@vim.org>
parents: 21279
diff changeset
1939 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 /*
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
1942 * 5. Parse the command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1943 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1946 * Skip ':' and any white space
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1947 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 ea.cmd = skipwhite(ea.cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1949 while (*ea.cmd == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 ea.cmd = skipwhite(ea.cmd + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 * If we got a line, but no command, then go to the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954 * If we find a '|' or '\n' we set ea.nextcmd.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 */
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1956 if (*ea.cmd == NUL || comment_start(ea.cmd, starts_with_colon)
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
1957 || (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1960 * strange vi behaviour:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1961 * ":3" jumps to line 3
23954
9c8a20cfa540 patch 8.2.2519: Vim9: no reason to keep strange Vi behavior
Bram Moolenaar <Bram@vim.org>
parents: 23944
diff changeset
1962 * ":3|..." prints line 3 (not in Vim9 script)
9c8a20cfa540 patch 8.2.2519: Vim9: no reason to keep strange Vi behavior
Bram Moolenaar <Bram@vim.org>
parents: 23944
diff changeset
1963 * ":|" prints current line (not in Vim9 script)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 */
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1965 if (ea.skip) // skip this if inside :if
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 goto doend;
26370
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
1967 errormsg = ex_range_without_command(&ea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1971 // If this looks like an undefined user command and there are CmdUndefined
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1972 // autocommands defined, trigger the matching autocommands.
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1973 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
1974 && ASCII_ISUPPER(*ea.cmd)
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1975 && has_cmdundefined())
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1976 {
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1977 int ret;
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1978
6156
20dbceb6f471 updated for version 7.4.415
Bram Moolenaar <bram@vim.org>
parents: 6154
diff changeset
1979 p = ea.cmd;
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1980 while (ASCII_ISALNUM(*p))
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1981 ++p;
20897
213fb059e02e patch 8.2.1000: get error when leaving Ex mode with :visual
Bram Moolenaar <Bram@vim.org>
parents: 20711
diff changeset
1982 p = vim_strnsave(ea.cmd, p - ea.cmd);
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1983 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
1984 vim_free(p);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1985 // If the autocommands did something and didn't cause an error, try
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
1986 // finding the command again.
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1987 p = (ret
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1988 #ifdef FEAT_EVAL
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1989 && !aborting()
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1990 #endif
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
1991 ) ? find_ex_command(&ea, NULL, NULL, NULL) : ea.cmd;
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
1992 }
6154
67edf731a240 updated for version 7.4.414
Bram Moolenaar <bram@vim.org>
parents: 6122
diff changeset
1993
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 if (!ea.skip)
23513
872239543313 patch 8.2.2299: Vim9: invalid memory access making error message flaky
Bram Moolenaar <Bram@vim.org>
parents: 23505
diff changeset
1997 errormsg = _(e_ambiguous_use_of_user_defined_command);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 }
16411
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
2000 // 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
2001 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
2002 && !IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 errormsg = uc_fun_cmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 }
16411
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
2007
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 if (ea.cmdidx == CMD_SIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
2012 STRCPY(IObuff, _(e_not_an_editor_command));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013 if (!sourcing)
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2014 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2015 // If the modifier was parsed OK the error must be in the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2016 // following command
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2017 if (after_modifier != NULL)
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2018 append_command(after_modifier);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2019 else
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2020 append_command(*cmdlinep);
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2021 }
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
2022 errormsg = (char *)IObuff;
3757
3b62d8f36cdf updated for version 7.3.637
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
2023 did_emsg_syntax = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2028 ni = (!IS_USER_CMDIDX(ea.cmdidx)
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2029 && (cmdnames[ea.cmdidx].cmd_func == ex_ni
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2030 #ifdef HAVE_EX_SCRIPT_NI
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2031 || cmdnames[ea.cmdidx].cmd_func == ex_script_ni
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2032 #endif
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
2033 ));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 #ifndef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 * When the expression evaluation is disabled, recognize the ":if" and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 * ":endif" commands and ignore everything in between it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 if (ea.cmdidx == CMD_if)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 ++if_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 if (if_level)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 if (ea.cmdidx == CMD_endif)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 --if_level;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2051 // forced commands
1613
a0a98a0f1281 updated for version 7.1-326
vimboss
parents: 1603
diff changeset
2052 if (*p == '!' && ea.cmdidx != CMD_substitute
a0a98a0f1281 updated for version 7.1-326
vimboss
parents: 1603
diff changeset
2053 && ea.cmdidx != CMD_smagic && ea.cmdidx != CMD_snomagic)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 ea.forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 ea.forceit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 /*
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
2062 * 6. Parse arguments. Then check for errors.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 */
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2064 if (!IS_USER_CMDIDX(ea.cmdidx))
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 827
diff changeset
2065 ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 if (!ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 #ifdef HAVE_SANDBOX
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2070 if (sandbox != 0 && !(ea.argt & EX_SBOXOK))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 {
15748
93b78c4a7cd5 patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents: 15713
diff changeset
2072 // Command not allowed in sandbox.
25320
1e6da8364a02 patch 8.2.3197: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 25306
diff changeset
2073 errormsg = _(e_not_allowed_in_sandbox);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 #endif
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2077 if (restricted != 0 && (ea.argt & EX_RESTRICT))
15748
93b78c4a7cd5 patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents: 15713
diff changeset
2078 {
26966
ac75c145f0a9 patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
2079 errormsg = _(e_command_not_allowed_in_rvim);
15748
93b78c4a7cd5 patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents: 15713
diff changeset
2080 goto doend;
93b78c4a7cd5 patch 8.1.0881: can execute shell commands in rvim through interfaces
Bram Moolenaar <Bram@vim.org>
parents: 15713
diff changeset
2081 }
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2082 if (!curbuf->b_p_ma && (ea.argt & EX_MODIFY))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2084 // Command not allowed in non-'modifiable' buffer
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
2085 errormsg = _(e_cannot_make_changes_modifiable_is_off);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 }
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2088
21487
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2089 if (!IS_USER_CMDIDX(ea.cmdidx))
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2090 {
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2091 #ifdef FEAT_CMDWIN
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2092 if (cmdwin_type != 0 && !(ea.argt & EX_CMDWIN))
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2093 {
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2094 // Command not allowed in the command line window
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
2095 errormsg = _(e_invalid_in_cmdline_window);
21487
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2096 goto doend;
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2097 }
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2098 #endif
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2099 if (text_locked() && !(ea.argt & EX_LOCK_OK))
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2100 {
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2101 // Command not allowed when text is locked
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2102 errormsg = _(get_text_locked_msg());
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2103 goto doend;
5c92877092f9 patch 8.2.1294: Vim9: error when using vim9script in TextYankPost
Bram Moolenaar <Bram@vim.org>
parents: 21475
diff changeset
2104 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 }
14648
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2106
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2107 // Disallow editing another buffer when "curbuf_lock" is set.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2108 // Do allow ":checktime" (it is postponed).
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2109 // Do allow ":edit" (check for an argument later).
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2110 // Do allow ":file" with no arguments (check for an argument later).
21664
60ba361a7fdb patch 8.2.1382: Vim9: using :import in filetype plugin gives an error
Bram Moolenaar <Bram@vim.org>
parents: 21618
diff changeset
2111 if (!(ea.argt & (EX_CMDWIN | EX_LOCK_OK))
14648
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2112 && ea.cmdidx != CMD_checktime
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
2113 && ea.cmdidx != CMD_edit
14648
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2114 && ea.cmdidx != CMD_file
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2115 && !IS_USER_CMDIDX(ea.cmdidx)
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2116 && curbuf_locked())
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2117 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2119 if (!ni && !(ea.argt & EX_RANGE) && ea.addr_count > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 {
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2121 errormsg = _(e_no_range_allowed);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2126 if (!ni && !(ea.argt & EX_BANG) && ea.forceit)
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2127 {
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2128 errormsg = _(e_no_bang_allowed);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 * Don't complain about the range if it is not used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134 * (could happen if line_count is accidentally set to 0).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2135 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2136 if (!ea.skip && !ni && (ea.argt & EX_RANGE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 * If the range is backwards, ask for confirmation and, if given, swap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 * ea.line1 & ea.line2 so it's forwards again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 * When global command is busy, don't ask, will fail below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 if (!global_busy && ea.line1 > ea.line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 {
557
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2145 if (msg_silent == 0)
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2146 {
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2147 if (sourcing || exmode_active)
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2148 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
2149 errormsg = _(e_backwards_range_given);
557
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2150 goto doend;
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2151 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 if (ask_yesno((char_u *)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 _("Backwards range given, OK to swap"), FALSE) != 'y')
557
862863033fdd updated for version 7.0158
vimboss
parents: 534
diff changeset
2154 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 lnum = ea.line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 ea.line1 = ea.line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 ea.line2 = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 if ((errormsg = invalid_range(&ea)) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
2164 if ((ea.addr_type == ADDR_OTHER) && ea.addr_count == 0)
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
2165 // default is 1, not cursor
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 ea.line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 correct_range(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 #ifdef FEAT_FOLDING
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2171 if (((ea.argt & EX_WHOLEFOLD) || ea.addr_count >= 2) && !global_busy
7465
71e2aca45b81 commit https://github.com/vim/vim/commit/a3306958dcb9aadff1e1e8521d908d86b10ac99a
Christian Brabandt <cb@256bit.org>
parents: 7410
diff changeset
2172 && ea.addr_type == ADDR_LINES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2174 // Put the first line at the start of a closed fold, put the last line
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2175 // at the end of a closed fold.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 (void)hasFolding(ea.line1, &ea.line1, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 (void)hasFolding(ea.line2, NULL, &ea.line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2178 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
2183 * For the ":make" and ":grep" commands we insert the 'makeprg'/'grepprg'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2184 * option here, so things like % get expanded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 */
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2186 p = replace_makeprg(&ea, p, cmdlinep);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2187 if (p == NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
2188 goto doend;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 * Skip to start of argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 * Don't do this for the ":!" command, because ":!! -l" needs the space.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 if (ea.cmdidx == CMD_bang)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 ea.arg = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 ea.arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199
14648
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2200 // ":file" cannot be run with an argument when "curbuf_lock" is set
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2201 if (ea.cmdidx == CMD_file && *ea.arg != NUL && curbuf_locked())
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2202 goto doend;
c3222a7342ab patch 8.1.0337: :file fails in quickfix command
Christian Brabandt <cb@256bit.org>
parents: 14640
diff changeset
2203
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 * Check for "++opt=val" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 * Must be first, allow ":w ++enc=utf8 !cmd"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2208 if (ea.argt & EX_ARGOPT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 while (ea.arg[0] == '+' && ea.arg[1] == '+')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 if (getargopt(&ea) == FAIL && !ni)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
2212 errormsg = _(e_invalid_argument);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2218 if (*ea.arg == '>') // append
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2219 {
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2220 if (*++ea.arg != '>') // typed wrong
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
2222 errormsg = _(e_use_w_or_w_gt_gt);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 ea.arg = skipwhite(ea.arg + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 ea.append = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2228 else if (*ea.arg == '!' && ea.cmdidx == CMD_write) // :w !filter
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 ea.usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 if (ea.cmdidx == CMD_read)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 if (ea.forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2239 ea.usefilter = TRUE; // :r! filter if ea.forceit
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 ea.forceit = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2242 else if (*ea.arg == '!') // :r !filter
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 ea.usefilter = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 ea.amount = 1;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2252 while (*ea.arg == *ea.cmd) // count number of '>' or '<'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 ++ea.arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 ++ea.amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 ea.arg = skipwhite(ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 * Check for "+command" argument, before checking for next command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 * Don't do this for ":read !cmd" and ":write !cmd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2264 if ((ea.argt & EX_CMDARG) && !ea.usefilter)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 ea.do_ecmd_cmd = getargcmd(&ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 /*
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2268 * For commands that do not use '|' inside their argument: Check for '|' to
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2269 * separate commands and '"' or '#' to start comments.
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2270 *
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2271 * Otherwise: Check for <newline> to end a shell command.
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2272 * Also do this for ":read !cmd", ":write !cmd" and ":global".
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2273 * Also do this inside a { - } block after :command and :autocmd.
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2274 * Any others?
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2276 if ((ea.argt & EX_TRLBAR) && !ea.usefilter)
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2277 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 separate_nextcmd(&ea);
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2279 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2280 else if (ea.cmdidx == CMD_bang
11806
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
2281 || ea.cmdidx == CMD_terminal
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2282 || ea.cmdidx == CMD_global
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2283 || ea.cmdidx == CMD_vglobal
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
2284 || ea.usefilter
25523
a1804f725a9a patch 8.2.3298: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 25521
diff changeset
2285 #ifdef FEAT_EVAL
a1804f725a9a patch 8.2.3298: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 25521
diff changeset
2286 || inside_block(&ea)
a1804f725a9a patch 8.2.3298: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 25521
diff changeset
2287 #endif
a1804f725a9a patch 8.2.3298: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 25521
diff changeset
2288 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 for (p = ea.arg; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2292 // Remove one backslash before a newline, so that it's possible to
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2293 // pass a newline to the shell and also a newline that is preceded
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2294 // with a backslash. This makes it impossible to end a shell
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2295 // command in a backslash, but that doesn't appear useful.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2296 // Halving the number of backslashes is incompatible with previous
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2297 // versions.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 if (*p == '\\' && p[1] == '\n')
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
2299 STRMOVE(p, p + 1);
26576
5ea6db641b5e patch 8.2.3817: Vim9: Not using NL as command end does not work for :autocmd
Bram Moolenaar <Bram@vim.org>
parents: 26572
diff changeset
2300 else if (*p == '\n' && !(ea.argt & EX_EXPR_ARG))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 ea.nextcmd = p + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2309 if ((ea.argt & EX_DFLALL) && ea.addr_count == 0)
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
2310 address_default_all(&ea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2312 // accept numbered register only when no count allowed (:put)
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2313 if ( (ea.argt & EX_REGSTR)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 && *ea.arg != NUL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2315 // Do not allow register = for user commands
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2316 && (!IS_USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2317 && !((ea.argt & EX_COUNT) && VIM_ISDIGIT(*ea.arg)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 {
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2319 #ifndef FEAT_CLIPBOARD
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2320 // check these explicitly for a more specific error message
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2321 if (*ea.arg == '*' || *ea.arg == '+')
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2322 {
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
2323 errormsg = _(e_invalid_register_name);
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2324 goto doend;
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2325 }
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2326 #endif
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2327 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
2328 && !IS_USER_CMDIDX(ea.cmdidx))))
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2329 {
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2330 ea.regname = *ea.arg++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2332 // for '=' register: accept the rest of the line as an expression
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2333 if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2334 {
25883
826c36b4640b patch 8.2.3475: expression register set by not executed put command
Bram Moolenaar <Bram@vim.org>
parents: 25790
diff changeset
2335 if (!ea.skip)
826c36b4640b patch 8.2.3475: expression register set by not executed put command
Bram Moolenaar <Bram@vim.org>
parents: 25790
diff changeset
2336 {
826c36b4640b patch 8.2.3475: expression register set by not executed put command
Bram Moolenaar <Bram@vim.org>
parents: 25790
diff changeset
2337 set_expr_line(vim_strsave(ea.arg), &ea);
826c36b4640b patch 8.2.3475: expression register set by not executed put command
Bram Moolenaar <Bram@vim.org>
parents: 25790
diff changeset
2338 did_set_expr_line = TRUE;
826c36b4640b patch 8.2.3475: expression register set by not executed put command
Bram Moolenaar <Bram@vim.org>
parents: 25790
diff changeset
2339 }
2791
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2340 ea.arg += STRLEN(ea.arg);
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2341 }
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2342 #endif
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2343 ea.arg = skipwhite(ea.arg);
1bd8af13fb43 updated for version 7.3.171
Bram Moolenaar <bram@vim.org>
parents: 2770
diff changeset
2344 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 /*
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2348 * Check for a count. When accepting a EX_BUFNAME, don't use "123foo" as a
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 * count, it's a buffer name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2351 if ((ea.argt & EX_COUNT) && VIM_ISDIGIT(*ea.arg)
24665
661d15592d3c patch 8.2.2871: unnessary VIM_ISDIGIT() calls, badly indented code
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
2352 && (!(ea.argt & EX_BUFNAME) || *(p = skipdigits(ea.arg + 1)) == NUL
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
2353 || VIM_ISWHITE(*p)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354 {
26327
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
2355 n = getdigits_quoted(&ea.arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 ea.arg = skipwhite(ea.arg);
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2357 if (n <= 0 && !ni && (ea.argt & EX_ZEROR) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 {
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
2359 errormsg = _(e_positive_count_required);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 }
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
2362 if (ea.addr_type != ADDR_LINES) // e.g. :buffer 2, :sleep 3
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 ea.line2 = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 if (ea.addr_count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 ea.addr_count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 ea.line1 = ea.line2;
27072
0878d7c64140 patch 8.2.4065: computation overflow with large cound for :yank
Bram Moolenaar <Bram@vim.org>
parents: 27028
diff changeset
2371 if (ea.line2 >= LONG_MAX - (n - 1))
0878d7c64140 patch 8.2.4065: computation overflow with large cound for :yank
Bram Moolenaar <Bram@vim.org>
parents: 27028
diff changeset
2372 ea.line2 = LONG_MAX; // avoid overflow
0878d7c64140 patch 8.2.4065: computation overflow with large cound for :yank
Bram Moolenaar <Bram@vim.org>
parents: 27028
diff changeset
2373 else
0878d7c64140 patch 8.2.4065: computation overflow with large cound for :yank
Bram Moolenaar <Bram@vim.org>
parents: 27028
diff changeset
2374 ea.line2 += n - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375 ++ea.addr_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 * Be vi compatible: no error message for out of range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 */
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
2379 if (ea.line2 > curbuf->b_ml.ml_line_count)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 ea.line2 = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2383
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2384 /*
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2385 * Check for flags: 'l', 'p' and '#'.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2386 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2387 if (ea.argt & EX_FLAGS)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
2388 get_flags(&ea);
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2389 if (!ni && !(ea.argt & EX_EXTRA) && *ea.arg != NUL
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2390 && *ea.arg != '"' && (*ea.arg != '|' || (ea.argt & EX_TRLBAR) == 0))
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2391 {
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2392 // no arguments allowed but there is something
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
2393 errormsg = ex_errmsg(e_trailing_characters_str, ea.arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2396
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2397 if (!ni && (ea.argt & EX_NEEDARG) && *ea.arg == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
2399 errormsg = _(e_argument_required);
7
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 * Skip the command when it's not going to be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2406 * The commands like :if, :endif, etc. always need to be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 * Also make an exception for commands that handle a trailing command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 * themselves.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410 if (ea.skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2411 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 switch (ea.cmdidx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2414 // commands that need evaluation
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2415 case CMD_while:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 case CMD_endwhile:
72
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
2417 case CMD_for:
2b454a43b2c6 updated for version 7.0031
vimboss
parents: 42
diff changeset
2418 case CMD_endfor:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2419 case CMD_if:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 case CMD_elseif:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421 case CMD_else:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2422 case CMD_endif:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2423 case CMD_try:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2424 case CMD_catch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2425 case CMD_finally:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2426 case CMD_endtry:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 case CMD_function:
19575
3c0de44077cd patch 8.2.0344: ":def" not skipped properly
Bram Moolenaar <Bram@vim.org>
parents: 19497
diff changeset
2428 case CMD_def:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2431 // Commands that handle '|' themselves. Check: A command should
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2432 // either have the EX_TRLBAR flag, appear in this list or appear in
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2433 // the list at ":help :bar".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 case CMD_aboveleft:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 case CMD_and:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 case CMD_belowright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 case CMD_botright:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438 case CMD_browse:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 case CMD_call:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 case CMD_confirm:
18713
baf890fa1621 patch 8.1.2348: :const cannot be followed by "| endif"
Bram Moolenaar <Bram@vim.org>
parents: 18406
diff changeset
2441 case CMD_const:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 case CMD_delfunction:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 case CMD_djump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 case CMD_dlist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 case CMD_dsearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 case CMD_dsplit:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 case CMD_echo:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 case CMD_echoerr:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 case CMD_echomsg:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2450 case CMD_echon:
19415
90e24240904b patch 8.2.0265: "eval" after "if 0" doesn't check for following command
Bram Moolenaar <Bram@vim.org>
parents: 19348
diff changeset
2451 case CMD_eval:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2452 case CMD_execute:
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
2453 case CMD_filter:
22391
a9fb7efa31d6 patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents: 22361
diff changeset
2454 case CMD_final:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 case CMD_help:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456 case CMD_hide:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2457 case CMD_ijump:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 case CMD_ilist:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 case CMD_isearch:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 case CMD_isplit:
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
2461 case CMD_keepalt:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 case CMD_keepjumps:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 case CMD_keepmarks:
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
2464 case CMD_keeppatterns:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 case CMD_leftabove:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 case CMD_let:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467 case CMD_lockmarks:
18715
bd4c34db84ab patch 8.1.2349: :lockvar and :unlockvar cannot be followed by "| endif"
Bram Moolenaar <Bram@vim.org>
parents: 18713
diff changeset
2468 case CMD_lockvar:
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
2469 case CMD_lua:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 case CMD_match:
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
2471 case CMD_mzscheme:
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2472 case CMD_noautocmd:
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2473 case CMD_noswapfile:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 case CMD_perl:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 case CMD_psearch:
2350
06feaf4fe36a Rename some "python3" symbols to "py3", as the command name.
Bram Moolenaar <bram@vim.org>
parents: 2340
diff changeset
2476 case CMD_py3:
2366
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
2477 case CMD_python3:
22391
a9fb7efa31d6 patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents: 22361
diff changeset
2478 case CMD_python:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2479 case CMD_return:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480 case CMD_rightbelow:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 case CMD_ruby:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 case CMD_silent:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 case CMD_smagic:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 case CMD_snomagic:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 case CMD_substitute:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 case CMD_syntax:
690
0e922220d322 updated for version 7.0208
vimboss
parents: 685
diff changeset
2487 case CMD_tab:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 case CMD_tcl:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 case CMD_throw:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 case CMD_tilde:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 case CMD_topleft:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 case CMD_unlet:
18715
bd4c34db84ab patch 8.1.2349: :lockvar and :unlockvar cannot be followed by "| endif"
Bram Moolenaar <Bram@vim.org>
parents: 18713
diff changeset
2493 case CMD_unlockvar:
22391
a9fb7efa31d6 patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents: 22361
diff changeset
2494 case CMD_var:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 case CMD_verbose:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 case CMD_vertical:
2887
15705b520c29 updated for version 7.3.217
Bram Moolenaar <bram@vim.org>
parents: 2853
diff changeset
2497 case CMD_wincmd:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 default: goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2505 if (ea.argt & EX_XFILE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 if (expand_filename(&ea, cmdlinep, &errormsg) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 * Accept buffer name. Cannot be used at the same time with a buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 * number. Don't do this for a user command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2514 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2515 if ((ea.argt & EX_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
2516 && !IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 * :bdelete, :bwipeout and :bunload take several arguments, separated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520 * by spaces: find next space (skipping over escaped characters).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521 * The others take one argument: ignore trailing spaces.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 if (ea.cmdidx == CMD_bdelete || ea.cmdidx == CMD_bwipeout
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 || ea.cmdidx == CMD_bunload)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 p = skiptowhite_esc(ea.arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 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
2529 while (p > ea.arg && VIM_ISWHITE(p[-1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2531 }
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
2532 ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & EX_BUFUNL) != 0,
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4211
diff changeset
2533 FALSE, FALSE);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2534 if (ea.line2 < 0) // failed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 goto doend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 ea.addr_count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 ea.arg = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2540 // The :try command saves the emsg_silent flag, reset it here when
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2541 // ":silent! try" was used, it should only apply to :try itself.
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2542 if (ea.cmdidx == CMD_try && cmdmod.cmod_did_esilent > 0)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2543 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2544 emsg_silent -= cmdmod.cmod_did_esilent;
13288
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2545 if (emsg_silent < 0)
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2546 emsg_silent = 0;
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2547 cmdmod.cmod_did_esilent = 0;
13288
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2548 }
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2549
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2550 /*
530943a23d3f patch 8.0.1518: error messages suppressed after ":silent! try"
Christian Brabandt <cb@256bit.org>
parents: 13268
diff changeset
2551 * 7. Execute the command.
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2552 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2554 if (IS_USER_CMDIDX(ea.cmdidx))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2555 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 * Execute a user-defined command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 do_ucmd(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 /*
16411
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
2564 * Call the function to execute the builtin command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 ea.errmsg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 (cmdnames[ea.cmdidx].cmd_func)(&ea);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 if (ea.errmsg != NULL)
21459
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2569 errormsg = ea.errmsg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 #ifdef FEAT_EVAL
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
2573 // Set flag that any command was executed, used by ex_vim9script().
23974
d4f7e4138544 patch 8.2.2529: Vim9: Not possible to use legacy and Vim9 script in one file
Bram Moolenaar <Bram@vim.org>
parents: 23966
diff changeset
2574 // Not if this was a command that wasn't executed or :endif.
19348
b6da81589f8c patch 8.2.0232: the :compiler command causes a crash
Bram Moolenaar <Bram@vim.org>
parents: 19271
diff changeset
2575 if (getline_equal(ea.getline, ea.cookie, getsourceline)
23974
d4f7e4138544 patch 8.2.2529: Vim9: Not possible to use legacy and Vim9 script in one file
Bram Moolenaar <Bram@vim.org>
parents: 23966
diff changeset
2576 && current_sctx.sc_sid > 0
d4f7e4138544 patch 8.2.2529: Vim9: Not possible to use legacy and Vim9 script in one file
Bram Moolenaar <Bram@vim.org>
parents: 23966
diff changeset
2577 && ea.cmdidx != CMD_endif
d4f7e4138544 patch 8.2.2529: Vim9: Not possible to use legacy and Vim9 script in one file
Bram Moolenaar <Bram@vim.org>
parents: 23966
diff changeset
2578 && (cstack->cs_idx < 0
d4f7e4138544 patch 8.2.2529: Vim9: Not possible to use legacy and Vim9 script in one file
Bram Moolenaar <Bram@vim.org>
parents: 23966
diff changeset
2579 || (cstack->cs_flags[cstack->cs_idx] & CSF_ACTIVE)))
23358
b3142fc0a414 patch 8.2.2222: Vim9: cannot keep script variables when reloading
Bram Moolenaar <Bram@vim.org>
parents: 23346
diff changeset
2580 SCRIPT_ITEM(current_sctx.sc_sid)->sn_state = SN_STATE_HAD_COMMAND;
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
2581
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 * If the command just executed called do_cmdline(), any throw or ":return"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 * or ":finish" encountered there must also check the cstack of the still
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 * active do_cmdline() that called this do_one_cmd(). Rethrow an uncaught
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 * exception, or reanimate a returned function or finished script file and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 * return or finish it again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 if (need_rethrow)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 do_throw(cstack);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 else if (check_cstack)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 {
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2593 if (source_finished(fgetline, cookie))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 do_finish(&ea, TRUE);
944
b2dcb8457067 updated for version 7.0-070
vimboss
parents: 930
diff changeset
2595 else if (getline_equal(fgetline, cookie, get_func_line)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 && current_func_returned())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 do_return(&ea, TRUE, FALSE, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 need_rethrow = check_cstack = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 doend:
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2603 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
2604 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 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
2606 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
2607 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 if (errormsg != NULL && *errormsg != NUL && !did_emsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 {
27237
44cb142c8615 patch 8.2.4147: E464 does not always include the offending command
Bram Moolenaar <Bram@vim.org>
parents: 27152
diff changeset
2611 if (sourcing || !KeyTyped)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
2613 if (errormsg != (char *)IObuff)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 STRCPY(IObuff, errormsg);
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
2616 errormsg = (char *)IObuff;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 }
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
2618 append_command(*cmdlinep);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 emsg(errormsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 do_errthrow(cstack,
6305
b8caf7045e3d updated for version 7.4.486
Bram Moolenaar <bram@vim.org>
parents: 6230
diff changeset
2624 (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
2625 ? cmdnames[(int)ea.cmdidx].cmd_name : (char_u *)NULL);
22732
4c21a3a47707 patch 8.2.1914: Vim9: cannot put line break in expression for '=' register
Bram Moolenaar <Bram@vim.org>
parents: 22724
diff changeset
2626
4c21a3a47707 patch 8.2.1914: Vim9: cannot put line break in expression for '=' register
Bram Moolenaar <Bram@vim.org>
parents: 22724
diff changeset
2627 if (did_set_expr_line)
4c21a3a47707 patch 8.2.1914: Vim9: cannot put line break in expression for '=' register
Bram Moolenaar <Bram@vim.org>
parents: 22724
diff changeset
2628 set_expr_line(NULL, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2631 undo_cmdmod(&cmdmod);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 cmdmod = save_cmdmod;
16144
4850744dc181 patch 8.1.1077: reg_executing() is reset by calling input()
Bram Moolenaar <Bram@vim.org>
parents: 15973
diff changeset
2633 reg_executing = save_reg_executing;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2635 if (ea.nextcmd && *ea.nextcmd == NUL) // not really a next command
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 ea.nextcmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 --ex_nesting_level;
20996
3af71cbcfdbe patch 8.2.1049: Vim9: leaking memory when using continuation line
Bram Moolenaar <Bram@vim.org>
parents: 20982
diff changeset
2640 vim_free(ea.cmdline_tofree);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 return ea.nextcmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645
21459
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2646 static char ex_error_buf[MSG_BUF_LEN];
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2647
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2648 /*
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2649 * Return an error message with argument included.
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2650 * Uses a static buffer, only the last error will be kept.
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2651 * "msg" will be translated, caller should use N_().
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2652 */
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2653 char *
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2654 ex_errmsg(char *msg, char_u *arg)
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2655 {
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2656 vim_snprintf(ex_error_buf, MSG_BUF_LEN, _(msg), arg);
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2657 return ex_error_buf;
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2658 }
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
2659
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 /*
26370
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2661 * Handle a range without a command.
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2662 * Returns an error message on failure.
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2663 */
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2664 char *
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2665 ex_range_without_command(exarg_T *eap)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2666 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2667 char *errormsg = NULL;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2668
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2669 if ((*eap->cmd == '|' || (exmode_active && eap->line1 != eap->line2))
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2670 #ifdef FEAT_EVAL
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2671 && !in_vim9script()
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2672 #endif
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2673 )
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2674 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2675 eap->cmdidx = CMD_print;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2676 eap->argt = EX_RANGE+EX_COUNT+EX_TRLBAR;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2677 if ((errormsg = invalid_range(eap)) == NULL)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2678 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2679 correct_range(eap);
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2680 ex_print(eap);
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2681 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2682 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2683 else if (eap->addr_count != 0)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2684 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2685 if (eap->line2 > curbuf->b_ml.ml_line_count)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2686 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2687 // With '-' in 'cpoptions' a line number past the file is an
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2688 // error, otherwise put it at the end of the file.
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2689 if (vim_strchr(p_cpo, CPO_MINUS) != NULL)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2690 eap->line2 = -1;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2691 else
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2692 eap->line2 = curbuf->b_ml.ml_line_count;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2693 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2694
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2695 if (eap->line2 < 0)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2696 errormsg = _(e_invalid_range);
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2697 else
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2698 {
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2699 if (eap->line2 == 0)
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2700 curwin->w_cursor.lnum = 1;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2701 else
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2702 curwin->w_cursor.lnum = eap->line2;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2703 beginline(BL_SOL | BL_FIX);
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2704 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2705 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2706 return errormsg;
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2707 }
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2708
a3a0885d9dd8 patch 8.2.3716: Vim9: range without a command is not compiled
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
2709 /*
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2710 * Check for an Ex command with optional tail.
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2711 * If there is a match advance "pp" to the argument and return TRUE.
27499
df414fc12eed patch 8.2.4277: Vim9: an import does not shadow a command modifier
Bram Moolenaar <Bram@vim.org>
parents: 27453
diff changeset
2712 * If "noparen" is TRUE do not recognize the command followed by "(" or ".".
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2713 */
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2714 static int
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2715 checkforcmd_opt(
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2716 char_u **pp, // start of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2717 char *cmd, // name of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2718 int len, // required length
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2719 int noparen)
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2720 {
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2721 int i;
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2722
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2723 for (i = 0; cmd[i] != NUL; ++i)
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2724 if (((char_u *)cmd)[i] != (*pp)[i])
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2725 break;
27499
df414fc12eed patch 8.2.4277: Vim9: an import does not shadow a command modifier
Bram Moolenaar <Bram@vim.org>
parents: 27453
diff changeset
2726 if (i >= len && !isalpha((*pp)[i]) && (*pp)[i] != '_'
df414fc12eed patch 8.2.4277: Vim9: an import does not shadow a command modifier
Bram Moolenaar <Bram@vim.org>
parents: 27453
diff changeset
2727 && (!noparen || ((*pp)[i] != '(' && (*pp)[i] != '.')))
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2728 {
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2729 *pp = skipwhite(*pp + i);
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2730 return TRUE;
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2731 }
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2732 return FALSE;
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2733 }
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2734
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2735 /*
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2736 * Check for an Ex command with optional tail.
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2737 * If there is a match advance "pp" to the argument and return TRUE.
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2738 */
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2739 int
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2740 checkforcmd(
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2741 char_u **pp, // start of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2742 char *cmd, // name of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2743 int len) // required length
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2744 {
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2745 return checkforcmd_opt(pp, cmd, len, FALSE);
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2746 }
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2747
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2748 /*
27499
df414fc12eed patch 8.2.4277: Vim9: an import does not shadow a command modifier
Bram Moolenaar <Bram@vim.org>
parents: 27453
diff changeset
2749 * Check for an Ex command with optional tail, not followed by "(" or ".".
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2750 * If there is a match advance "pp" to the argument and return TRUE.
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2751 */
25469
dcd45fe7fe2e patch 8.2.3271: Vim9: cannot use :command or :au with block in :def function
Bram Moolenaar <Bram@vim.org>
parents: 25463
diff changeset
2752 int
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2753 checkforcmd_noparen(
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2754 char_u **pp, // start of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2755 char *cmd, // name of command
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2756 int len) // required length
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2757 {
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2758 return checkforcmd_opt(pp, cmd, len, TRUE);
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2759 }
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2760
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2761 /*
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2762 * Parse and skip over command modifiers:
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2763 * - update eap->cmd
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2764 * - store flags in "cmod".
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2765 * - Set ex_pressedreturn for an empty command line.
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2766 * When "skip_only" is TRUE the global variables are not changed, except for
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2767 * "cmdmod".
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2768 * When "skip_only" is FALSE then undo_cmdmod() must be called later to free
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2769 * any cmod_filter_regmatch.regprog.
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2770 * Call apply_cmdmod() to get the side effects of the modifiers:
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2771 * - Increment "sandbox" for ":sandbox"
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
2772 * - set p_verbose for ":verbose"
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2773 * - set msg_silent for ":silent"
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2774 * - set 'eventignore' to "all" for ":noautocmd"
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2775 * Return FAIL when the command is not to be executed.
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2776 * May set "errormsg" to an error message.
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2777 */
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2778 int
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2779 parse_command_modifiers(
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2780 exarg_T *eap,
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2781 char **errormsg,
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2782 cmdmod_T *cmod,
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2783 int skip_only)
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2784 {
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2785 char_u *p;
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2786 int starts_with_colon = FALSE;
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2787 int vim9script = in_vim9script();
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2788
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2789 CLEAR_POINTER(cmod);
27645
1712b102d642 patch 8.2.4348: "legacy exe cmd" does not do what one would expect
Bram Moolenaar <Bram@vim.org>
parents: 27617
diff changeset
2790 cmod->cmod_flags = sticky_cmdmod_flags;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2791
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2792 // Repeat until no more command modifiers are found.
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2793 for (;;)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2794 {
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2795 while (*eap->cmd == ' ' || *eap->cmd == '\t' || *eap->cmd == ':')
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2796 {
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2797 if (*eap->cmd == ':')
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2798 starts_with_colon = TRUE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2799 ++eap->cmd;
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2800 }
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2801
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2802 // in ex mode, an empty line works like :+
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2803 if (*eap->cmd == NUL && exmode_active
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2804 && (getline_equal(eap->getline, eap->cookie, getexmodeline)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2805 || getline_equal(eap->getline, eap->cookie, getexline))
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2806 && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2807 {
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2808 eap->cmd = (char_u *)"+";
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2809 if (!skip_only)
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2810 ex_pressedreturn = TRUE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2811 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2812
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2813 // ignore comment and empty lines
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
2814 if (comment_start(eap->cmd, starts_with_colon))
25739
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2815 {
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2816 // a comment ends at a NL
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2817 if (eap->nextcmd == NULL)
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2818 {
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2819 eap->nextcmd = vim_strchr(eap->cmd, '\n');
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2820 if (eap->nextcmd != NULL)
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2821 ++eap->nextcmd;
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2822 }
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2823 if (vim9script && has_cmdmod(cmod, FALSE))
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2824 *errormsg = _(e_command_modifier_without_command);
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2825 return FAIL;
25739
8c4dee4d1ac6 patch 8.2.3405: cannot have a comment line in a {} block of a user command
Bram Moolenaar <Bram@vim.org>
parents: 25670
diff changeset
2826 }
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2827 if (*eap->cmd == NUL)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2828 {
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2829 if (!skip_only)
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2830 {
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2831 ex_pressedreturn = TRUE;
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2832 if (vim9script && has_cmdmod(cmod, FALSE))
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2833 *errormsg = _(e_command_modifier_without_command);
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2834 }
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2835 return FAIL;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2836 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2837
22260
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
2838 p = skip_range(eap->cmd, TRUE, NULL);
23537
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2839
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2840 // In Vim9 script a variable can shadow a command modifier:
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2841 // verbose = 123
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2842 // verbose += 123
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2843 // silent! verbose = func()
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2844 // verbose.member = 2
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2845 // verbose[expr] = 2
23549
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2846 // But not:
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2847 // verbose [a, b] = list
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2848 if (vim9script)
23537
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2849 {
23549
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2850 char_u *s, *n;
23537
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2851
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2852 for (s = p; ASCII_ISALPHA(*s); ++s)
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2853 ;
23549
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2854 n = skipwhite(s);
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2855 if (vim_strchr((char_u *)".=", *n) != NULL
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2856 || *s == '['
4156f972efb1 patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23537
diff changeset
2857 || (*n != NUL && n[1] == '='))
23537
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2858 break;
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2859 }
7f0fc2ab90e3 patch 8.2.2311: Vim9: cannot assign to variable that shadows command modifier
Bram Moolenaar <Bram@vim.org>
parents: 23513
diff changeset
2860
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2861 switch (*p)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2862 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2863 // When adding an entry, also modify cmd_exists().
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2864 case 'a': if (!checkforcmd_noparen(&eap->cmd, "aboveleft", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2865 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2866 cmod->cmod_split |= WSP_ABOVE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2867 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2868
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2869 case 'b': if (checkforcmd_noparen(&eap->cmd, "belowright", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2870 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2871 cmod->cmod_split |= WSP_BELOW;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2872 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2873 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2874 if (checkforcmd_opt(&eap->cmd, "browse", 3, TRUE))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2875 {
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2876 #ifdef FEAT_BROWSE_CMD
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2877 cmod->cmod_flags |= CMOD_BROWSE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2878 #endif
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2879 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2880 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2881 if (!checkforcmd_noparen(&eap->cmd, "botright", 2))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2882 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2883 cmod->cmod_split |= WSP_BOT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2884 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2885
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2886 case 'c': if (!checkforcmd_opt(&eap->cmd, "confirm", 4, TRUE))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2887 break;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2888 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2889 cmod->cmod_flags |= CMOD_CONFIRM;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2890 #endif
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2891 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2892
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2893 case 'k': if (checkforcmd_noparen(&eap->cmd, "keepmarks", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2894 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2895 cmod->cmod_flags |= CMOD_KEEPMARKS;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2896 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2897 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2898 if (checkforcmd_noparen(&eap->cmd, "keepalt", 5))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2899 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2900 cmod->cmod_flags |= CMOD_KEEPALT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2901 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2902 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2903 if (checkforcmd_noparen(&eap->cmd, "keeppatterns", 5))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2904 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2905 cmod->cmod_flags |= CMOD_KEEPPATTERNS;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2906 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2907 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2908 if (!checkforcmd_noparen(&eap->cmd, "keepjumps", 5))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2909 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2910 cmod->cmod_flags |= CMOD_KEEPJUMPS;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2911 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2912
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2913 case 'f': // only accept ":filter {pat} cmd"
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2914 {
24834
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2915 char_u *reg_pat;
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2916 char_u *nulp = NULL;
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2917 int c = 0;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2918
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2919 if (!checkforcmd_noparen(&p, "filter", 4)
26319
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2920 || *p == NUL
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2921 || (ends_excmd(*p)
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2922 #ifdef FEAT_EVAL
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2923 // in ":filter #pat# cmd" # does not
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2924 // start a comment
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2925 && (!vim9script || VIM_ISWHITE(p[1]))
26319
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2926 #endif
8b594193dcb6 patch 8.2.3690: Vim9: "filter #pat# cmd" does not work
Bram Moolenaar <Bram@vim.org>
parents: 26256
diff changeset
2927 ))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2928 break;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2929 if (*p == '!')
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2930 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2931 cmod->cmod_filter_force = TRUE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2932 p = skipwhite(p + 1);
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2933 if (*p == NUL || ends_excmd(*p))
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2934 break;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2935 }
21259
ee0e2ada88c0 patch 8.2.1180: build failure in small version
Bram Moolenaar <Bram@vim.org>
parents: 21255
diff changeset
2936 #ifdef FEAT_EVAL
21255
4be91a7eafb2 patch 8.2.1178: Vim9: filter function recognized as command modifier
Bram Moolenaar <Bram@vim.org>
parents: 21212
diff changeset
2937 // Avoid that "filter(arg)" is recognized.
27716
4097434c7c67 patch 8.2.4384: Vim9: error message not tested, some code not tested
Bram Moolenaar <Bram@vim.org>
parents: 27645
diff changeset
2938 if (vim9script && !VIM_ISWHITE(p[-1]))
21255
4be91a7eafb2 patch 8.2.1178: Vim9: filter function recognized as command modifier
Bram Moolenaar <Bram@vim.org>
parents: 21212
diff changeset
2939 break;
21259
ee0e2ada88c0 patch 8.2.1180: build failure in small version
Bram Moolenaar <Bram@vim.org>
parents: 21255
diff changeset
2940 #endif
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2941 if (skip_only)
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2942 p = skip_vimgrep_pat(p, NULL, NULL);
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2943 else
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2944 // NOTE: This puts a NUL after the pattern.
24834
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2945 p = skip_vimgrep_pat_ext(p, &reg_pat, NULL,
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2946 &nulp, &c);
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2947 if (p == NULL || *p == NUL)
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2948 break;
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2949 if (!skip_only)
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2950 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2951 cmod->cmod_filter_regmatch.regprog =
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2952 vim_regcomp(reg_pat, RE_MAGIC);
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2953 if (cmod->cmod_filter_regmatch.regprog == NULL)
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2954 break;
24834
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2955 // restore the character overwritten by NUL
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2956 if (nulp != NULL)
adcd50a18236 patch 8.2.2955: Vim9: using filter in compiled command does not work
Bram Moolenaar <Bram@vim.org>
parents: 24768
diff changeset
2957 *nulp = c;
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
2958 }
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2959 eap->cmd = p;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2960 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2961 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2962
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
2963 // ":hide" and ":hide | cmd" are not modifiers
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2964 case 'h': if (p != eap->cmd || !checkforcmd_noparen(&p, "hide", 3)
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2965 || *p == NUL || ends_excmd(*p))
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2966 break;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2967 eap->cmd = p;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2968 cmod->cmod_flags |= CMOD_HIDE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2969 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2970
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2971 case 'l': if (checkforcmd_noparen(&eap->cmd, "lockmarks", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2972 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2973 cmod->cmod_flags |= CMOD_LOCKMARKS;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2974 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2975 }
24531
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2976 if (checkforcmd_noparen(&eap->cmd, "legacy", 3))
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2977 {
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2978 if (ends_excmd2(p, eap->cmd))
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2979 {
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2980 *errormsg =
25622
15b54e0a576b patch 8.2.3347: check for legacy script is incomplete
Bram Moolenaar <Bram@vim.org>
parents: 25575
diff changeset
2981 _(e_legacy_must_be_followed_by_command);
24531
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2982 return FAIL;
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2983 }
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2984 cmod->cmod_flags |= CMOD_LEGACY;
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2985 continue;
3bfec39ce31c patch 8.2.2805: Vim9: cannot use legacy syntax in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24462
diff changeset
2986 }
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2987
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2988 if (!checkforcmd_noparen(&eap->cmd, "leftabove", 5))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2989 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2990 cmod->cmod_split |= WSP_ABOVE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2991 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2992
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2993 case 'n': if (checkforcmd_noparen(&eap->cmd, "noautocmd", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2994 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
2995 cmod->cmod_flags |= CMOD_NOAUTOCMD;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2996 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2997 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
2998 if (!checkforcmd_noparen(&eap->cmd, "noswapfile", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
2999 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3000 cmod->cmod_flags |= CMOD_NOSWAPFILE;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3001 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3002
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3003 case 'r': if (!checkforcmd_noparen(&eap->cmd, "rightbelow", 6))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3004 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3005 cmod->cmod_split |= WSP_BELOW;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3006 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3007
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3008 case 's': if (checkforcmd_noparen(&eap->cmd, "sandbox", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3009 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3010 cmod->cmod_flags |= CMOD_SANDBOX;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3011 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3012 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3013 if (!checkforcmd_noparen(&eap->cmd, "silent", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3014 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3015 cmod->cmod_flags |= CMOD_SILENT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3016 if (*eap->cmd == '!' && !VIM_ISWHITE(eap->cmd[-1]))
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3017 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3018 // ":silent!", but not "silent !cmd"
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3019 eap->cmd = skipwhite(eap->cmd + 1);
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3020 cmod->cmod_flags |= CMOD_ERRSILENT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3021 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3022 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3023
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3024 case 't': if (checkforcmd_noparen(&p, "tab", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3025 {
15263
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3026 if (!skip_only)
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3027 {
15263
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3028 long tabnr = get_address(eap, &eap->cmd,
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3029 ADDR_TABS, eap->skip,
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3030 skip_only, FALSE, 1);
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3031 if (tabnr == MAXLNUM)
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3032 cmod->cmod_tab = tabpage_index(curtab) + 1;
15263
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3033 else
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3034 {
15263
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3035 if (tabnr < 0 || tabnr > LAST_TAB_NR)
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3036 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
3037 *errormsg = _(e_invalid_range);
15263
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3038 return FAIL;
ad065b8123e8 patch 8.1.0640: get E14 while typing command :tab with 'incsearch' set
Bram Moolenaar <Bram@vim.org>
parents: 15239
diff changeset
3039 }
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3040 cmod->cmod_tab = tabnr + 1;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3041 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3042 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3043 eap->cmd = p;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3044 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3045 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3046 if (!checkforcmd_noparen(&eap->cmd, "topleft", 2))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3047 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3048 cmod->cmod_split |= WSP_TOP;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3049 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3050
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3051 case 'u': if (!checkforcmd_noparen(&eap->cmd, "unsilent", 3))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3052 break;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3053 cmod->cmod_flags |= CMOD_UNSILENT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3054 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3055
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3056 case 'v': if (checkforcmd_noparen(&eap->cmd, "vertical", 4))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3057 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3058 cmod->cmod_split |= WSP_VERT;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3059 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3060 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3061 if (checkforcmd_noparen(&eap->cmd, "vim9cmd", 4))
23938
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3062 {
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3063 if (ends_excmd2(p, eap->cmd))
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3064 {
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3065 *errormsg =
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3066 _(e_vim9cmd_must_be_followed_by_command);
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3067 return FAIL;
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3068 }
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3069 cmod->cmod_flags |= CMOD_VIM9CMD;
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3070 continue;
2a885d095bff patch 8.2.2511: Vim9: cannot use Vim9 script syntax in some places
Bram Moolenaar <Bram@vim.org>
parents: 23884
diff changeset
3071 }
24254
0868ac82ef18 patch 8.2.2668: Vim9: omitting "call" for "confirm()" does not give an error
Bram Moolenaar <Bram@vim.org>
parents: 24222
diff changeset
3072 if (!checkforcmd_noparen(&p, "verbose", 4))
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3073 break;
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3074 if (vim_isdigit(*eap->cmd))
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3075 cmod->cmod_verbose = atoi((char *)eap->cmd);
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3076 else
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3077 cmod->cmod_verbose = 1;
14536
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3078 eap->cmd = p;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3079 continue;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3080 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3081 break;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3082 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3083
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3084 return OK;
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3085 }
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3086
4caa51067cb8 patch 8.1.0281: parsing command modifiers is not separated
Christian Brabandt <cb@256bit.org>
parents: 14505
diff changeset
3087 /*
24222
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3088 * Return TRUE if "cmod" has anything set.
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3089 */
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3090 int
25575
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3091 has_cmdmod(cmdmod_T *cmod, int ignore_silent)
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3092 {
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3093 return (cmod->cmod_flags != 0 && (!ignore_silent
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3094 || (cmod->cmod_flags
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3095 & ~(CMOD_SILENT | CMOD_ERRSILENT | CMOD_UNSILENT)) != 0))
24222
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3096 || cmod->cmod_split != 0
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3097 || cmod->cmod_verbose != 0
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3098 || cmod->cmod_tab != 0
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3099 || cmod->cmod_filter_regmatch.regprog != NULL;
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3100 }
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3101
27720
2631b9021808 patch 8.2.4386: still cannot build tiny version
Bram Moolenaar <Bram@vim.org>
parents: 27716
diff changeset
3102 #if defined(FEAT_EVAL) || defined(PROTO)
24222
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3103 /*
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3104 * If Vim9 script and "cmdmod" has anything set give an error and return TRUE.
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3105 */
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3106 int
25575
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3107 cmdmod_error(int ignore_silent)
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3108 {
9f691e8a74e3 patch 8.2.3324: Vim9: Cannot use :silent with :endwhile
Bram Moolenaar <Bram@vim.org>
parents: 25567
diff changeset
3109 if (in_vim9script() && has_cmdmod(&cmdmod, ignore_silent))
24222
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3110 {
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3111 emsg(_(e_misplaced_command_modifier));
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3112 return TRUE;
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3113 }
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3114 return FALSE;
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3115 }
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26966
diff changeset
3116 #endif
24222
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3117
a2e6029d354e patch 8.2.2652: Vim9: can use command modifier without an effect
Bram Moolenaar <Bram@vim.org>
parents: 24176
diff changeset
3118 /*
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3119 * Apply the command modifiers. Saves current state in "cmdmod", call
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3120 * undo_cmdmod() later.
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3121 */
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3122 void
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3123 apply_cmdmod(cmdmod_T *cmod)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3124 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3125 #ifdef HAVE_SANDBOX
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3126 if ((cmod->cmod_flags & CMOD_SANDBOX) && !cmod->cmod_did_sandbox)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3127 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3128 ++sandbox;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3129 cmod->cmod_did_sandbox = TRUE;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3130 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3131 #endif
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3132 if (cmod->cmod_verbose > 0)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3133 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3134 if (cmod->cmod_verbose_save == 0)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3135 cmod->cmod_verbose_save = p_verbose + 1;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3136 p_verbose = cmod->cmod_verbose;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3137 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3138
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3139 if ((cmod->cmod_flags & (CMOD_SILENT | CMOD_UNSILENT))
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3140 && cmod->cmod_save_msg_silent == 0)
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3141 {
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3142 cmod->cmod_save_msg_silent = msg_silent + 1;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3143 cmod->cmod_save_msg_scroll = msg_scroll;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3144 }
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3145 if (cmod->cmod_flags & CMOD_SILENT)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3146 ++msg_silent;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3147 if (cmod->cmod_flags & CMOD_UNSILENT)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3148 msg_silent = 0;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3149
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3150 if (cmod->cmod_flags & CMOD_ERRSILENT)
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3151 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3152 ++emsg_silent;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3153 ++cmod->cmod_did_esilent;
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3154 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3155
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3156 if ((cmod->cmod_flags & CMOD_NOAUTOCMD) && cmod->cmod_save_ei == NULL)
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3157 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3158 // Set 'eventignore' to "all".
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3159 // First save the existing option value for restoring it later.
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3160 cmod->cmod_save_ei = vim_strsave(p_ei);
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3161 set_string_option_direct((char_u *)"ei", -1,
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3162 (char_u *)"all", OPT_FREE, SID_NONE);
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3163 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3164 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3165
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3166 /*
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3167 * Undo and free contents of "cmod".
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3168 */
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3169 void
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3170 undo_cmdmod(cmdmod_T *cmod)
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3171 {
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3172 if (cmod->cmod_verbose_save > 0)
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3173 {
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3174 p_verbose = cmod->cmod_verbose_save - 1;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3175 cmod->cmod_verbose_save = 0;
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3176 }
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3177
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3178 #ifdef HAVE_SANDBOX
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3179 if (cmod->cmod_did_sandbox)
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3180 {
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3181 --sandbox;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3182 cmod->cmod_did_sandbox = FALSE;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3183 }
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3184 #endif
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3185
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3186 if (cmod->cmod_save_ei != NULL)
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
3187 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3188 // Restore 'eventignore' to the value before ":noautocmd".
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3189 set_string_option_direct((char_u *)"ei", -1, cmod->cmod_save_ei,
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3190 OPT_FREE, SID_NONE);
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3191 free_string_option(cmod->cmod_save_ei);
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3192 cmod->cmod_save_ei = NULL;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3193 }
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3194
22724
51bc501a13ca patch 8.2.1910: reading past the end of the command line
Bram Moolenaar <Bram@vim.org>
parents: 22699
diff changeset
3195 vim_regfree(cmod->cmod_filter_regmatch.regprog);
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3196
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3197 if (cmod->cmod_save_msg_silent > 0)
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3198 {
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3199 // messages could be enabled for a serious error, need to check if the
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3200 // counters don't become negative
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3201 if (!did_emsg || msg_silent > cmod->cmod_save_msg_silent - 1)
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3202 msg_silent = cmod->cmod_save_msg_silent - 1;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3203 emsg_silent -= cmod->cmod_did_esilent;
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3204 if (emsg_silent < 0)
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3205 emsg_silent = 0;
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3206 // Restore msg_scroll, it's set by file I/O commands, even when no
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3207 // message is actually displayed.
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3208 msg_scroll = cmod->cmod_save_msg_scroll;
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3209
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3210 // "silent reg" or "silent echo x" inside "redir" leaves msg_col
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3211 // somewhere in the line. Put it back in the first column.
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3212 if (redirecting())
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3213 msg_col = 0;
22697
c996700d569f patch 8.2.1897: command modifiers are saved and set inconsistently
Bram Moolenaar <Bram@vim.org>
parents: 22693
diff changeset
3214
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3215 cmod->cmod_save_msg_silent = 0;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
3216 cmod->cmod_did_esilent = 0;
21172
96ae8622cfb6 patch 8.2.1137: Vim9: modifiers not cleared after compiling function
Bram Moolenaar <Bram@vim.org>
parents: 21130
diff changeset
3217 }
14538
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
3218 }
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
3219
213f1a519378 patch 8.1.0282: 'incsearch' does not work with command modifiers
Christian Brabandt <cb@256bit.org>
parents: 14536
diff changeset
3220 /*
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3221 * Parse the address range, if any, in "eap".
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
3222 * May set the last search pattern, unless "silent" is TRUE.
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3223 * Return FAIL and set "errormsg" or return OK.
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3224 */
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3225 int
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
3226 parse_cmd_address(exarg_T *eap, char **errormsg, int silent)
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3227 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3228 int address_count = 1;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3229 linenr_T lnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3230
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3231 // Repeat for all ',' or ';' separated addresses.
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3232 for (;;)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3233 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3234 eap->line1 = eap->line2;
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
3235 eap->line2 = default_address(eap);
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3236 eap->cmd = skipwhite(eap->cmd);
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
3237 lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip, silent,
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3238 eap->addr_count == 0, address_count++);
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3239 if (eap->cmd == NULL) // error detected
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3240 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3241 if (lnum == MAXLNUM)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3242 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3243 if (*eap->cmd == '%') // '%' - all lines
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3244 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3245 ++eap->cmd;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3246 switch (eap->addr_type)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3247 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3248 case ADDR_LINES:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
3249 case ADDR_OTHER:
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3250 eap->line1 = 1;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3251 eap->line2 = curbuf->b_ml.ml_line_count;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3252 break;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3253 case ADDR_LOADED_BUFFERS:
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3254 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3255 buf_T *buf = firstbuf;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3256
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3257 while (buf->b_next != NULL
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3258 && buf->b_ml.ml_mfp == NULL)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3259 buf = buf->b_next;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3260 eap->line1 = buf->b_fnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3261 buf = lastbuf;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3262 while (buf->b_prev != NULL
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3263 && buf->b_ml.ml_mfp == NULL)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3264 buf = buf->b_prev;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3265 eap->line2 = buf->b_fnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3266 break;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3267 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3268 case ADDR_BUFFERS:
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3269 eap->line1 = firstbuf->b_fnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3270 eap->line2 = lastbuf->b_fnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3271 break;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3272 case ADDR_WINDOWS:
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3273 case ADDR_TABS:
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3274 if (IS_USER_CMDIDX(eap->cmdidx))
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3275 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3276 eap->line1 = 1;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3277 eap->line2 = eap->addr_type == ADDR_WINDOWS
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3278 ? LAST_WIN_NR : LAST_TAB_NR;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3279 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3280 else
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3281 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3282 // there is no Vim command which uses '%' and
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3283 // ADDR_WINDOWS or ADDR_TABS
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
3284 *errormsg = _(e_invalid_range);
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3285 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3286 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3287 break;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3288 case ADDR_TABS_RELATIVE:
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
3289 case ADDR_UNSIGNED:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
3290 case ADDR_QUICKFIX:
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
3291 *errormsg = _(e_invalid_range);
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3292 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3293 case ADDR_ARGUMENTS:
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3294 if (ARGCOUNT == 0)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3295 eap->line1 = eap->line2 = 0;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3296 else
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3297 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3298 eap->line1 = 1;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3299 eap->line2 = ARGCOUNT;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3300 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3301 break;
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
3302 case ADDR_QUICKFIX_VALID:
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3303 #ifdef FEAT_QUICKFIX
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3304 eap->line1 = 1;
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
3305 eap->line2 = qf_get_valid_size(eap);
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3306 if (eap->line2 == 0)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3307 eap->line2 = 1;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
3308 #endif
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3309 break;
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
3310 case ADDR_NONE:
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
3311 // Will give an error later if a range is found.
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
3312 break;
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3313 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3314 ++eap->addr_count;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3315 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3316 else if (*eap->cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3317 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3318 pos_T *fp;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3319
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3320 // '*' - visual area
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3321 if (eap->addr_type != ADDR_LINES)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3322 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
3323 *errormsg = _(e_invalid_range);
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3324 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3325 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3326
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3327 ++eap->cmd;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3328 if (!eap->skip)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3329 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3330 fp = getmark('<', FALSE);
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3331 if (check_mark(fp) == FAIL)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3332 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3333 eap->line1 = fp->lnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3334 fp = getmark('>', FALSE);
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3335 if (check_mark(fp) == FAIL)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3336 return FAIL;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3337 eap->line2 = fp->lnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3338 ++eap->addr_count;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3339 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3340 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3341 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3342 else
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3343 eap->line2 = lnum;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3344 eap->addr_count++;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3345
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3346 if (*eap->cmd == ';')
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3347 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3348 if (!eap->skip)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3349 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3350 curwin->w_cursor.lnum = eap->line2;
20185
0610f1ddb3a0 patch 8.2.0648: semicolon search does not work in first line
Bram Moolenaar <Bram@vim.org>
parents: 20111
diff changeset
3351 // Don't leave the cursor on an illegal line or column, but do
0610f1ddb3a0 patch 8.2.0648: semicolon search does not work in first line
Bram Moolenaar <Bram@vim.org>
parents: 20111
diff changeset
3352 // accept zero as address, so 0;/PATTERN/ works correctly.
0610f1ddb3a0 patch 8.2.0648: semicolon search does not work in first line
Bram Moolenaar <Bram@vim.org>
parents: 20111
diff changeset
3353 if (eap->line2 > 0)
0610f1ddb3a0 patch 8.2.0648: semicolon search does not work in first line
Bram Moolenaar <Bram@vim.org>
parents: 20111
diff changeset
3354 check_cursor();
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3355 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3356 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3357 else if (*eap->cmd != ',')
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3358 break;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3359 ++eap->cmd;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3360 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3361
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3362 // One address given: set start and end lines.
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3363 if (eap->addr_count == 1)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3364 {
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3365 eap->line1 = eap->line2;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3366 // ... but only implicit: really no address given
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3367 if (lnum == MAXLNUM)
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3368 eap->addr_count = 0;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3369 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3370 return OK;
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3371 }
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3372
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3373 /*
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3374 * Append "cmd" to the error message in IObuff.
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3375 * 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
3376 * invisible otherwise.
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3377 */
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3378 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3379 append_command(char_u *cmd)
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3380 {
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3381 char_u *s = cmd;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3382 char_u *d;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3383
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3384 STRCAT(IObuff, ": ");
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3385 d = IObuff + STRLEN(IObuff);
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3386 while (*s != NUL && d - IObuff < IOSIZE - 7)
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3387 {
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
3388 if (enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) : *s == 0xa0)
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
3389 {
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
3390 s += enc_utf8 ? 2 : 1;
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3391 STRCPY(d, "<a0>");
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3392 d += 4;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3393 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3394 else
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3395 MB_COPY_CHAR(s, d);
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3396 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3397 *d = NUL;
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3398 }
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3399
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26966
diff changeset
3400 #if defined(FEAT_EVAL) || defined(PROTO)
3097
738ea87c1964 updated for version 7.3.320
Bram Moolenaar <bram@vim.org>
parents: 2970
diff changeset
3401 /*
21937
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3402 * If "start" points "&opt", "&l:opt", "&g:opt" or "$ENV" return a pointer to
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3403 * the name. Otherwise just return "start".
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3404 */
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3405 char_u *
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3406 skip_option_env_lead(char_u *start)
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3407 {
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3408 char_u *name = start;
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3409
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3410 if (*start == '&')
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3411 {
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3412 if ((start[1] == 'l' || start[1] == 'g') && start[2] == ':')
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3413 name += 3;
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3414 else
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3415 name += 1;
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3416 }
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3417 else if (*start == '$')
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3418 name += 1;
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3419 return name;
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3420 }
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26966
diff changeset
3421 #endif
21937
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3422
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3423 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 * Find an Ex command by its name, either built-in or user.
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3425 * Start of the name can be found at eap->cmd.
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
3426 * Sets eap->cmdidx and returns a pointer to char after the command name.
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3427 * "full" is set to TRUE if the whole command name matched.
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3428 *
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3429 * If "lookup" is not NULL recognize expression without "eval" or "call" and
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3430 * assignment without "let". Sets eap->cmdidx to the command while returning
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3431 * "eap->cmd".
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3432 *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 * Returns NULL for an ambiguous user command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 */
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3435 char_u *
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3436 find_ex_command(
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3437 exarg_T *eap,
20075
516b10943fdb patch 8.2.0593: finding a user command is not optimal
Bram Moolenaar <Bram@vim.org>
parents: 20063
diff changeset
3438 int *full UNUSED,
24124
f4061617c438 patch 8.2.2603: Vim9: no effect if user command is also a function
Bram Moolenaar <Bram@vim.org>
parents: 24114
diff changeset
3439 int (*lookup)(char_u *, size_t, int cmd, cctx_T *) UNUSED,
20075
516b10943fdb patch 8.2.0593: finding a user command is not optimal
Bram Moolenaar <Bram@vim.org>
parents: 20063
diff changeset
3440 cctx_T *cctx UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 char_u *p;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3444 int i;
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3445 #ifndef FEAT_EVAL
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3446 int vim9 = FALSE;
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3447 #else
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3448 int vim9 = in_vim9script();
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3449
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3450 /*
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3451 * Recognize a Vim9 script function/method call and assignment:
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3452 * "lvar = value", "lvar(arg)", "[1, 2 3]->Func()"
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3453 */
19481
c27837cbe922 patch 8.2.0298: Vim9 script: cannot start command with a string constant
Bram Moolenaar <Bram@vim.org>
parents: 19475
diff changeset
3454 p = eap->cmd;
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3455 if (lookup != NULL)
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3456 {
21937
b931df03adcc patch 8.2.1518: Vim9: cannot assign to local option
Bram Moolenaar <Bram@vim.org>
parents: 21893
diff changeset
3457 char_u *pskip = skip_option_env_lead(eap->cmd);
21618
9ab43576a13b patch 8.2.1359: Vim9: cannot assign to / register in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 21596
diff changeset
3458
25670
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3459 if (vim_strchr((char_u *)"{('[\"@&$", *p) != NULL
27800
6e5d378919c4 patch 8.2.4426: map() function on string and blob does not check types
Bram Moolenaar <Bram@vim.org>
parents: 27720
diff changeset
3460 || ((p = to_name_const_end(pskip)) > eap->cmd && *p != NUL)
6e5d378919c4 patch 8.2.4426: map() function on string and blob does not check types
Bram Moolenaar <Bram@vim.org>
parents: 27720
diff changeset
3461 || (p[0] == '0' && p[1] == 'z'))
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3462 {
23709
a0c4d04a58c4 patch 8.2.2396: Vim9: no white space allowed before "->"
Bram Moolenaar <Bram@vim.org>
parents: 23648
diff changeset
3463 int oplen;
a0c4d04a58c4 patch 8.2.2396: Vim9: no white space allowed before "->"
Bram Moolenaar <Bram@vim.org>
parents: 23648
diff changeset
3464 int heredoc;
25658
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3465 char_u *swp;
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3466
25670
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3467 if (*eap->cmd == '&'
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3468 || *eap->cmd == '$'
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3469 || (eap->cmd[0] == '@'
25662
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3470 && (valid_yank_reg(eap->cmd[1], FALSE)
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3471 || eap->cmd[1] == '@')))
25658
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3472 {
25662
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3473 if (*eap->cmd == '&')
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3474 {
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3475 p = eap->cmd + 1;
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3476 if (STRNCMP("l:", p, 2) == 0 || STRNCMP("g:", p, 2) == 0)
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3477 p += 2;
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3478 p = to_name_end(p, FALSE);
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3479 }
25670
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3480 else if (*eap->cmd == '$')
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3481 p = to_name_end(eap->cmd + 1, FALSE);
25662
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3482 else
23f065f27d2e patch 8.2.3367: Vim9: :@r executing a register is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 25658
diff changeset
3483 p = eap->cmd + 2;
25658
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3484 if (ends_excmd(*skipwhite(p)))
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3485 {
25670
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3486 // "&option <NL>", "$ENV <NL>" and "@r <NL>" are the start
812c75fd255c patch 8.2.3371: Vim9: :$ENV cannot be followed by ->func() in next line
Bram Moolenaar <Bram@vim.org>
parents: 25662
diff changeset
3487 // of an expression.
25658
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3488 eap->cmdidx = CMD_eval;
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3489 return eap->cmd;
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3490 }
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3491 // "&option" can be followed by "->" or "=", check below
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3492 }
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3493
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3494 swp = skipwhite(p);
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3495
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3496 if (
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3497 // "(..." is an expression.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3498 // "funcname(" is always a function call.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3499 *p == '('
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3500 || (p == eap->cmd
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3501 ? (
22555
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3502 // "{..." is a dict expression or block start.
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3503 *eap->cmd == '{'
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3504 // "'string'->func()" is an expression.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3505 || *eap->cmd == '\''
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21526
diff changeset
3506 // '"string"->func()' is an expression.
27800
6e5d378919c4 patch 8.2.4426: map() function on string and blob does not check types
Bram Moolenaar <Bram@vim.org>
parents: 27720
diff changeset
3507 || (eap->cmd[0] == '0' && eap->cmd[1] == 'z')
6e5d378919c4 patch 8.2.4426: map() function on string and blob does not check types
Bram Moolenaar <Bram@vim.org>
parents: 27720
diff changeset
3508 // '"string"->func()' is an expression.
21544
6c67c86a202a patch 8.2.1322: Vim9: method on double quoted string doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 21526
diff changeset
3509 || *eap->cmd == '"'
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3510 // "g:varname" is an expression.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3511 || eap->cmd[1] == ':'
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3512 )
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3513 // "varname->func()" is an expression.
23709
a0c4d04a58c4 patch 8.2.2396: Vim9: no white space allowed before "->"
Bram Moolenaar <Bram@vim.org>
parents: 23648
diff changeset
3514 : (*swp == '-' && swp[1] == '>')))
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3515 {
22555
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3516 if (*eap->cmd == '{' && ends_excmd(*skipwhite(eap->cmd + 1)))
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3517 {
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3518 // "{" by itself is the start of a block.
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3519 eap->cmdidx = CMD_block;
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3520 return eap->cmd + 1;
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3521 }
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3522 eap->cmdidx = CMD_eval;
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3523 return eap->cmd;
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3524 }
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3525
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3526 if (p != eap->cmd && (
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3527 // "varname[]" is an expression.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3528 *p == '['
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3529 // "varname.key" is an expression.
25330
820395d1137b patch 8.2.3202: Vim9: tests are only executed for legacy script
Bram Moolenaar <Bram@vim.org>
parents: 25320
diff changeset
3530 || (*p == '.' && (ASCII_ISALPHA(p[1])
820395d1137b patch 8.2.3202: Vim9: tests are only executed for legacy script
Bram Moolenaar <Bram@vim.org>
parents: 25320
diff changeset
3531 || p[1] == '_'))))
21413
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3532 {
24434
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3533 char_u *after = eap->cmd;
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3534
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3535 // When followed by "=" or "+=" then it is an assignment.
24434
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3536 // Skip over the whole thing, it can be:
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3537 // name.member = val
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3538 // name[a : b] = val
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3539 // name[idx] = val
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3540 // name[idx].member = val
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3541 // etc.
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3542 eap->cmdidx = CMD_eval;
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3543 ++emsg_silent;
23039
75241f4377a4 patch 8.2.2066: Vim9: assignment with += doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23023
diff changeset
3544 if (skip_expr(&after, NULL) == OK)
24434
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3545 {
23039
75241f4377a4 patch 8.2.2066: Vim9: assignment with += doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23023
diff changeset
3546 after = skipwhite(after);
24434
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3547 if (*after == '=' || (*after != NUL && after[1] == '=')
23039
75241f4377a4 patch 8.2.2066: Vim9: assignment with += doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23023
diff changeset
3548 || (after[0] == '.' && after[1] == '.'
75241f4377a4 patch 8.2.2066: Vim9: assignment with += doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23023
diff changeset
3549 && after[2] == '='))
24434
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3550 eap->cmdidx = CMD_var;
602e528a8e43 patch 8.2.2757: Vim9: blob tests for legacy and Vim9 script are separate
Bram Moolenaar <Bram@vim.org>
parents: 24428
diff changeset
3551 }
22268
2eaee3396f7a patch 8.2.1683: Vim9: assignment test fails
Bram Moolenaar <Bram@vim.org>
parents: 22260
diff changeset
3552 --emsg_silent;
21413
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3553 return eap->cmd;
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3554 }
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3555
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3556 // "[...]->Method()" is a list expression, but "[a, b] = Func()" is
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3557 // an assignment.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3558 // If there is no line break inside the "[...]" then "p" is
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3559 // advanced to after the "]" by to_name_const_end(): check if a "="
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3560 // follows.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3561 // If "[...]" has a line break "p" still points at the "[" and it
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3562 // can't be an assignment.
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3563 if (*eap->cmd == '[')
21413
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3564 {
24984
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3565 char_u *eq;
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3566
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3567 p = to_name_const_end(eap->cmd);
23050
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3568 if (p == eap->cmd && *p == '[')
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3569 {
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3570 int count = 0;
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3571 int semicolon = FALSE;
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3572
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3573 p = skip_var_list(eap->cmd, TRUE, &count, &semicolon, TRUE);
50442f932ff7 patch 8.2.2071: Vim9: list assign doesn't except empty remainder list
Bram Moolenaar <Bram@vim.org>
parents: 23039
diff changeset
3574 }
24984
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3575 eq = p;
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3576 if (eq != NULL)
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3577 {
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3578 eq = skipwhite(eq);
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3579 if (vim_strchr((char_u *)"+-*/%", *eq) != NULL)
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3580 ++eq;
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3581 }
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3582 if (p == NULL || p == eap->cmd || *eq != '=')
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3583 {
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3584 eap->cmdidx = CMD_eval;
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3585 return eap->cmd;
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3586 }
24984
71b1e2ef0069 patch 8.2.3029: Vim9: crash when using operator and list unpack assignment
Bram Moolenaar <Bram@vim.org>
parents: 24966
diff changeset
3587 if (p > eap->cmd && *eq == '=')
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3588 {
22391
a9fb7efa31d6 patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents: 22361
diff changeset
3589 eap->cmdidx = CMD_var;
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3590 return eap->cmd;
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3591 }
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3592 }
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3593
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3594 // Recognize an assignment if we recognize the variable name:
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3595 // "g:var = expr"
25658
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3596 // "@r = expr"
483b40e87ca5 patch 8.2.3365: Vim9: cannot use option for all operations
Bram Moolenaar <Bram@vim.org>
parents: 25622
diff changeset
3597 // "&opt = expr"
24462
7c4f50c02e18 patch 8.2.2771: Vim9: assignment not recognized if declaration was skipped
Bram Moolenaar <Bram@vim.org>
parents: 24434
diff changeset
3598 // "var = expr" where "var" is a variable name or we are skipping
7c4f50c02e18 patch 8.2.2771: Vim9: assignment not recognized if declaration was skipped
Bram Moolenaar <Bram@vim.org>
parents: 24434
diff changeset
3599 // (variable declaration might have been skipped).
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3600 oplen = assignment_len(skipwhite(p), &heredoc);
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3601 if (oplen > 0)
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3602 {
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3603 if (((p - eap->cmd) > 2 && eap->cmd[1] == ':')
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3604 || *eap->cmd == '&'
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3605 || *eap->cmd == '$'
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3606 || *eap->cmd == '@'
24462
7c4f50c02e18 patch 8.2.2771: Vim9: assignment not recognized if declaration was skipped
Bram Moolenaar <Bram@vim.org>
parents: 24434
diff changeset
3607 || eap->skip
24124
f4061617c438 patch 8.2.2603: Vim9: no effect if user command is also a function
Bram Moolenaar <Bram@vim.org>
parents: 24114
diff changeset
3608 || lookup(eap->cmd, p - eap->cmd, TRUE, cctx) == OK)
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3609 {
22391
a9fb7efa31d6 patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents: 22361
diff changeset
3610 eap->cmdidx = CMD_var;
21526
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3611 return eap->cmd;
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3612 }
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3613 }
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3614
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3615 // Recognize using a type for a w:, b:, t: or g: variable:
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3616 // "w:varname: number = 123".
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3617 if (eap->cmd[1] == ':' && *p == ':')
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3618 {
a7afee13873d patch 8.2.1313: Vim9 script: cannot assign to environment variable
Bram Moolenaar <Bram@vim.org>
parents: 21518
diff changeset
3619 eap->cmdidx = CMD_eval;
21413
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3620 return eap->cmd;
8992d4f63761 patch 8.2.1257: Vim9: list unpack doesn't work at the script level
Bram Moolenaar <Bram@vim.org>
parents: 21357
diff changeset
3621 }
21130
4a1e8086759b patch 8.2.1116: Vim9: parsing command checks for list twice
Bram Moolenaar <Bram@vim.org>
parents: 21122
diff changeset
3622 }
23823
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3623
25939
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3624 // "g:", "s:" and "l:" are always assumed to be a variable, thus start
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3625 // an expression. A global/substitute/list command needs to use a
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3626 // longer name.
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3627 if (vim_strchr((char_u *)"gsl", *p) != NULL && p[1] == ':')
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3628 {
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3629 eap->cmdidx = CMD_eval;
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3630 return eap->cmd;
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3631 }
377a7686a52f patch 8.2.3503: Vim9: using g:pat:cmd is confusing
Bram Moolenaar <Bram@vim.org>
parents: 25911
diff changeset
3632
23823
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3633 // If it is an ID it might be a variable with an operator on the next
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3634 // line, if the variable exists it can't be an Ex command.
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3635 if (p > eap->cmd && ends_excmd(*skipwhite(p))
24124
f4061617c438 patch 8.2.2603: Vim9: no effect if user command is also a function
Bram Moolenaar <Bram@vim.org>
parents: 24114
diff changeset
3636 && (lookup(eap->cmd, p - eap->cmd, TRUE, cctx) == OK
23823
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3637 || (ASCII_ISALPHA(eap->cmd[0]) && eap->cmd[1] == ':')))
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3638 {
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3639 eap->cmdidx = CMD_eval;
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3640 return eap->cmd;
262ab14b27db patch 8.2.2453: Vim9: a variable name with "->" in the next line doesn't work
Bram Moolenaar <Bram@vim.org>
parents: 23742
diff changeset
3641 }
24533
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3642
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3643 // Check for "++nr" and "--nr".
26960
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26958
diff changeset
3644 if (p == eap->cmd && p[0] != NUL && p[0] == p[1]
043a15b37bf1 patch 8.2.4009: reading one byte beyond the end of the line
Bram Moolenaar <Bram@vim.org>
parents: 26958
diff changeset
3645 && (*p == '+' || *p == '-'))
24533
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3646 {
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3647 eap->cmdidx = *p == '+' ? CMD_increment : CMD_decrement;
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3648 return eap->cmd + 2;
9c404d78d767 patch 8.2.2806: Vim9: using "++nr" as a command might not work
Bram Moolenaar <Bram@vim.org>
parents: 24531
diff changeset
3649 }
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3650 }
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3651 #endif
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3652
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 * Isolate the command and search for it in the command table.
1441
21b11491a33f updated for version 7.1-156
vimboss
parents: 1427
diff changeset
3655 * Exceptions:
23978
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
3656 * - The 'k' command can directly be followed by any character.
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
3657 * But it is not used in Vim9 script.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 * - 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
3659 * but :sre[wind] is another command, as are :scr[iptnames],
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 * :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3661 * - the "d" command can directly be followed by 'l' or 'p' flag.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 p = eap->cmd;
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3664 if (!vim9 && *p == 'k')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 eap->cmdidx = CMD_k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 }
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3669 else if (!vim9
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3670 && p[0] == 's'
6987
1661dd8df592 patch 7.4.811
Bram Moolenaar <bram@vim.org>
parents: 6965
diff changeset
3671 && ((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
3672 && (p[3] == NUL || (p[3] != 'i' && p[4] != 'p')))))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 || p[1] == 'g'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 || (p[1] == 'i' && p[2] != 'm' && p[2] != 'l' && p[2] != 'g')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 || p[1] == 'I'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 || (p[1] == 'r' && p[2] != 'e')))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 eap->cmdidx = CMD_substitute;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 while (ASCII_ISALPHA(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 ++p;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3685 // for python 3.x support ":py3", ":python3", ":py3file", etc.
2330
ea4bf6df1a8a Whitespace cleanup.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
3686 if (eap->cmd[0] == 'p' && eap->cmd[1] == 'y')
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3687 {
2366
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
3688 while (ASCII_ISALNUM(*p))
7a57fe6a5157 Fix that :py3file was not working.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
3689 ++p;
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3690 }
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3691 else if (*p == '9' && STRNCMP("vim9", eap->cmd, 4) == 0)
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3692 {
24256
b471a413d36a patch 8.2.2669: command line completion does not work after "vim9"
Bram Moolenaar <Bram@vim.org>
parents: 24254
diff changeset
3693 // include "9" for "vim9*" commands; "vim9cmd" and "vim9script".
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3694 ++p;
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3695 while (ASCII_ISALPHA(*p))
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3696 ++p;
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3697 }
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
3698
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3699 // check for non-alpha command
22555
7d25264c246c patch 8.2.1826: Vim9: cannot use a {} block at script level
Bram Moolenaar <Bram@vim.org>
parents: 22543
diff changeset
3700 if (p == eap->cmd && vim_strchr((char_u *)"@*!=><&~#}", *p) != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 len = (int)(p - eap->cmd);
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3703 if (!vim9 && *eap->cmd == 'd' && (p[-1] == 'l' || p[-1] == 'p'))
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3704 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3705 // Check for ":dl", ":dell", etc. to ":deletel": that's
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3706 // :delete with the 'l' flag. Same for 'p'.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3707 for (i = 0; i < len; ++i)
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
3708 if (eap->cmd[i] != ((char_u *)"delete")[i])
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3709 break;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3710 if (i == len - 1)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3711 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3712 --len;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3713 if (p[-1] == 'l')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3714 eap->flags |= EXFLAG_LIST;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3715 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3716 eap->flags |= EXFLAG_PRINT;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3717 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
3718 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3720 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
3721 {
11240
06307d812ca7 patch 8.0.0506: can't build with ANSI C
Christian Brabandt <cb@256bit.org>
parents: 11236
diff changeset
3722 int c1 = eap->cmd[0];
17496
c8152af9fa33 patch 8.1.1746: ":dl" is seen as ":dlist" instead of ":delete"
Bram Moolenaar <Bram@vim.org>
parents: 17488
diff changeset
3723 int c2 = len == 1 ? NUL : eap->cmd[1];
11240
06307d812ca7 patch 8.0.0506: can't build with ANSI C
Christian Brabandt <cb@256bit.org>
parents: 11236
diff changeset
3724
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3725 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
3726 {
26966
ac75c145f0a9 patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
3727 iemsg(_(e_command_table_needs_to_be_updated_run_make_cmdidxs));
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3728 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
3729 }
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3730
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3731 // Use a precomputed index for fast look-up in cmdnames[]
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3732 // taking into account the first 2 letters of eap->cmd.
11236
62c96fee518e patch 8.0.0504: looking up an Ex command is a bit slow
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3733 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
3734 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
3735 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
3736 }
20075
516b10943fdb patch 8.2.0593: finding a user command is not optimal
Bram Moolenaar <Bram@vim.org>
parents: 20063
diff changeset
3737 else if (ASCII_ISUPPER(eap->cmd[0]))
516b10943fdb patch 8.2.0593: finding a user command is not optimal
Bram Moolenaar <Bram@vim.org>
parents: 20063
diff changeset
3738 eap->cmdidx = CMD_Next;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 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
3740 eap->cmdidx = CMD_bang;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 for ( ; (int)eap->cmdidx < (int)CMD_SIZE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 eap->cmdidx = (cmdidx_T)((int)eap->cmdidx + 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744 if (STRNCMP(cmdnames[(int)eap->cmdidx].cmd_name, (char *)eap->cmd,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 (size_t)len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 #ifdef FEAT_EVAL
27970
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3748 if (full != NULL && cmdnames[eap->cmdidx].cmd_name[len] == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 *full = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753
27970
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3754 // :Print and :mode are not supported in Vim9 script.
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3755 // Some commands cannot be shortened in Vim9 script.
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3756 // ":continue" needs at least ":cont", since ":con" looks weird.
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3757 if (vim9 && eap->cmdidx != CMD_SIZE)
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3758 {
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3759 if (eap->cmdidx == CMD_mode || eap->cmdidx == CMD_Print)
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3760 eap->cmdidx = CMD_SIZE;
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3761 else if (((cmdnames[eap->cmdidx].cmd_argt & EX_WHOLE)
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3762 && len < (int)STRLEN(cmdnames[eap->cmdidx].cmd_name))
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3763 || (eap->cmdidx == CMD_continue && len < 4))
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3764 {
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3765 semsg(_(e_command_cannot_be_shortened), eap->cmd);
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3766 eap->cmdidx = CMD_SIZE;
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3767 }
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3768 }
27956
2485bf68de34 patch 8.2.4503: Vim9: there is no point in supporting :Print and :mode
Bram Moolenaar <Bram@vim.org>
parents: 27800
diff changeset
3769
26771
fc859aea8cec patch 8.2.3914: various spelling mistakes in comments
Bram Moolenaar <Bram@vim.org>
parents: 26576
diff changeset
3770 // Do not recognize ":*" as the star command unless '*' is in
22950
1270401054d8 patch 8.2.2022: Vim9: star command recognized errornously
Bram Moolenaar <Bram@vim.org>
parents: 22948
diff changeset
3771 // 'cpoptions'.
1270401054d8 patch 8.2.2022: Vim9: star command recognized errornously
Bram Moolenaar <Bram@vim.org>
parents: 22948
diff changeset
3772 if (eap->cmdidx == CMD_star && vim_strchr(p_cpo, CPO_STAR) == NULL)
1270401054d8 patch 8.2.2022: Vim9: star command recognized errornously
Bram Moolenaar <Bram@vim.org>
parents: 22948
diff changeset
3773 p = eap->cmd;
1270401054d8 patch 8.2.2022: Vim9: star command recognized errornously
Bram Moolenaar <Bram@vim.org>
parents: 22948
diff changeset
3774
16411
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
3775 // Look for a user defined command as a last resort. Let ":Print" be
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
3776 // overruled by a user defined command.
2633
7002404b17b1 updated for version 7.3.054
Bram Moolenaar <bram@vim.org>
parents: 2602
diff changeset
3777 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
3778 && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 {
16411
5b5c5daf57de patch 8.1.1210: support for user commands is spread out
Bram Moolenaar <Bram@vim.org>
parents: 16399
diff changeset
3780 // User defined commands may contain digits.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 while (ASCII_ISALNUM(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 ++p;
184
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3783 p = find_ucmd(eap, p, full, NULL, NULL);
476198990769 updated for version 7.0057
vimboss
parents: 171
diff changeset
3784 }
23205
d998222d314d patch 8.2.2148: Vim9: crash when user command doesn't match
Bram Moolenaar <Bram@vim.org>
parents: 23189
diff changeset
3785 if (p == NULL || p == eap->cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 eap->cmdidx = CMD_SIZE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788
27970
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3789 // ":fina" means ":finally" in legacy script, for backwards compatibility.
212c5894b8b1 patch 8.2.4510: Vim9: shortening commands leads to confusing script
Bram Moolenaar <Bram@vim.org>
parents: 27956
diff changeset
3790 if (eap->cmdidx == CMD_final && p - eap->cmd == 4 && !vim9)
22395
03249b8976a9 patch 8.2.1746: Vim9: cannot use "fina" for "finally"
Bram Moolenaar <Bram@vim.org>
parents: 22393
diff changeset
3791 eap->cmdidx = CMD_finally;
03249b8976a9 patch 8.2.1746: Vim9: cannot use "fina" for "finally"
Bram Moolenaar <Bram@vim.org>
parents: 22393
diff changeset
3792
23189
ea43f4117d06 patch 8.2.2140: build failure with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 23185
diff changeset
3793 #ifdef FEAT_EVAL
23513
872239543313 patch 8.2.2299: Vim9: invalid memory access making error message flaky
Bram Moolenaar <Bram@vim.org>
parents: 23505
diff changeset
3794 if (eap->cmdidx < CMD_SIZE
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3795 && vim9
25304
d39c12f97298 patch 8.2.3189: Vim9: error when using "try|"
Bram Moolenaar <Bram@vim.org>
parents: 25294
diff changeset
3796 && !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!' && *p != '|'
23513
872239543313 patch 8.2.2299: Vim9: invalid memory access making error message flaky
Bram Moolenaar <Bram@vim.org>
parents: 23505
diff changeset
3797 && (eap->cmdidx < 0 ||
872239543313 patch 8.2.2299: Vim9: invalid memory access making error message flaky
Bram Moolenaar <Bram@vim.org>
parents: 23505
diff changeset
3798 (cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
23185
055fa9db6f39 patch 8.2.2138: Vim9: "exit_cb" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 23179
diff changeset
3799 {
24543
b3bd27751e09 patch 8.2.2811: Vim9: error for missing white space doesn't say where
Bram Moolenaar <Bram@vim.org>
parents: 24535
diff changeset
3800 char_u *cmd = vim_strnsave(eap->cmd, p - eap->cmd);
b3bd27751e09 patch 8.2.2811: Vim9: error for missing white space doesn't say where
Bram Moolenaar <Bram@vim.org>
parents: 24535
diff changeset
3801
b3bd27751e09 patch 8.2.2811: Vim9: error for missing white space doesn't say where
Bram Moolenaar <Bram@vim.org>
parents: 24535
diff changeset
3802 semsg(_(e_command_str_not_followed_by_white_space_str), cmd, eap->cmd);
23185
055fa9db6f39 patch 8.2.2138: Vim9: "exit_cb" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 23179
diff changeset
3803 eap->cmdidx = CMD_SIZE;
24543
b3bd27751e09 patch 8.2.2811: Vim9: error for missing white space doesn't say where
Bram Moolenaar <Bram@vim.org>
parents: 24535
diff changeset
3804 vim_free(cmd);
23185
055fa9db6f39 patch 8.2.2138: Vim9: "exit_cb" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 23179
diff changeset
3805 }
23189
ea43f4117d06 patch 8.2.2140: build failure with tiny features
Bram Moolenaar <Bram@vim.org>
parents: 23185
diff changeset
3806 #endif
23185
055fa9db6f39 patch 8.2.2138: Vim9: "exit_cb" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 23179
diff changeset
3807
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811 #if defined(FEAT_EVAL) || defined(PROTO)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3812 static struct cmdmod
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3813 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3814 char *name;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3815 int minlen;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3816 int has_count; // :123verbose :3tab
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3817 } cmdmods[] = {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3818 {"aboveleft", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3819 {"belowright", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3820 {"botright", 2, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3821 {"browse", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3822 {"confirm", 4, FALSE},
9941
e975914c17e9 commit https://github.com/vim/vim/commit/7b668e83d0635d082b7ec90d7d2aa30a9d7d8928
Christian Brabandt <cb@256bit.org>
parents: 9927
diff changeset
3823 {"filter", 4, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3824 {"hide", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3825 {"keepalt", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3826 {"keepjumps", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3827 {"keepmarks", 3, FALSE},
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5464
diff changeset
3828 {"keeppatterns", 5, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3829 {"leftabove", 5, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3830 {"lockmarks", 3, FALSE},
1721
d23a400b7184 updated for version 7.2-019
vimboss
parents: 1689
diff changeset
3831 {"noautocmd", 3, FALSE},
5737
e25a04c1c515 updated for version 7.4.213
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
3832 {"noswapfile", 3, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3833 {"rightbelow", 6, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3834 {"sandbox", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3835 {"silent", 3, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3836 {"tab", 3, TRUE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3837 {"topleft", 2, FALSE},
1926
43d337097e4c updated for version 7.2-223
vimboss
parents: 1925
diff changeset
3838 {"unsilent", 3, FALSE},
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3839 {"verbose", 4, TRUE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3840 {"vertical", 4, FALSE},
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3841 };
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3842
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3843 /*
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3844 * Return length of a command modifier (including optional count).
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3845 * Return zero when it's not a modifier.
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3846 */
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3847 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3848 modifier_len(char_u *cmd)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3849 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3850 int i, j;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3851 char_u *p = cmd;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3852
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3853 if (VIM_ISDIGIT(*cmd))
24665
661d15592d3c patch 8.2.2871: unnessary VIM_ISDIGIT() calls, badly indented code
Bram Moolenaar <Bram@vim.org>
parents: 24555
diff changeset
3854 p = skipwhite(skipdigits(cmd + 1));
24768
7334bf933510 patch 8.2.2922: computing array length is done in various ways
Bram Moolenaar <Bram@vim.org>
parents: 24723
diff changeset
3855 for (i = 0; i < (int)ARRAY_LENGTH(cmdmods); ++i)
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3856 {
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3857 for (j = 0; p[j] != NUL; ++j)
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3858 if (p[j] != cmdmods[i].name[j])
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3859 break;
4857
84a8d1ba81c3 updated for version 7.3.1175
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
3860 if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3861 && (p == cmd || cmdmods[i].has_count))
1570
f0cfff4dcc2f updated for version 7.1-283
vimboss
parents: 1557
diff changeset
3862 return j + (int)(p - cmd);
1447
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3863 }
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3864 return 0;
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3865 }
dac5006b4443 updated for version 7.1-162
vimboss
parents: 1442
diff changeset
3866
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 * Return > 0 if an Ex command "name" exists.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 * Return 2 if there is an exact match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 * Return 3 if there is an ambiguous match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3873 cmd_exists(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 exarg_T ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 int full = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 int j;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3879 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3881 // Check command modifiers.
24768
7334bf933510 patch 8.2.2922: computing array length is done in various ways
Bram Moolenaar <Bram@vim.org>
parents: 24723
diff changeset
3882 for (i = 0; i < (int)ARRAY_LENGTH(cmdmods); ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 for (j = 0; name[j] != NUL; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 if (name[j] != cmdmods[i].name[j])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 if (name[j] == NUL && j >= cmdmods[i].minlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 return (cmdmods[i].name[j] == NUL ? 2 : 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3891 // Check built-in commands and user defined commands.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3892 // For ":2match" and ":3match" we need to skip the number.
862
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3893 ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 ea.cmdidx = (cmdidx_T)0;
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
3895 p = find_ex_command(&ea, &full, NULL, NULL);
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3896 if (p == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 return 3;
862
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3898 if (vim_isdigit(*name) && ea.cmdidx != CMD_match)
bb084e291010 updated for version 7.0g03
vimboss
parents: 859
diff changeset
3899 return 0;
866
5de6b337e1a2 updated for version 7.0g04
vimboss
parents: 862
diff changeset
3900 if (*skipwhite(p) != NUL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
3901 return 0; // trailing garbage
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3902 return (ea.cmdidx == CMD_SIZE ? 0 : (full ? 2 : 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 }
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3904
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3905 /*
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3906 * "fullcommand" function
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3907 */
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3908 void
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3909 f_fullcommand(typval_T *argvars, typval_T *rettv)
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3910 {
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3911 exarg_T ea;
25384
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3912 char_u *name;
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3913 char_u *p;
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3914
24697
a6e43da449af patch 8.2.2887: crash when passing null string to fullcommand()
Bram Moolenaar <Bram@vim.org>
parents: 24665
diff changeset
3915 rettv->v_type = VAR_STRING;
a6e43da449af patch 8.2.2887: crash when passing null string to fullcommand()
Bram Moolenaar <Bram@vim.org>
parents: 24665
diff changeset
3916 rettv->vval.v_string = NULL;
25384
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3917
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3918 if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3919 return;
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3920
e8e2c4d33b9b patch 8.2.3229: Vim9: runtime and compile time type checks are not the same
Bram Moolenaar <Bram@vim.org>
parents: 25330
diff changeset
3921 name = argvars[0].vval.v_string;
24697
a6e43da449af patch 8.2.2887: crash when passing null string to fullcommand()
Bram Moolenaar <Bram@vim.org>
parents: 24665
diff changeset
3922 if (name == NULL)
a6e43da449af patch 8.2.2887: crash when passing null string to fullcommand()
Bram Moolenaar <Bram@vim.org>
parents: 24665
diff changeset
3923 return;
a6e43da449af patch 8.2.2887: crash when passing null string to fullcommand()
Bram Moolenaar <Bram@vim.org>
parents: 24665
diff changeset
3924
26941
33120321ff2c patch 8.2.3999: redundant check for NUL byte
Bram Moolenaar <Bram@vim.org>
parents: 26915
diff changeset
3925 while (*name == ':')
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3926 name++;
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3927 name = skip_range(name, TRUE, NULL);
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3928
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3929 ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name;
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3930 ea.cmdidx = (cmdidx_T)0;
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3931 ea.addr_count = 0;
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3932 p = find_ex_command(&ea, NULL, NULL, NULL);
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3933 if (p == NULL || ea.cmdidx == CMD_SIZE)
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3934 return;
24699
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3935 if (in_vim9script())
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3936 {
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3937 int res;
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3938
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3939 ++emsg_silent;
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3940 res = not_in_vim9(&ea);
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3941 --emsg_silent;
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3942
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3943 if (res == FAIL)
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3944 return;
b19c8150ee9d patch 8.2.2888: Vim9: "k" command recognized in Vim9 script
Bram Moolenaar <Bram@vim.org>
parents: 24697
diff changeset
3945 }
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3946
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3947 rettv->vval.v_string = vim_strsave(IS_USER_CMDIDX(ea.cmdidx)
25757
589226a5f317 patch 8.2.3414: fullcommand() gives wrong name with buffer-local user command
Bram Moolenaar <Bram@vim.org>
parents: 25739
diff changeset
3948 ? get_user_command_name(ea.useridx, ea.cmdidx)
589226a5f317 patch 8.2.3414: fullcommand() gives wrong name with buffer-local user command
Bram Moolenaar <Bram@vim.org>
parents: 25739
diff changeset
3949 : cmdnames[ea.cmdidx].cmd_name);
23853
a9ed31ab85c3 patch 8.2.2468: not easy to get the full command name from a shortened one
Bram Moolenaar <Bram@vim.org>
parents: 23823
diff changeset
3950 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952
17835
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3953 cmdidx_T
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3954 excmd_get_cmdidx(char_u *cmd, int len)
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3955 {
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3956 cmdidx_T idx;
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3957
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3958 for (idx = (cmdidx_T)0; (int)idx < (int)CMD_SIZE;
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3959 idx = (cmdidx_T)((int)idx + 1))
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3960 if (STRNCMP(cmdnames[(int)idx].cmd_name, cmd, (size_t)len) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962
17835
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3963 return idx;
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3964 }
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3965
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3966 long
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3967 excmd_get_argt(cmdidx_T idx)
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3968 {
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
3969 return (long)cmdnames[(int)idx].cmd_argt;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 /*
14505
3f1a17863b73 patch 8.1.0266: parsing Ex address range is not a separate function
Christian Brabandt <cb@256bit.org>
parents: 14479
diff changeset
3973 * Skip a range specifier of the form: addr [,addr] [;addr] ..
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 * Backslashed delimiters after / or ? will be skipped, and commands will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 * not be expanded between /'s and ?'s or after "'".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 *
20982
bb49b5090a9c patch 8.2.1042: Vim9: cannot put an operator on the next line
Bram Moolenaar <Bram@vim.org>
parents: 20897
diff changeset
3978 * Also skip white space and ":" characters after the range.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 * Returns the "cmd" pointer advanced to beyond the range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3982 skip_range(
26327
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
3983 char_u *cmd_start,
22260
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
3984 int skip_star, // skip "*" used for Visual range
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
3985 int *ctx) // pointer to xp_context or NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 {
26327
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
3987 char_u *cmd = cmd_start;
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
3988 unsigned delim;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989
10817
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3990 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
3991 {
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3992 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
3993 {
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3994 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
3995 ++cmd;
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3996 else
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3997 break;
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3998 }
cc8079703414 patch 8.0.0298: Ex command range with repeated search does not work
Christian Brabandt <cb@256bit.org>
parents: 10809
diff changeset
3999 else if (*cmd == '\'')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 {
26327
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4001 char_u *p = cmd;
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4002
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4003 // a quote is only valid at the start or after a separator
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4004 while (p > cmd_start)
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4005 {
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4006 --p;
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4007 if (!VIM_ISWHITE(*p))
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4008 break;
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4009 }
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4010 if (cmd > cmd_start && !VIM_ISWHITE(*p) && *p != ',' && *p != ';')
227543e4181f patch 8.2.3694: cannot use quotes in the count of an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 26319
diff changeset
4011 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 if (*++cmd == NUL && ctx != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 *ctx = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 else if (*cmd == '/' || *cmd == '?')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 delim = *cmd++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 while (*cmd != NUL && *cmd != delim)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 if (*cmd++ == '\\' && *cmd != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4020 ++cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4021 if (*cmd == NUL && ctx != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4022 *ctx = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4023 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4024 if (*cmd != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4025 ++cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4026 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4027
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4028 // Skip ":" and white space.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4029 while (*cmd == ':')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4030 cmd = skipwhite(cmd + 1);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4031
22260
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
4032 // Skip "*" used for Visual range.
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
4033 if (skip_star && *cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
4034 cmd = skipwhite(cmd + 1);
d7c1e3efa88e patch 8.2.1679: Vim9: ":*" is not recognized as a range
Bram Moolenaar <Bram@vim.org>
parents: 22208
diff changeset
4035
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4036 return cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4037 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4038
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4039 static void
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4040 addr_error(cmd_addr_T addr_type)
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4041 {
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4042 if (addr_type == ADDR_NONE)
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
4043 emsg(_(e_no_range_allowed));
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4044 else
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4045 emsg(_(e_invalid_range));
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4046 }
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4047
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 /*
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4049 * Return the default address for an address type.
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4050 */
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4051 static linenr_T
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4052 default_address(exarg_T *eap)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4053 {
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4054 linenr_T lnum = 0;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4055
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4056 switch (eap->addr_type)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4057 {
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4058 case ADDR_LINES:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4059 case ADDR_OTHER:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4060 // Default is the cursor line number. Avoid using an invalid
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4061 // line number though.
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4062 if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4063 lnum = curbuf->b_ml.ml_line_count;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4064 else
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4065 lnum = curwin->w_cursor.lnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4066 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4067 case ADDR_WINDOWS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4068 lnum = CURRENT_WIN_NR;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4069 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4070 case ADDR_ARGUMENTS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4071 lnum = curwin->w_arg_idx + 1;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4072 if (lnum > ARGCOUNT)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4073 lnum = ARGCOUNT;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4074 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4075 case ADDR_LOADED_BUFFERS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4076 case ADDR_BUFFERS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4077 lnum = curbuf->b_fnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4078 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4079 case ADDR_TABS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4080 lnum = CURRENT_TAB_NR;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4081 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4082 case ADDR_TABS_RELATIVE:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4083 case ADDR_UNSIGNED:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4084 lnum = 1;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4085 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4086 case ADDR_QUICKFIX:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4087 #ifdef FEAT_QUICKFIX
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4088 lnum = qf_get_cur_idx(eap);
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4089 #endif
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4090 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4091 case ADDR_QUICKFIX_VALID:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4092 #ifdef FEAT_QUICKFIX
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4093 lnum = qf_get_cur_valid_idx(eap);
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4094 #endif
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4095 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4096 case ADDR_NONE:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4097 // Will give an error later if a range is found.
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4098 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4099 }
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4100 return lnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4101 }
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4102
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4103 /*
14677
7771a1ff8b99 patch 8.1.0351: 'incsearch' for :/foo/s//<Esc> changes last search pattern
Christian Brabandt <cb@256bit.org>
parents: 14648
diff changeset
4104 * Get a single EX address.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106 * Set ptr to the next character after the part that was interpreted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 * Set ptr to NULL when an error is encountered.
14677
7771a1ff8b99 patch 8.1.0351: 'incsearch' for :/foo/s//<Esc> changes last search pattern
Christian Brabandt <cb@256bit.org>
parents: 14648
diff changeset
4108 * This may set the last used search pattern.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110 * Return MAXLNUM when no Ex address was found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112 static linenr_T
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4113 get_address(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4114 exarg_T *eap UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4115 char_u **ptr,
18849
b77ef4b8af7c patch 8.1.2411: function argument copied unnecessarily
Bram Moolenaar <Bram@vim.org>
parents: 18779
diff changeset
4116 cmd_addr_T addr_type,
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4117 int skip, // only skip the address, don't use it
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4118 int silent, // no errors or side effects
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4119 int to_other_file, // flag: may jump to other file
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4120 int address_count UNUSED) // 1 for first address, >1 after comma
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 char_u *cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127 pos_T *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 linenr_T lnum;
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4129 buf_T *buf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 cmd = skipwhite(*ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 lnum = MAXLNUM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 switch (*cmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4137 case '.': // '.' - Cursor position
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4138 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4139 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4140 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4141 case ADDR_LINES:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4142 case ADDR_OTHER:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 lnum = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4145 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4146 lnum = CURRENT_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4147 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4148 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4149 lnum = curwin->w_arg_idx + 1;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4150 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4151 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4152 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4153 lnum = curbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4154 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4155 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4156 lnum = CURRENT_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4157 break;
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4158 case ADDR_NONE:
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4159 case ADDR_TABS_RELATIVE:
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4160 case ADDR_UNSIGNED:
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4161 addr_error(addr_type);
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4162 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4163 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4164 break;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4165 case ADDR_QUICKFIX:
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4166 #ifdef FEAT_QUICKFIX
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4167 lnum = qf_get_cur_idx(eap);
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4168 #endif
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4169 break;
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4170 case ADDR_QUICKFIX_VALID:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4171 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4172 lnum = qf_get_cur_valid_idx(eap);
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4173 #endif
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4174 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4175 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4176 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4178 case '$': // '$' - last line
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4179 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4180 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4181 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4182 case ADDR_LINES:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4183 case ADDR_OTHER:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 lnum = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4186 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4187 lnum = LAST_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4188 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4189 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4190 lnum = ARGCOUNT;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4191 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4192 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4193 buf = lastbuf;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4194 while (buf->b_ml.ml_mfp == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4195 {
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4196 if (buf->b_prev == NULL)
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4197 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4198 buf = buf->b_prev;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4199 }
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4200 lnum = buf->b_fnum;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4201 break;
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4202 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4203 lnum = lastbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4204 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4205 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4206 lnum = LAST_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4207 break;
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4208 case ADDR_NONE:
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4209 case ADDR_TABS_RELATIVE:
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4210 case ADDR_UNSIGNED:
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4211 addr_error(addr_type);
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4212 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4213 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4214 break;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4215 case ADDR_QUICKFIX:
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4216 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4217 lnum = qf_get_size(eap);
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4218 if (lnum == 0)
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4219 lnum = 1;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4220 #endif
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4221 break;
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4222 case ADDR_QUICKFIX_VALID:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4223 #ifdef FEAT_QUICKFIX
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4224 lnum = qf_get_valid_size(eap);
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4225 if (lnum == 0)
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4226 lnum = 1;
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4227 #endif
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4228 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4229 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4230 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4232 case '\'': // ''' - mark
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4233 if (*++cmd == NUL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4234 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4235 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4236 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4237 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4238 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4239 {
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4240 addr_error(addr_type);
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4241 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4242 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4243 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4244 if (skip)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4245 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4246 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4247 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4248 // Only accept a mark in another file when it is
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4249 // used by itself: ":'M".
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4250 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
4251 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4252 if (fp == (pos_T *)-1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4253 // Jumped to another file.
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4254 lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4255 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4256 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4257 if (check_mark(fp) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 cmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 goto error;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4262 lnum = fp->lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4263 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4264 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4265 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 case '/':
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4268 case '?': // '/' or '?' - search
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4269 c = *cmd++;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4270 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4271 {
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4272 addr_error(addr_type);
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4273 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4274 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4275 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4276 if (skip) // skip "/pat/"
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4277 {
23272
a84e7abb0c92 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Bram Moolenaar <Bram@vim.org>
parents: 23239
diff changeset
4278 cmd = skip_regexp(cmd, c, magic_isset());
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4279 if (*cmd == c)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4280 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4281 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4282 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4283 {
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4284 int flags;
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4285
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4286 pos = curwin->w_cursor; // save curwin->w_cursor
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4287
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4288 // When '/' or '?' follows another address, start from
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4289 // there.
25911
d6d31972c76d patch 8.2.3489: ml_get error after search with range
Bram Moolenaar <Bram@vim.org>
parents: 25883
diff changeset
4290 if (lnum > 0 && lnum != MAXLNUM)
d6d31972c76d patch 8.2.3489: ml_get error after search with range
Bram Moolenaar <Bram@vim.org>
parents: 25883
diff changeset
4291 curwin->w_cursor.lnum =
d6d31972c76d patch 8.2.3489: ml_get error after search with range
Bram Moolenaar <Bram@vim.org>
parents: 25883
diff changeset
4292 lnum > curbuf->b_ml.ml_line_count
d6d31972c76d patch 8.2.3489: ml_get error after search with range
Bram Moolenaar <Bram@vim.org>
parents: 25883
diff changeset
4293 ? curbuf->b_ml.ml_line_count : lnum;
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4294
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4295 // Start a forward search at the end of the line (unless
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4296 // before the first line).
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4297 // Start a backward search at the start of the line.
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4298 // This makes sure we never match in the current
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4299 // line, and can match anywhere in the
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4300 // next/previous line.
13082
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12824
diff changeset
4301 if (c == '/' && curwin->w_cursor.lnum > 0)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4302 curwin->w_cursor.col = MAXCOL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4303 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4304 curwin->w_cursor.col = 0;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4305 searchcmdlen = 0;
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
4306 flags = silent ? 0 : SEARCH_HIS | SEARCH_MSG;
19475
5512aa74cb62 patch 8.2.0295: highlighting for :s wrong when using different separator
Bram Moolenaar <Bram@vim.org>
parents: 19433
diff changeset
4307 if (!do_search(NULL, c, c, cmd, 1L, flags, NULL))
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4308 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4309 curwin->w_cursor = pos;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4310 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4311 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4312 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4313 lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4314 curwin->w_cursor = pos;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4315 // adjust command string pointer
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4316 cmd += searchcmdlen;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4317 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4318 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4319
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4320 case '\\': // "\?", "\/" or "\&", repeat search
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4321 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4322 if (addr_type != ADDR_LINES)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4323 {
17650
a1437b8f2fac patch 8.1.1822: confusing error message when range is not allowed
Bram Moolenaar <Bram@vim.org>
parents: 17644
diff changeset
4324 addr_error(addr_type);
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4325 cmd = NULL;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4326 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4327 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4328 if (*cmd == '&')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4329 i = RE_SUBST;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4330 else if (*cmd == '?' || *cmd == '/')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4331 i = RE_SEARCH;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4332 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4333 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4334 emsg(_(e_backslash_should_be_followed_by));
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4335 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4336 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4337 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4338
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4339 if (!skip)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4340 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4341 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4342 * When search follows another address, start from
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4343 * there.
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4344 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4345 if (lnum != MAXLNUM)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4346 pos.lnum = lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4347 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4348 pos.lnum = curwin->w_cursor.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4349
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4350 /*
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4351 * Start the search just like for the above
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4352 * do_search().
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4353 */
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4354 if (*cmd != '?')
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4355 pos.col = MAXCOL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4356 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4357 pos.col = 0;
7007
5ea5bd9c18d2 patch 7.4.821
Bram Moolenaar <bram@vim.org>
parents: 6987
diff changeset
4358 pos.coladd = 0;
15239
db5d2429bda3 patch 8.1.0629: "gn" selects the wrong text with a multi-line match
Bram Moolenaar <Bram@vim.org>
parents: 15227
diff changeset
4359 if (searchit(curwin, curbuf, &pos, NULL,
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4360 *cmd == '?' ? BACKWARD : FORWARD,
18358
34d5cd432cac patch 8.1.2173: searchit() has too many arguments
Bram Moolenaar <Bram@vim.org>
parents: 18297
diff changeset
4361 (char_u *)"", 1L, SEARCH_MSG, i, NULL) != FAIL)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4362 lnum = pos.lnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4363 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4364 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4365 cmd = NULL;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4366 goto error;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4367 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4368 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4369 ++cmd;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4370 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 default:
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4373 if (VIM_ISDIGIT(*cmd)) // absolute line number
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4374 lnum = getdigits(&cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 cmd = skipwhite(cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 if (*cmd != '-' && *cmd != '+' && !VIM_ISDIGIT(*cmd))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 if (lnum == MAXLNUM)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4384 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4385 switch (addr_type)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4386 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4387 case ADDR_LINES:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4388 case ADDR_OTHER:
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4389 // "+1" is same as ".+1"
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4390 lnum = curwin->w_cursor.lnum;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4391 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4392 case ADDR_WINDOWS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4393 lnum = CURRENT_WIN_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4394 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4395 case ADDR_ARGUMENTS:
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4396 lnum = curwin->w_arg_idx + 1;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4397 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4398 case ADDR_LOADED_BUFFERS:
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4399 case ADDR_BUFFERS:
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4400 lnum = curbuf->b_fnum;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4401 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4402 case ADDR_TABS:
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
4403 lnum = CURRENT_TAB_NR;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4404 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4405 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
4406 lnum = 1;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4407 break;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4408 case ADDR_QUICKFIX:
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4409 #ifdef FEAT_QUICKFIX
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4410 lnum = qf_get_cur_idx(eap);
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4411 #endif
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4412 break;
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4413 case ADDR_QUICKFIX_VALID:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4414 #ifdef FEAT_QUICKFIX
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4415 lnum = qf_get_cur_valid_idx(eap);
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4416 #endif
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4417 break;
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4418 case ADDR_NONE:
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4419 case ADDR_UNSIGNED:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4420 lnum = 0;
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4421 break;
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4422 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4423 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
4424
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 if (VIM_ISDIGIT(*cmd))
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4426 i = '+'; // "number" is same as "+number"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 i = *cmd++;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4429 if (!VIM_ISDIGIT(*cmd)) // '+' is '+1', but '+0' is not '+1'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 n = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 else
26256
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4432 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4433 n = getdigits(&cmd);
26256
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4434 if (n == MAXLNUM)
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4435 {
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4436 emsg(_(e_line_number_out_of_range));
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4437 goto error;
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4438 }
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4439 }
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4440
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4441 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
4442 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4443 emsg(_(e_invalid_range));
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4444 cmd = NULL;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4445 goto error;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4446 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4447 else if (addr_type == ADDR_LOADED_BUFFERS
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6419
diff changeset
4448 || addr_type == ADDR_BUFFERS)
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4449 lnum = compute_buffer_local_count(
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4450 addr_type, lnum, (i == '-') ? -1 * n : n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 else
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4452 {
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4453 #ifdef FEAT_FOLDING
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4454 // Relative line addressing, need to adjust for folded lines
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4455 // now, but only do it after the first address.
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4456 if (addr_type == ADDR_LINES && (i == '-' || i == '+')
26256
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4457 && address_count >= 2)
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4458 (void)hasFolding(lnum, NULL, &lnum);
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4459 #endif
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4460 if (i == '-')
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4461 lnum -= n;
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4462 else
26256
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4463 {
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4464 if (n >= LONG_MAX - lnum)
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4465 {
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4466 emsg(_(e_line_number_out_of_range));
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4467 goto error;
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4468 }
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4469 lnum += n;
26256
92fbed13ca4d patch 8.2.3659: integer overflow with large line number
Bram Moolenaar <Bram@vim.org>
parents: 26181
diff changeset
4470 }
10484
c7de1536780a commit https://github.com/vim/vim/commit/ded2782783f352201ac0b05c6dbe4831adb4a58b
Christian Brabandt <cb@256bit.org>
parents: 10480
diff changeset
4471 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 } while (*cmd == '/' || *cmd == '?');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 error:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 *ptr = cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477 return lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4479
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4480 /*
21939
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4481 * Set eap->line1 and eap->line2 to the whole range.
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4482 * Used for commands with the EX_DFLALL flag and no range given.
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4483 */
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4484 static void
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4485 address_default_all(exarg_T *eap)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4486 {
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4487 eap->line1 = 1;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4488 switch (eap->addr_type)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4489 {
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4490 case ADDR_LINES:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4491 case ADDR_OTHER:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4492 eap->line2 = curbuf->b_ml.ml_line_count;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4493 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4494 case ADDR_LOADED_BUFFERS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4495 {
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4496 buf_T *buf = firstbuf;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4497
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4498 while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4499 buf = buf->b_next;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4500 eap->line1 = buf->b_fnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4501 buf = lastbuf;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4502 while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4503 buf = buf->b_prev;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4504 eap->line2 = buf->b_fnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4505 }
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4506 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4507 case ADDR_BUFFERS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4508 eap->line1 = firstbuf->b_fnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4509 eap->line2 = lastbuf->b_fnum;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4510 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4511 case ADDR_WINDOWS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4512 eap->line2 = LAST_WIN_NR;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4513 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4514 case ADDR_TABS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4515 eap->line2 = LAST_TAB_NR;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4516 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4517 case ADDR_TABS_RELATIVE:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4518 eap->line2 = 1;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4519 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4520 case ADDR_ARGUMENTS:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4521 if (ARGCOUNT == 0)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4522 eap->line1 = eap->line2 = 0;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4523 else
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4524 eap->line2 = ARGCOUNT;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4525 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4526 case ADDR_QUICKFIX_VALID:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4527 #ifdef FEAT_QUICKFIX
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4528 eap->line2 = qf_get_valid_size(eap);
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4529 if (eap->line2 == 0)
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4530 eap->line2 = 1;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4531 #endif
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4532 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4533 case ADDR_NONE:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4534 case ADDR_UNSIGNED:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4535 case ADDR_QUICKFIX:
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4536 iemsg(_("INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"));
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4537 break;
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4538 }
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4539 }
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4540
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4541
8350bdbdbb28 patch 8.2.1519: Vim9: Ex command default range is not set
Bram Moolenaar <Bram@vim.org>
parents: 21937
diff changeset
4542 /*
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4543 * Get flags from an Ex command argument.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4544 */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4545 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4546 get_flags(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4547 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4548 while (vim_strchr((char_u *)"lp#", *eap->arg) != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4549 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4550 if (*eap->arg == 'l')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4551 eap->flags |= EXFLAG_LIST;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4552 else if (*eap->arg == 'p')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4553 eap->flags |= EXFLAG_PRINT;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4554 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4555 eap->flags |= EXFLAG_NR;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4556 eap->arg = skipwhite(eap->arg + 1);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4557 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4558 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4559
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
4560 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561 * Function called for command which is Not Implemented. NI!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4564 ex_ni(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 if (!eap->skip)
21459
a422bd80b434 patch 8.2.1280: Ex command error cannot contain an argument
Bram Moolenaar <Bram@vim.org>
parents: 21413
diff changeset
4567 eap->errmsg =
26909
aa65d1808bd0 patch 8.2.3983: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26883
diff changeset
4568 _(e_sorry_command_is_not_available_in_this_version);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570
1315
0868e4e53fb2 updated for version 7.1-029
vimboss
parents: 1305
diff changeset
4571 #ifdef HAVE_EX_SCRIPT_NI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 * Function called for script command which is Not Implemented. NI!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 * Skips over ":perl <<EOF" constructs.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4577 ex_script_ni(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4578 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4579 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4580 ex_ni(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 vim_free(script_get(eap, eap->arg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4583 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4585
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 * Check range in Ex command for validity.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 * Return NULL when valid, error message when invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
4590 static char *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4591 invalid_range(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4592 {
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4593 buf_T *buf;
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4594
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595 if ( eap->line1 < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 || eap->line2 < 0
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4597 || eap->line1 > eap->line2)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4598 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4599
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
4600 if (eap->argt & EX_RANGE)
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4601 {
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4602 switch (eap->addr_type)
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4603 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4604 case ADDR_LINES:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4605 if (eap->line2 > curbuf->b_ml.ml_line_count
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4606 #ifdef FEAT_DIFF
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4607 + (eap->cmdidx == CMD_diffget)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4608 #endif
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4609 )
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4610 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4611 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4612 case ADDR_ARGUMENTS:
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4613 // add 1 if ARGCOUNT is 0
6581
05202d6ba0ef updated for version 7.4.617
Bram Moolenaar <bram@vim.org>
parents: 6506
diff changeset
4614 if (eap->line2 > ARGCOUNT + (!ARGCOUNT))
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4615 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4616 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4617 case ADDR_BUFFERS:
17823
7e6b7a4f13bc patch 8.1.1908: every popup window consumes a buffer number
Bram Moolenaar <Bram@vim.org>
parents: 17817
diff changeset
4618 // Only a boundary check, not whether the buffers actually
7e6b7a4f13bc patch 8.1.1908: every popup window consumes a buffer number
Bram Moolenaar <Bram@vim.org>
parents: 17817
diff changeset
4619 // exist.
7e6b7a4f13bc patch 8.1.1908: every popup window consumes a buffer number
Bram Moolenaar <Bram@vim.org>
parents: 17817
diff changeset
4620 if (eap->line1 < 1 || eap->line2 > get_highest_fnum())
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4621 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4622 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4623 case ADDR_LOADED_BUFFERS:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4624 buf = firstbuf;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4625 while (buf->b_ml.ml_mfp == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4626 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4627 if (buf->b_next == NULL)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4628 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4629 buf = buf->b_next;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4630 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4631 if (eap->line1 < buf->b_fnum)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4632 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4633 buf = lastbuf;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4634 while (buf->b_ml.ml_mfp == NULL)
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4635 {
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4636 if (buf->b_prev == NULL)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4637 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4638 buf = buf->b_prev;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4639 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4640 if (eap->line2 > buf->b_fnum)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4641 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4642 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4643 case ADDR_WINDOWS:
6480
747cbac7047b updated for version 7.4.568
Bram Moolenaar <bram@vim.org>
parents: 6472
diff changeset
4644 if (eap->line2 > LAST_WIN_NR)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4645 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4646 break;
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4647 case ADDR_TABS:
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4648 if (eap->line2 > LAST_TAB_NR)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4649 return _(e_invalid_range);
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4650 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4651 case ADDR_TABS_RELATIVE:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4652 case ADDR_OTHER:
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4653 // Any range is OK.
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
4654 break;
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4655 case ADDR_QUICKFIX:
7105
f4456e686406 commit https://github.com/vim/vim/commit/e906c502079770ae0e0071c74cefb802689ff193
Christian Brabandt <cb@256bit.org>
parents: 7092
diff changeset
4656 #ifdef FEAT_QUICKFIX
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4657 // No error for value that is too big, will use the last entry.
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4658 if (eap->line2 <= 0)
26568
c675779d5f2b patch 8.2.3813: confusing error when using :cc without error list
Bram Moolenaar <Bram@vim.org>
parents: 26532
diff changeset
4659 {
c675779d5f2b patch 8.2.3813: confusing error when using :cc without error list
Bram Moolenaar <Bram@vim.org>
parents: 26532
diff changeset
4660 if (eap->addr_count == 0)
c675779d5f2b patch 8.2.3813: confusing error when using :cc without error list
Bram Moolenaar <Bram@vim.org>
parents: 26532
diff changeset
4661 return _(e_no_errors);
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4662 return _(e_invalid_range);
26568
c675779d5f2b patch 8.2.3813: confusing error when using :cc without error list
Bram Moolenaar <Bram@vim.org>
parents: 26532
diff changeset
4663 }
16479
7dcf301d1432 patch 8.1.1243: compiler warnings for incomplete switch statement
Bram Moolenaar <Bram@vim.org>
parents: 16475
diff changeset
4664 #endif
7092
64e30831fa42 commit https://github.com/vim/vim/commit/aa23b379421aa214e6543b06c974594a25799b09
Christian Brabandt <cb@256bit.org>
parents: 7007
diff changeset
4665 break;
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4666 case ADDR_QUICKFIX_VALID:
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4667 #ifdef FEAT_QUICKFIX
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4668 if ((eap->line2 != 1 && eap->line2 > qf_get_valid_size(eap))
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4669 || eap->line2 < 0)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
4670 return _(e_invalid_range);
16515
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4671 #endif
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4672 break;
6e87a69b8e0c patch 8.1.1261: no error for quickfix commands with negative range
Bram Moolenaar <Bram@vim.org>
parents: 16505
diff changeset
4673 case ADDR_UNSIGNED:
16475
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4674 case ADDR_NONE:
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4675 // Will give an error elsewhere.
854fb0ad4be6 patch 8.1.1241: Ex command info contains confusing information
Bram Moolenaar <Bram@vim.org>
parents: 16451
diff changeset
4676 break;
6472
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4677 }
22f95a018b13 updated for version 7.4.565
Bram Moolenaar <bram@vim.org>
parents: 6464
diff changeset
4678 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4679 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4680 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4682 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4683 * Correct the range for zero line number, if required.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4686 correct_range(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 {
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
4688 if (!(eap->argt & EX_ZEROR)) // zero in range not allowed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4689 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4690 if (eap->line1 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4691 eap->line1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4692 if (eap->line2 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693 eap->line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4697 #ifdef FEAT_QUICKFIX
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4698 /*
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4699 * For a ":vimgrep" or ":vimgrepadd" command return a pointer past the
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4700 * pattern. Otherwise return eap->arg.
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4701 */
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4702 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4703 skip_grep_pat(exarg_T *eap)
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4704 {
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4705 char_u *p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4706
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4707 if (*p != NUL && (eap->cmdidx == CMD_vimgrep || eap->cmdidx == CMD_lvimgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4708 || eap->cmdidx == CMD_vimgrepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4709 || eap->cmdidx == CMD_lvimgrepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4710 || grep_internal(eap->cmdidx)))
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4711 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 167
diff changeset
4712 p = skip_vimgrep_pat(p, NULL, NULL);
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4713 if (p == NULL)
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4714 p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4715 }
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4716 return p;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4717 }
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4718
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4719 /*
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4720 * For the ":make" and ":grep" commands insert the 'makeprg'/'grepprg' option
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4721 * in the command line, so that things like % get expanded.
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4722 */
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4723 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4724 replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4725 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4726 char_u *new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4727 char_u *program;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4728 char_u *pos;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4729 char_u *ptr;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4730 int len;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4731 int i;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4732
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4733 /*
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4734 * Don't do it when ":vimgrep" is used for ":grep".
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4735 */
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4736 if ((eap->cmdidx == CMD_make || eap->cmdidx == CMD_lmake
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4737 || eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4738 || eap->cmdidx == CMD_grepadd
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4739 || eap->cmdidx == CMD_lgrepadd)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4740 && !grep_internal(eap->cmdidx))
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4741 {
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4742 if (eap->cmdidx == CMD_grep || eap->cmdidx == CMD_lgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4743 || eap->cmdidx == CMD_grepadd || eap->cmdidx == CMD_lgrepadd)
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4744 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4745 if (*curbuf->b_p_gp == NUL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4746 program = p_gp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4747 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4748 program = curbuf->b_p_gp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4749 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4750 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4751 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4752 if (*curbuf->b_p_mp == NUL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4753 program = p_mp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4754 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4755 program = curbuf->b_p_mp;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4756 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4757
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4758 p = skipwhite(p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4759
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4760 if ((pos = (char_u *)strstr((char *)program, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4761 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4762 // replace $* by given arguments
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4763 i = 1;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4764 while ((pos = (char_u *)strstr((char *)pos + 2, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4765 ++i;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4766 len = (int)STRLEN(p);
27453
c7f614c9ceb3 patch 8.2.4255: theoretical computation overflow
Bram Moolenaar <Bram@vim.org>
parents: 27426
diff changeset
4767 new_cmdline = alloc(STRLEN(program) + (size_t)i * (len - 2) + 1);
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4768 if (new_cmdline == NULL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4769 return NULL; // out of memory
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4770 ptr = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4771 while ((pos = (char_u *)strstr((char *)program, "$*")) != NULL)
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4772 {
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4773 i = (int)(pos - program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4774 STRNCPY(ptr, program, i);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4775 STRCPY(ptr += i, p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4776 ptr += len;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4777 program = pos + 2;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4778 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4779 STRCPY(ptr, program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4780 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4781 else
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4782 {
16782
fc58fee685e2 patch 8.1.1393: unnecessary type casts
Bram Moolenaar <Bram@vim.org>
parents: 16780
diff changeset
4783 new_cmdline = alloc(STRLEN(program) + STRLEN(p) + 2);
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4784 if (new_cmdline == NULL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4785 return NULL; // out of memory
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4786 STRCPY(new_cmdline, program);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4787 STRCAT(new_cmdline, " ");
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4788 STRCAT(new_cmdline, p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4789 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4790 msg_make(p);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4791
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4792 // 'eap->cmd' is not set here, because it is not used at CMD_make
344
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4793 vim_free(*cmdlinep);
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4794 *cmdlinep = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4795 p = new_cmdline;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4796 }
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4797 return p;
7033303ea0c0 updated for version 7.0089
vimboss
parents: 330
diff changeset
4798 }
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4799 #endif
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4800
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 * Expand file name in Ex command argument.
17081
81b791a843bc patch 8.1.1540: cannot build without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 16874
diff changeset
4803 * When an error is detected, "errormsgp" is set to a non-NULL pointer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804 * Return FAIL for failure, OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4807 expand_filename(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4808 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4809 char_u **cmdlinep,
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
4810 char **errormsgp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4811 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4812 int has_wildcards; // need to expand wildcards
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 char_u *repl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814 int srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 int n;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
4817 int escaped;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4819 #ifdef FEAT_QUICKFIX
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4820 // Skip a regexp pattern for ":vimgrep[add] pat file..."
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4821 p = skip_grep_pat(eap);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4822 #else
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4823 p = eap->arg;
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4824 #endif
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4825
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 * Decide to expand wildcards *before* replacing '%', '#', etc. If
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 * the file name contains a wildcard it should not cause expanding.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4829 * (it will be expanded anyway if there is a wildcard before replacing).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 */
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4831 has_wildcards = mch_has_wildcard(p);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
4832 while (*p != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833 {
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4834 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4835 // Skip over `=expr`, wildcards in it are not expanded.
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4836 if (p[0] == '`' && p[1] == '=')
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4837 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4838 p += 2;
22685
80b4e604d1d5 patch 8.2.1891: Vim9: skipping over expression doesn't handle line breaks
Bram Moolenaar <Bram@vim.org>
parents: 22616
diff changeset
4839 (void)skip_expr(&p, NULL);
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4840 if (*p == '`')
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4841 ++p;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4842 continue;
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4843 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
4844 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4846 * Quick check if this cannot be the start of a special string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847 * Also removes backslash before '%', '#' and '<'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4848 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 if (vim_strchr((char_u *)"%#<", *p) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4851 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4855 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 * Try to find a match at this position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 */
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
4858 repl = eval_vars(p, eap->arg, &srclen, &(eap->do_ecmd_lnum),
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
4859 errormsgp, &escaped);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4860 if (*errormsgp != NULL) // error detected
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4861 return FAIL;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4862 if (repl == NULL) // no match found
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4863 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864 p += srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4865 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4867
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4868 // Wildcards won't be expanded below, the replacement is taken
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4869 // literally. But do expand "~/file", "~user/file" and "$HOME/file".
37
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4870 if (vim_strchr(repl, '$') != NULL || vim_strchr(repl, '~') != NULL)
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4871 {
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4872 char_u *l = repl;
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4873
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4874 repl = expand_env_save(repl);
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4875 vim_free(l);
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4876 }
fdf55076c53f updated for version 7.0022
vimboss
parents: 36
diff changeset
4877
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4878 // Need to escape white space et al. with a backslash.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4879 // Don't do this for:
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4880 // - replacement that already has been escaped: "##"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4881 // - shell commands (may have to use quotes instead).
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4882 // - non-unix systems when there is a single argument (spaces don't
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4883 // separate arguments then).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4884 if (!eap->usefilter
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
4885 && !escaped
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4886 && eap->cmdidx != CMD_bang
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4887 && eap->cmdidx != CMD_grep
11806
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4888 && eap->cmdidx != CMD_grepadd
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4889 && eap->cmdidx != CMD_hardcopy
655
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4890 && eap->cmdidx != CMD_lgrep
7566e1cda7bf updated for version 7.0193
vimboss
parents: 649
diff changeset
4891 && eap->cmdidx != CMD_lgrepadd
11806
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4892 && eap->cmdidx != CMD_lmake
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4893 && eap->cmdidx != CMD_make
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4894 && eap->cmdidx != CMD_terminal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4895 #ifndef UNIX
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
4896 && !(eap->argt & EX_NOSPC)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4897 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4898 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4899 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4900 char_u *l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901 #ifdef BACKSLASH_IN_FILENAME
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4902 // Don't escape a backslash here, because rem_backslash() doesn't
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4903 // remove it later.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 static char_u *nobslash = (char_u *)" \t\"|";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4905 # define ESCAPE_CHARS nobslash
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4906 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4907 # define ESCAPE_CHARS escape_chars
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4908 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 for (l = repl; *l; ++l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 if (vim_strchr(ESCAPE_CHARS, *l) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4913 l = vim_strsave_escaped(repl, ESCAPE_CHARS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4914 if (l != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4916 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4917 repl = l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4919 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4920 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4922
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4923 // For a shell command a '!' must be escaped.
11806
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4924 if ((eap->usefilter || eap->cmdidx == CMD_bang
1c1cb1e9b7b3 patch 8.0.0785: wildcards are not expanded for :terminal
Christian Brabandt <cb@256bit.org>
parents: 11757
diff changeset
4925 || eap->cmdidx == CMD_terminal)
5778
22a1d5762ba3 updated for version 7.4.233
Bram Moolenaar <bram@vim.org>
parents: 5776
diff changeset
4926 && vim_strpbrk(repl, (char_u *)"!") != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4927 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4928 char_u *l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4929
5778
22a1d5762ba3 updated for version 7.4.233
Bram Moolenaar <bram@vim.org>
parents: 5776
diff changeset
4930 l = vim_strsave_escaped(repl, (char_u *)"!");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4931 if (l != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4932 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4933 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4934 repl = l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938 p = repl_cmdline(eap, p, srclen, repl, cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4942 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 * One file argument: Expand wildcards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4946 * Don't do this with ":r !command" or ":w !command".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4947 */
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
4948 if ((eap->argt & EX_NOSPC) && !eap->usefilter)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4949 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4950 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4951 * May do this twice:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4952 * 1. Replace environment variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 * 2. Replace any other wildcards, remove backslashes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4954 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955 for (n = 1; n <= 2; ++n)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4956 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4957 if (n == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 * Halve the number of backslashes (this is Vi compatible).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961 * For Unix and OS/2, when wildcards are expanded, this is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4962 * done by ExpandOne() below.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963 */
7408
1886f2863437 commit https://github.com/vim/vim/commit/e7fedb6ebe72d9a475aa65109b77d5ed4667067a
Christian Brabandt <cb@256bit.org>
parents: 7262
diff changeset
4964 #if defined(UNIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965 if (!has_wildcards)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 backslash_halve(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 if (has_wildcards)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4972 if (n == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975 * First loop: May expand environment variables. This
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4976 * can be done much faster with expand_env() than with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4977 * something else (e.g., calling a shell).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4978 * After expanding environment variables, check again
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4979 * if there are still wildcards present.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4980 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4981 if (vim_strchr(eap->arg, '$') != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4982 || vim_strchr(eap->arg, '~') != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4983 {
372
a698eb686ded updated for version 7.0096
vimboss
parents: 358
diff changeset
4984 expand_env_esc(eap->arg, NameBuff, MAXPATHL,
1408
db8309865794 updated for version 7.1-123
vimboss
parents: 1369
diff changeset
4985 TRUE, TRUE, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4986 has_wildcards = mch_has_wildcard(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4987 p = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4989 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4990 p = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4991 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
4992 else // n == 2
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4994 expand_T xpc;
18386
105c6cf8b266 patch 8.1.2187: error for bad regexp even though regexp is not used
Bram Moolenaar <Bram@vim.org>
parents: 18358
diff changeset
4995 int options = WILD_LIST_NOTFOUND
105c6cf8b266 patch 8.1.2187: error for bad regexp even though regexp is not used
Bram Moolenaar <Bram@vim.org>
parents: 18358
diff changeset
4996 | WILD_NOERROR | WILD_ADD_SLASH;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4997
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4998 ExpandInit(&xpc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4999 xpc.xp_context = EXPAND_FILES;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5000 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5001 options += WILD_ICASE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 p = ExpandOne(&xpc, eap->arg, NULL,
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2645
diff changeset
5003 options, WILD_EXPAND_FREE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5004 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5005 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5006 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5007 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5009 (void)repl_cmdline(eap, eap->arg, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5010 p, cmdlinep);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5011 if (n == 2) // p came from ExpandOne()
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5012 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5015 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5016 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5017 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5018 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5020 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5021 * Replace part of the command line, keeping eap->cmd, eap->arg and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5022 * eap->nextcmd correct.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5023 * "src" points to the part that is to be replaced, of length "srclen".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5024 * "repl" is the replacement string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5025 * Returns a pointer to the character after the replaced string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5026 * Returns NULL for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5027 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5028 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5029 repl_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5030 exarg_T *eap,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5031 char_u *src,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5032 int srclen,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5033 char_u *repl,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5034 char_u **cmdlinep)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5036 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5037 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5038 char_u *new_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5039
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5040 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5041 * The new command line is build in new_cmdline[].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5042 * First allocate it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5043 * Careful: a "+cmd" argument may have been NUL terminated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5044 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5045 len = (int)STRLEN(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5046 i = (int)(src - *cmdlinep) + (int)STRLEN(src + srclen) + len + 3;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 694
diff changeset
5047 if (eap->nextcmd != NULL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5048 i += (int)STRLEN(eap->nextcmd);// add space for next command
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16738
diff changeset
5049 if ((new_cmdline = alloc(i)) == NULL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5050 return NULL; // out of memory!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5052 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5053 * Copy the stuff before the expanded part.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5054 * Copy the expanded stuff.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5055 * Copy what came after the expanded part.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5056 * Copy the next commands, if there are any.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5057 */
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5058 i = (int)(src - *cmdlinep); // length of part before match
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5059 mch_memmove(new_cmdline, *cmdlinep, (size_t)i);
434
9595cf1d80a7 updated for version 7.0112
vimboss
parents: 416
diff changeset
5060
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5061 mch_memmove(new_cmdline + i, repl, (size_t)len);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5062 i += len; // remember the end of the string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5063 STRCPY(new_cmdline + i, src + srclen);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5064 src = new_cmdline + i; // remember where to continue
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5065
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5066 if (eap->nextcmd != NULL) // append next command
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5068 i = (int)STRLEN(new_cmdline) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5069 STRCPY(new_cmdline + i, eap->nextcmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5070 eap->nextcmd = new_cmdline + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5072 eap->cmd = new_cmdline + (eap->cmd - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073 eap->arg = new_cmdline + (eap->arg - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074 if (eap->do_ecmd_cmd != NULL && eap->do_ecmd_cmd != dollar_command)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5075 eap->do_ecmd_cmd = new_cmdline + (eap->do_ecmd_cmd - *cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5076 vim_free(*cmdlinep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5077 *cmdlinep = new_cmdline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5079 return src;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5080 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5081
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5082 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5083 * Check for '|' to separate commands and '"' to start comments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5084 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5085 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5086 separate_nextcmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5087 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5088 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5089
153
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5090 #ifdef FEAT_QUICKFIX
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5091 p = skip_grep_pat(eap);
19670b05ee32 updated for version 7.0047
vimboss
parents: 146
diff changeset
5092 #else
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5093 p = eap->arg;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5094 #endif
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5095
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
5096 for ( ; *p; MB_PTR_ADV(p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5098 if (*p == Ctrl_V)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099 {
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
5100 if (eap->argt & (EX_CTRLV | EX_XFILE))
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5101 ++p; // skip CTRL-V and next char
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5102 else
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5103 // remove CTRL-V and skip next char
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
5104 STRMOVE(p, p + 1);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5105 if (*p == NUL) // stop at NUL after CTRL-V
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5106 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5107 }
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5108
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5109 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5110 // Skip over `=expr` when wildcards are expanded.
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
5111 else if (p[0] == '`' && p[1] == '=' && (eap->argt & EX_XFILE))
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5112 {
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5113 p += 2;
22685
80b4e604d1d5 patch 8.2.1891: Vim9: skipping over expression doesn't handle line breaks
Bram Moolenaar <Bram@vim.org>
parents: 22616
diff changeset
5114 (void)skip_expr(&p, NULL);
22724
51bc501a13ca patch 8.2.1910: reading past the end of the command line
Bram Moolenaar <Bram@vim.org>
parents: 22699
diff changeset
5115 if (*p == NUL) // stop at NUL after CTRL-V
51bc501a13ca patch 8.2.1910: reading past the end of the command line
Bram Moolenaar <Bram@vim.org>
parents: 22699
diff changeset
5116 break;
9
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5117 }
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5118 #endif
4102fb4ea781 updated for version 7.0002
vimboss
parents: 8
diff changeset
5119
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5120 // Check for '"': start of comment or '|': next command
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5121 // :@" and :*" do not start a comment!
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5122 // :redir @" doesn't either.
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5123 else if ((*p == '"'
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5124 #ifdef FEAT_EVAL
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5125 && !in_vim9script()
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5126 #endif
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5127 && !(eap->argt & EX_NOTRLCOM)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5128 && ((eap->cmdidx != CMD_at && eap->cmdidx != CMD_star)
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5129 || p != eap->arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 && (eap->cmdidx != CMD_redir
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5131 || p != eap->arg + 1 || p[-1] != '@'))
20079
336483164ca6 patch 8.2.0595: Vim9: not all commands using ends_excmd() tested
Bram Moolenaar <Bram@vim.org>
parents: 20075
diff changeset
5132 #ifdef FEAT_EVAL
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5133 || (*p == '#'
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5134 && in_vim9script()
21893
f19ac9b8b011 patch 8.2.1496: Vim9: cannot use " #" in a mapping
Bram Moolenaar <Bram@vim.org>
parents: 21885
diff changeset
5135 && !(eap->argt & EX_NOTRLCOM)
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5136 && p > eap->cmd && VIM_ISWHITE(p[-1]))
20079
336483164ca6 patch 8.2.0595: Vim9: not all commands using ends_excmd() tested
Bram Moolenaar <Bram@vim.org>
parents: 20075
diff changeset
5137 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5138 || *p == '|' || *p == '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 /*
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
5141 * We remove the '\' before the '|', unless EX_CTRLV is used
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 * AND 'b' is present in 'cpoptions'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5144 if ((vim_strchr(p_cpo, CPO_BAR) == NULL
17336
81705f4d9e03 patch 8.1.1667: flags for Ex commands may clash with other symbols
Bram Moolenaar <Bram@vim.org>
parents: 17178
diff changeset
5145 || !(eap->argt & EX_CTRLV)) && *(p - 1) == '\\')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5147 STRMOVE(p - 1, p); // remove the '\'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5148 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5149 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5150 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5152 eap->nextcmd = check_nextcmd(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5153 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5154 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5155 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5156 }
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5157 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
5158
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5159 if (!(eap->argt & EX_NOTRLCOM)) // remove trailing spaces
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5160 del_trailing_spaces(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5163 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5164 * get + command from ex argument
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5165 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5166 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5167 getargcmd(char_u **argp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5169 char_u *arg = *argp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5170 char_u *command = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5172 if (*arg == '+') // +[command]
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5173 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5174 ++arg;
5790
98bfec9ea760 updated for version 7.4.239
Bram Moolenaar <bram@vim.org>
parents: 5778
diff changeset
5175 if (vim_isspace(*arg) || *arg == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5176 command = dollar_command;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5177 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5179 command = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180 arg = skip_cmd_arg(command, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5181 if (*arg != NUL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5182 *arg++ = NUL; // terminate command with NUL
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5183 }
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5184
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5185 arg = skipwhite(arg); // skip over spaces
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5186 *argp = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5187 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5188 return command;
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 * Find end of "+command" argument. Skip over "\ " and "\\".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5193 */
17835
fd6c8dc33152 patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents: 17823
diff changeset
5194 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5195 skip_cmd_arg(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5196 char_u *p,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5197 int rembs) // TRUE to halve the number of backslashes
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5198 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199 while (*p && !vim_isspace(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201 if (*p == '\\' && p[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5203 if (rembs)
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1613
diff changeset
5204 STRMOVE(p, p + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5205 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5206 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5207 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11010
diff changeset
5208 MB_PTR_ADV(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5210 return p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5211 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5212
13575
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5213 int
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5214 get_bad_opt(char_u *p, exarg_T *eap)
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5215 {
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5216 if (STRICMP(p, "keep") == 0)
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5217 eap->bad_char = BAD_KEEP;
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5218 else if (STRICMP(p, "drop") == 0)
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5219 eap->bad_char = BAD_DROP;
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5220 else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5221 eap->bad_char = *p;
14051
c1ead25ed819 patch 8.1.0043: ++bad argument of :edit does not work properly
Christian Brabandt <cb@256bit.org>
parents: 14035
diff changeset
5222 else
c1ead25ed819 patch 8.1.0043: ++bad argument of :edit does not work properly
Christian Brabandt <cb@256bit.org>
parents: 14035
diff changeset
5223 return FAIL;
c1ead25ed819 patch 8.1.0043: ++bad argument of :edit does not work properly
Christian Brabandt <cb@256bit.org>
parents: 14035
diff changeset
5224 return OK;
13575
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5225 }
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5226
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5228 * Get "++opt=arg" argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5229 * Return FAIL or OK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5230 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5231 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5232 getargopt(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234 char_u *arg = eap->arg + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5235 int *pp = NULL;
2168
99b00399c7b4 updated for version 7.2.435
Bram Moolenaar <bram@vim.org>
parents: 2148
diff changeset
5236 int bad_char_idx;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5237 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5238
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5239 // ":edit ++[no]bin[ary] file"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5240 if (STRNCMP(arg, "bin", 3) == 0 || STRNCMP(arg, "nobin", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5242 if (*arg == 'n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244 arg += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5245 eap->force_bin = FORCE_NOBIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5247 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248 eap->force_bin = FORCE_BIN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249 if (!checkforcmd(&arg, "binary", 3))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5250 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5251 eap->arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5252 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5253 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5255 // ":read ++edit file"
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5256 if (STRNCMP(arg, "edit", 4) == 0)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5257 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5258 eap->read_edit = TRUE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5259 eap->arg = skipwhite(arg + 4);
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5260 return OK;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5261 }
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5262
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 if (STRNCMP(arg, "ff", 2) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5264 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5265 arg += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5266 pp = &eap->force_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5268 else if (STRNCMP(arg, "fileformat", 10) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5269 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5270 arg += 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5271 pp = &eap->force_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5272 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5273 else if (STRNCMP(arg, "enc", 3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5274 {
3208
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5275 if (STRNCMP(arg, "encoding", 8) == 0)
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5276 arg += 8;
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5277 else
0a9d7cf90f94 updated for version 7.3.374
Bram Moolenaar <bram@vim.org>
parents: 3151
diff changeset
5278 arg += 3;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5279 pp = &eap->force_enc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5280 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5281 else if (STRNCMP(arg, "bad", 3) == 0)
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5282 {
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5283 arg += 3;
2168
99b00399c7b4 updated for version 7.2.435
Bram Moolenaar <bram@vim.org>
parents: 2148
diff changeset
5284 pp = &bad_char_idx;
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5285 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5287 if (pp == NULL || *arg != '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5288 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5289
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5290 ++arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5291 *pp = (int)(arg - eap->cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5292 arg = skip_cmd_arg(arg, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5293 eap->arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5294 *arg = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 if (pp == &eap->force_ff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5297 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 if (check_ff_value(eap->cmd + eap->force_ff) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5299 return FAIL;
13575
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5300 eap->force_ff = eap->cmd[eap->force_ff];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5302 else if (pp == &eap->force_enc)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5303 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5304 // Make 'fileencoding' lower case.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5305 for (p = eap->cmd + eap->force_enc; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5306 *p = TOLOWER_ASC(*p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5307 }
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5308 else
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5309 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5310 // Check ++bad= argument. Must be a single-byte character, "keep" or
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5311 // "drop".
13575
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13553
diff changeset
5312 if (get_bad_opt(eap->cmd + bad_char_idx, eap) == FAIL)
595
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5313 return FAIL;
fea48f63efc8 updated for version 7.0169
vimboss
parents: 588
diff changeset
5314 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5316 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5317 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5320 ex_autocmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5321 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5322 /*
14266
7346b2ea80d8 patch 8.1.0149: session is wrong with multiple tabs when :lcd was used
Christian Brabandt <cb@256bit.org>
parents: 14155
diff changeset
5323 * Disallow autocommands from .exrc and .vimrc in current
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5324 * directory for security reasons.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5325 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5326 if (secure)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5327 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5328 secure = 2;
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
5329 eap->errmsg =
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
5330 _(e_command_not_allowed_from_vimrc_in_current_dir_or_tag_search);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5331 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5332 else if (eap->cmdidx == CMD_autocmd)
25463
05f9e8f2016c patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents: 25451
diff changeset
5333 do_autocmd(eap, eap->arg, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5334 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5335 do_augroup(eap->arg, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5336 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5337
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5338 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5339 * ":doautocmd": Apply the automatic commands to the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5340 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5341 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5342 ex_doautocmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5343 {
3350
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5344 char_u *arg = eap->arg;
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5345 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
5346 int did_aucmd;
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5347
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5348 (void)do_doautocmd(arg, TRUE, &did_aucmd);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5349 // Only when there is no <nomodeline>.
9260
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
5350 if (call_do_modelines && did_aucmd)
3350
198ec1fff71a updated for version 7.3.442
Bram Moolenaar <bram@vim.org>
parents: 3304
diff changeset
5351 do_modelines(0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5352 }
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 * :[N]bunload[!] [N] [bufname] unload buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5356 * :[N]bdelete[!] [N] [bufname] delete buffer from buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5357 * :[N]bwipeout[!] [N] [bufname] delete buffer really
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5358 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5359 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5360 ex_bunload(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5361 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5362 if (ERROR_IF_ANY_POPUP_WINDOW)
16874
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
5363 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5364 eap->errmsg = do_bufdel(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5365 eap->cmdidx == CMD_bdelete ? DOBUF_DEL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5366 : eap->cmdidx == CMD_bwipeout ? DOBUF_WIPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5367 : DOBUF_UNLOAD, eap->arg,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5368 eap->addr_count, (int)eap->line1, (int)eap->line2, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5372 * :[N]buffer [N] to buffer N
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5373 * :[N]sbuffer [N] to buffer N
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5374 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5375 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5376 ex_buffer(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5377 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5378 if (ERROR_IF_ANY_POPUP_WINDOW)
16874
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
5379 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5380 if (*eap->arg)
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
5381 eap->errmsg = ex_errmsg(e_trailing_characters_str, eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5382 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5383 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5384 if (eap->addr_count == 0) // default is current buffer
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5385 goto_buffer(eap, DOBUF_CURRENT, FORWARD, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5386 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5387 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
5388 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5389 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5390 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5391 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5392
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5393 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5394 * :[N]bmodified [N] to next mod. buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5395 * :[N]sbmodified [N] to next mod. buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5397 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5398 ex_bmodified(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400 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
5401 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5402 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5403 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406 * :[N]bnext [N] to next buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5407 * :[N]sbnext [N] split and to next buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5408 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5409 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5410 ex_bnext(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5412 if (ERROR_IF_ANY_POPUP_WINDOW)
19135
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5413 return;
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5414
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 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
5416 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5417 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5418 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5420 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5421 * :[N]bNext [N] to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5422 * :[N]bprevious [N] to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423 * :[N]sbNext [N] split and to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 * :[N]sbprevious [N] split and to previous buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5427 ex_bprevious(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5429 if (ERROR_IF_ANY_POPUP_WINDOW)
19135
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5430 return;
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5431
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 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
5433 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5434 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5435 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5437 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5438 * :brewind to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 * :bfirst to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 * :sbrewind split and to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 * :sbfirst split and to first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5444 ex_brewind(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5446 if (ERROR_IF_ANY_POPUP_WINDOW)
19135
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5447 return;
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5448
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449 goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5450 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5451 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5454 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 * :blast to last buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456 * :sblast split and to last buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5459 ex_blast(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 {
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
5461 if (ERROR_IF_ANY_POPUP_WINDOW)
19135
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5462 return;
17722555af22 patch 8.2.0127: some buffer commands work in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19131
diff changeset
5463
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5464 goto_buffer(eap, DOBUF_LAST, BACKWARD, 0);
6230
7c9abc70ffc1 updated for version 7.4.450
Bram Moolenaar <bram@vim.org>
parents: 6191
diff changeset
5465 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
5466 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5467 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468
20059
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5469 /*
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5470 * Check if "c" ends an Ex command.
23185
055fa9db6f39 patch 8.2.2138: Vim9: "exit_cb" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 23179
diff changeset
5471 * In Vim9 script does not check for white space before #.
20059
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5472 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5473 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5474 ends_excmd(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 {
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5476 int comment_char = '"';
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5477
20027
23a4aef4f923 patch 8.2.0569: build failure with tiny version
Bram Moolenaar <Bram@vim.org>
parents: 20023
diff changeset
5478 #ifdef FEAT_EVAL
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5479 if (in_vim9script())
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5480 comment_char = '#';
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5481 #endif
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5482 return (c == NUL || c == '|' || c == comment_char || c == '\n');
20059
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5483 }
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5484
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5485 /*
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5486 * Like ends_excmd() but checks that a # in Vim9 script either has "cmd" equal
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5487 * to "cmd_start" or has a white space character before it.
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5488 */
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5489 int
20063
cc146cde0b4d patch 8.2.0587: compiler warning for unused variable
Bram Moolenaar <Bram@vim.org>
parents: 20059
diff changeset
5490 ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
20059
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5491 {
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5492 int c = *cmd;
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5493
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5494 if (c == NUL || c == '|' || c == '\n')
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5495 return TRUE;
20059
de756b3f4dee patch 8.2.0585: Vim9: # comment not recognized after :vim9script
Bram Moolenaar <Bram@vim.org>
parents: 20027
diff changeset
5496 #ifdef FEAT_EVAL
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5497 if (in_vim9script())
24176
12378fbc99bc patch 8.2.2629: Vim9: error for #{{ is not desired
Bram Moolenaar <Bram@vim.org>
parents: 24174
diff changeset
5498 // # starts a comment, #{ might be a mistake, #{{ can start a fold
12378fbc99bc patch 8.2.2629: Vim9: error for #{{ is not desired
Bram Moolenaar <Bram@vim.org>
parents: 24174
diff changeset
5499 return c == '#' && (cmd[1] != '{' || cmd[2] == '{')
24174
99bfaa4693db patch 8.2.2628: Vim9: #{ can still be used at the script level
Bram Moolenaar <Bram@vim.org>
parents: 24124
diff changeset
5500 && (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5501 #endif
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
5502 return c == '"';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5504
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA) || defined(FEAT_EVAL) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5507 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508 * Return the next command, after the first '|' or '\n'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5509 * Return NULL if not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5512 find_nextcmd(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 while (*p != '|' && *p != '\n')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5515 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516 if (*p == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520 return (p + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524 /*
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5525 * 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
5526 * Return NULL if it isn't, the following character if it is.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5529 check_nextcmd(char_u *p)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 {
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5531 char_u *s = skipwhite(p);
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5532
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5533 if (*s == '|' || *s == '\n')
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
5534 return (s + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5538
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5539 /*
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5540 * If "eap->nextcmd" is not set, check for a next command at "p".
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5541 */
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5542 void
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5543 set_nextcmd(exarg_T *eap, char_u *arg)
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5544 {
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5545 char_u *p = check_nextcmd(arg);
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5546
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5547 if (eap->nextcmd == NULL)
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5548 eap->nextcmd = p;
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5549 else if (p != NULL)
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5550 // cannot use "| command" inside a {} block
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5551 semsg(_(e_cannot_use_bar_to_separate_commands_here_str), arg);
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5552 }
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5553
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
5554 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555 * - if there are more files to edit
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556 * - and this is the last window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 * - and forceit not used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 * - and not repeated twice on a row
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 * return FAIL and give error message if 'message' TRUE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 * return OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5563 check_more(
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5564 int message, // when FALSE check only, no messages
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5565 int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5566 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5567 int n = ARGCOUNT - curwin->w_arg_idx - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5568
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
5569 if (!forceit && only_one_window()
21845
0e6ee11977b3 patch 8.2.1472: ":argdel" does not work like ":.argdel" as documented
Bram Moolenaar <Bram@vim.org>
parents: 21821
diff changeset
5570 && ARGCOUNT > 1 && !arg_had_last && n > 0 && quitmore == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 if (message)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5573 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5574 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
5575 if ((p_confirm || (cmdmod.cmod_flags & CMOD_CONFIRM))
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
5576 && curbuf->b_fname != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5577 {
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
5578 char_u buff[DIALOG_MSG_SIZE];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5579
14585
c8f07e8b273e patch 8.1.0306: plural messages are not translated properly
Christian Brabandt <cb@256bit.org>
parents: 14550
diff changeset
5580 vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
c8f07e8b273e patch 8.1.0306: plural messages are not translated properly
Christian Brabandt <cb@256bit.org>
parents: 14550
diff changeset
5581 NGETTEXT("%d more file to edit. Quit anyway?",
c8f07e8b273e patch 8.1.0306: plural messages are not translated properly
Christian Brabandt <cb@256bit.org>
parents: 14550
diff changeset
5582 "%d more files to edit. Quit anyway?", n), n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5583 if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5584 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5585 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5587 #endif
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
5588 semsg(NGETTEXT(e_nr_more_file_to_edit,
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
5589 e_nr_more_files_to_edit , n), n);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5590 quitmore = 2; // next try to quit is allowed
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5592 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5595 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 * Function given to ExpandGeneric() to obtain the list of command names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5601 get_command_name(expand_T *xp UNUSED, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 if (idx >= (int)CMD_SIZE)
25757
589226a5f317 patch 8.2.3414: fullcommand() gives wrong name with buffer-local user command
Bram Moolenaar <Bram@vim.org>
parents: 25739
diff changeset
5604 return expand_user_command_name(idx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5605 return cmdnames[idx].cmd_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5606 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5609 ex_colorscheme(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5610 {
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5611 if (*eap->arg == NUL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5612 {
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5613 #ifdef FEAT_EVAL
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5614 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
5615 char_u *p = NULL;
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5616
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5617 if (expr != NULL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5618 {
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5619 ++emsg_off;
20996
3af71cbcfdbe patch 8.2.1049: Vim9: leaking memory when using continuation line
Bram Moolenaar <Bram@vim.org>
parents: 20982
diff changeset
5620 p = eval_to_string(expr, FALSE);
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5621 --emsg_off;
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5622 vim_free(expr);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5623 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5624 if (p != NULL)
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5625 {
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
5626 msg((char *)p);
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5627 vim_free(p);
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5628 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5629 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
5630 msg("default");
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5631 #else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
5632 msg(_("unknown"));
2142
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5633 #endif
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5634 }
c60d231453cf updated for version 7.2.424
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
5635 else if (load_colors(eap->arg) == FAIL)
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
5636 semsg(_(e_cannot_find_color_scheme_str), eap->arg);
15663
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5637
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5638 #ifdef FEAT_VTP
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5639 else if (has_vtp_working())
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5640 {
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5641 // background color change requires clear + redraw
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5642 update_screen(CLEAR);
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5643 redrawcmd();
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5644 }
61448894376e patch 8.1.0839: when using VTP wrong colors after a color scheme change
Bram Moolenaar <Bram@vim.org>
parents: 15643
diff changeset
5645 #endif
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 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5649 ex_highlight(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 if (*eap->arg == NUL && eap->cmd[2] == '!')
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
5652 msg(_("Greetings, Vim user!"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653 do_highlight(eap->arg, eap->forceit, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5655
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5657 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5658 * 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
5659 * (because of an error). May need to restore the terminal mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5660 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5662 not_exiting(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5664 exiting = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665 settmode(TMODE_RAW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5667
24719
4ae10e6c3a9c patch 8.2.2898: QuitPre and ExitPre not triggered when GUI window is closed
Bram Moolenaar <Bram@vim.org>
parents: 24699
diff changeset
5668 int
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5669 before_quit_autocmds(win_T *wp, int quit_all, int forceit)
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5670 {
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5671 apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, wp->w_buffer);
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5672
18406
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5673 // Bail out when autocommands closed the window.
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5674 // Refuse to quit when the buffer in the last window is being closed (can
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5675 // only happen in autocommands).
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5676 if (!win_valid(wp)
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5677 || curbuf_locked()
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5678 || (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0))
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5679 return TRUE;
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5680
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5681 if (quit_all || (check_more(FALSE, forceit) == OK && only_one_window()))
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5682 {
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5683 apply_autocmds(EVENT_EXITPRE, NULL, NULL, FALSE, curbuf);
18406
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5684 // Refuse to quit when locked or when the window was closed or the
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5685 // buffer in the last window is being closed (can only happen in
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5686 // autocommands).
fa6efc49d71f patch 8.1.2197: ExitPre autocommand may cause accessing freed memory
Bram Moolenaar <Bram@vim.org>
parents: 18402
diff changeset
5687 if (!win_valid(wp) || curbuf_locked()
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5688 || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0))
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5689 return TRUE;
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5690 }
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5691
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5692 return FALSE;
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5693 }
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5694
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 /*
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
5696 * ":quit": quit current window, quit Vim if the last window is closed.
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5697 * ":{nr}quit": quit window {nr}
18402
527b7084c556 patch 8.1.2195: Vim does not exit when the terminal window is last window
Bram Moolenaar <Bram@vim.org>
parents: 18386
diff changeset
5698 * Also used when closing a terminal window that's the last one.
527b7084c556 patch 8.1.2195: Vim does not exit when the terminal window is last window
Bram Moolenaar <Bram@vim.org>
parents: 18386
diff changeset
5699 */
527b7084c556 patch 8.1.2195: Vim does not exit when the terminal window is last window
Bram Moolenaar <Bram@vim.org>
parents: 18386
diff changeset
5700 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5701 ex_quit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5702 {
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5703 win_T *wp;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5704
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5705 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5706 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5707 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5708 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5709 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5712 // Don't quit while editing the command line.
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5713 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5714 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5715 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5716 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5717 }
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5718 if (eap->addr_count > 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5719 {
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
5720 int wnr = eap->line2;
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
5721
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
5722 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
5723 if (--wnr <= 0)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5724 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5725 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5726 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5727 wp = curwin;
6409
83c5fd1b55bc updated for version 7.4.535
Bram Moolenaar <bram@vim.org>
parents: 6400
diff changeset
5728
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5729 // Refuse to quit when locked.
12652
272ecbaf1b4f patch 8.0.1204: a QuitPre autocommand may get the wrong file name
Christian Brabandt <cb@256bit.org>
parents: 12624
diff changeset
5730 if (curbuf_locked())
272ecbaf1b4f patch 8.0.1204: a QuitPre autocommand may get the wrong file name
Christian Brabandt <cb@256bit.org>
parents: 12624
diff changeset
5731 return;
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5732
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5733 // Trigger QuitPre and maybe ExitPre
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5734 if (before_quit_autocmds(wp, FALSE, eap->forceit))
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5735 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738 netbeansForcedQuit = eap->forceit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741 /*
24719
4ae10e6c3a9c patch 8.2.2898: QuitPre and ExitPre not triggered when GUI window is closed
Bram Moolenaar <Bram@vim.org>
parents: 24699
diff changeset
5742 * If there is only one relevant window we will exit.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5743 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5744 if (check_more(FALSE, eap->forceit) == OK && only_one_window())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5745 exiting = TRUE;
12654
d03798bddf5e patch 8.0.1205: it is possible to unload a changed buffer
Christian Brabandt <cb@256bit.org>
parents: 12652
diff changeset
5746 if ((!buf_hide(wp->w_buffer)
d03798bddf5e patch 8.0.1205: it is possible to unload a changed buffer
Christian Brabandt <cb@256bit.org>
parents: 12652
diff changeset
5747 && check_changed(wp->w_buffer, (p_awa ? CCGD_AW : 0)
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
5748 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
5749 | CCGD_EXCMD))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 || 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
5751 || (only_one_window() && check_changed_any(eap->forceit, TRUE)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5754 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5756 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5757 // quit last window
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5758 // Note: only_one_window() returns true, even so a help window is
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5759 // still open. In that case only quit, if no address has been
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5760 // specified. Example:
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5761 // :h|wincmd w|1q - don't quit
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5762 // :h|wincmd w|q - quit
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10275
diff changeset
5763 if (only_one_window() && (ONE_WINDOW || eap->addr_count == 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 getout(0);
12624
ae2802b6bf7d patch 8.0.1190: unusable after opening new window in BufWritePre event
Christian Brabandt <cb@256bit.org>
parents: 12622
diff changeset
5765 not_exiting();
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5766 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5767 need_mouse_correct = TRUE;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5768 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5769 // close window; may free buffer
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
5770 win_close(wp, !buf_hide(wp->w_buffer) || eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5772 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5774 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 * ":cquit".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5776 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5778 ex_cquit(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779 {
19069
e14feba578f1 patch 8.2.0095: cannot specify exit code for :cquit
Bram Moolenaar <Bram@vim.org>
parents: 18991
diff changeset
5780 // this does not always pass on the exit code to the Manx compiler. why?
e14feba578f1 patch 8.2.0095: cannot specify exit code for :cquit
Bram Moolenaar <Bram@vim.org>
parents: 18991
diff changeset
5781 getout(eap->addr_count > 0 ? (int)eap->line2 : EXIT_FAILURE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5784 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5785 * ":qall": try to quit all windows
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5788 ex_quit_all(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5789 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5790 # ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5791 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5792 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5793 if (eap->forceit)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5794 cmdwin_result = K_XF1; // ex_window() takes care of this
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5795 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5796 cmdwin_result = K_XF2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5797 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5798 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 # endif
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5800
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5801 // Don't quit while editing the command line.
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5802 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5803 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
5804 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5805 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5806 }
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5807
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
5808 if (before_quit_autocmds(curwin, TRUE, eap->forceit))
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5809 return;
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
5810
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811 exiting = TRUE;
7469
15eefe1b0dad commit https://github.com/vim/vim/commit/027387f70c671f62e3e08e0bdd09ec05b0232735
Christian Brabandt <cb@256bit.org>
parents: 7465
diff changeset
5812 if (eap->forceit || !check_changed_any(FALSE, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5813 getout(0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 }
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 * ":close": close current window, unless it is the last one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5819 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5820 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5821 ex_close(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 {
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5823 win_T *win;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5824 int winnr = 0;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5825 #ifdef FEAT_CMDWIN
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5826 if (cmdwin_type != 0)
2839
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2823
diff changeset
5827 cmdwin_result = Ctrl_C;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 else
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5829 #endif
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
5830 if (!text_locked() && !curbuf_locked())
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5831 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5832 if (eap->addr_count == 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5833 ex_win_close(eap->forceit, curwin, NULL);
14035
bccd66fa00c1 patch 8.1.0035: not easy to switch between prompt buffer and other windows
Christian Brabandt <cb@256bit.org>
parents: 13866
diff changeset
5834 else
bccd66fa00c1 patch 8.1.0035: not easy to switch between prompt buffer and other windows
Christian Brabandt <cb@256bit.org>
parents: 13866
diff changeset
5835 {
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
5836 FOR_ALL_WINDOWS(win)
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5837 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5838 winnr++;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5839 if (winnr == eap->line2)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5840 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5841 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5842 if (win == NULL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5843 win = lastwin;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5844 ex_win_close(eap->forceit, win, NULL);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5845 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
5846 }
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5847 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5848
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5849 #ifdef FEAT_QUICKFIX
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5850 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5851 * ":pclose": Close any preview window.
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5852 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5853 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5854 ex_pclose(exarg_T *eap)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5855 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5856 win_T *win;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5857
17431
ce35cdbe9f74 patch 8.1.1714: cannot preview a file in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17336
diff changeset
5858 // First close any normal window.
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
5859 FOR_ALL_WINDOWS(win)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5860 if (win->w_p_pvw)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5861 {
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5862 ex_win_close(eap->forceit, win, NULL);
17431
ce35cdbe9f74 patch 8.1.1714: cannot preview a file in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17336
diff changeset
5863 return;
ce35cdbe9f74 patch 8.1.1714: cannot preview a file in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17336
diff changeset
5864 }
18763
49b78d6465e5 patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents: 18715
diff changeset
5865 # ifdef FEAT_PROP_POPUP
17431
ce35cdbe9f74 patch 8.1.1714: cannot preview a file in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17336
diff changeset
5866 // Also when 'previewpopup' is empty, it might have been cleared.
17817
e8a7029efa40 patch 8.1.1905: cannot set all properties of the info popup
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
5867 popup_close_preview();
17431
ce35cdbe9f74 patch 8.1.1714: cannot preview a file in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17336
diff changeset
5868 # endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5869 }
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5870 #endif
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
5871
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5872 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5873 * 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
5874 * modified buffer.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5875 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5876 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5877 ex_win_close(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5878 int forceit,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5879 win_T *win,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5880 tabpage_T *tp) // NULL or the tab page "win" is in
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 int need_hide;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5883 buf_T *buf = win->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884
21016
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5885 // Never close the autocommand window.
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5886 if (win == aucmd_win)
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5887 {
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
5888 emsg(_(e_cannot_close_autocmd_or_popup_window));
21016
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5889 return;
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5890 }
0738c44504cb patch 8.2.1059: crash when using :tabonly in an autocommand
Bram Moolenaar <Bram@vim.org>
parents: 20996
diff changeset
5891
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
5893 if (need_hide && !buf_hide(buf) && !forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 {
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5895 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
5896 if ((p_confirm || (cmdmod.cmod_flags & CMOD_CONFIRM)) && p_write)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
5898 bufref_T bufref;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
5899
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
5900 set_bufref(&bufref, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 dialog_changed(buf, FALSE);
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9460
diff changeset
5902 if (bufref_valid(&bufref) && bufIsChanged(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5903 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5904 need_hide = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5905 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 else
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5907 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908 {
12146
59c1e09cf1a9 patch 8.0.0953: get "no write since last change" error in terminal window
Christian Brabandt <cb@256bit.org>
parents: 11995
diff changeset
5909 no_write_message();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5914 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5915 need_mouse_correct = TRUE;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
5916 #endif
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5917
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5918 // 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
5919 if (tp == NULL)
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
5920 win_close(win, !need_hide && !buf_hide(buf));
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5921 else
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
5922 win_close_othertab(win, !need_hide && !buf_hide(buf), tp);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5923 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5924
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5925 /*
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5926 * 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
5927 * Returns a tabpage number.
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5928 * 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
5929 */
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5930 static int
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5931 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
5932 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5933 int tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5934 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
5935
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5936 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
5937 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5938 char_u *p = eap->arg;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5939 char_u *p_save;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5940 int relative = 0; // argument +N/-N means: go to N places to the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5941 // right/left relative to the current position.
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5942
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5943 if (*p == '-')
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5944 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5945 relative = -1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5946 p++;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5947 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5948 else if (*p == '+')
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5949 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5950 relative = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5951 p++;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5952 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5953
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5954 p_save = p;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5955 tab_number = getdigits(&p);
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5956
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5957 if (relative == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5958 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5959 if (STRCMP(p, "$") == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5960 tab_number = LAST_TAB_NR;
21727
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5961 else if (STRCMP(p, "#") == 0)
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5962 if (valid_tabpage(lastused_tabpage))
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5963 tab_number = tabpage_index(lastused_tabpage);
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5964 else
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5965 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
5966 eap->errmsg = ex_errmsg(e_invalid_value_for_argument_str, eap->arg);
21727
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5967 tab_number = 0;
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5968 goto theend;
860cad58f557 patch 8.2.1413: previous tab page not usable from an Ex command
Bram Moolenaar <Bram@vim.org>
parents: 21664
diff changeset
5969 }
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5970 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
5971 || tab_number > LAST_TAB_NR)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5972 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5973 // No numbers as argument.
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
5974 eap->errmsg = ex_errmsg(e_invalid_argument_str, eap->arg);
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5975 goto theend;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5976 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5977 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5978 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5979 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5980 if (*p_save == NUL)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5981 tab_number = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5982 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
5983 || tab_number == 0)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5984 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
5985 // No numbers as argument.
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
5986 eap->errmsg = ex_errmsg(e_invalid_argument_str, eap->arg);
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5987 goto theend;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5988 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5989 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
5990 if (!unaccept_arg0 && relative == -1)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5991 --tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5992 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5993 if (tab_number < unaccept_arg0 || tab_number > LAST_TAB_NR)
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
5994 eap->errmsg = ex_errmsg(e_invalid_argument_str, eap->arg);
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5995 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5996 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
5997 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
5998 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
5999 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
6000 eap->errmsg = _(e_invalid_range);
10753
4961e7acdd8c patch 8.0.0266: compiler warning for using uninitialized variable
Christian Brabandt <cb@256bit.org>
parents: 10741
diff changeset
6001 tab_number = 0;
4961e7acdd8c patch 8.0.0266: compiler warning for using uninitialized variable
Christian Brabandt <cb@256bit.org>
parents: 10741
diff changeset
6002 }
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6003 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6004 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6005 tab_number = eap->line2;
15573
060cb54565c1 patch 8.1.0794: white space before " -Ntabmove" causes problems
Bram Moolenaar <Bram@vim.org>
parents: 15565
diff changeset
6006 if (!unaccept_arg0 && *skipwhite(*eap->cmdlinep) == '-')
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6007 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6008 --tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6009 if (tab_number < unaccept_arg0)
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
6010 eap->errmsg = _(e_invalid_range);
10741
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6011 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6012 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6013 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6014 else
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6015 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6016 switch (eap->cmdidx)
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6017 {
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6018 case CMD_tabnext:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6019 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
6020 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
6021 tab_number = 1;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6022 break;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6023 case CMD_tabmove:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6024 tab_number = LAST_TAB_NR;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6025 break;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6026 default:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6027 tab_number = tabpage_index(curtab);
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6028 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6029 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6030
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6031 theend:
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6032 return tab_number;
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6033 }
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6034
3f70b142e8da patch 8.0.0260: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10739
diff changeset
6035 /*
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6036 * ":tabclose": close current tab page, unless it is the last one.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6037 * ":tabclose N": close tab page N.
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6038 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6039 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6040 ex_tabclose(exarg_T *eap)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6041 {
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6042 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
6043 int tab_number;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6044
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6045 # ifdef FEAT_CMDWIN
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6046 if (cmdwin_type != 0)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6047 cmdwin_result = K_IGNORE;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6048 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6049 # endif
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6050 if (first_tabpage->tp_next == NULL)
26958
d92e0d85923f patch 8.2.4008: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26952
diff changeset
6051 emsg(_(e_cannot_close_last_tab_page));
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6052 else
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6053 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6054 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
6055 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
6056 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6057 tp = find_tabpage(tab_number);
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6058 if (tp == NULL)
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6059 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6060 beep_flush();
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6061 return;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6062 }
674
4b8583e82cb8 updated for version 7.0201
vimboss
parents: 672
diff changeset
6063 if (tp != curtab)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6064 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6065 tabpage_close_other(tp, eap->forceit);
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6066 return;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6067 }
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
6068 else if (!text_locked() && !curbuf_locked())
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6069 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
6070 }
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6071 }
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6072 }
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6073
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6074 /*
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6075 * ":tabonly": close all tab pages except the current one
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6076 */
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6077 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6078 ex_tabonly(exarg_T *eap)
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6079 {
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6080 tabpage_T *tp;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6081 int done;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6082 int tab_number;
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6083
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6084 # ifdef FEAT_CMDWIN
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6085 if (cmdwin_type != 0)
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6086 cmdwin_result = K_IGNORE;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6087 else
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6088 # endif
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6089 if (first_tabpage->tp_next == NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
6090 msg(_("Already only one tab page"));
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6091 else
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6092 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6093 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
6094 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
6095 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6096 goto_tabpage(tab_number);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6097 // Repeat this up to a 1000 times, because autocommands may
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6098 // mess up the lists.
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6099 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
6100 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6101 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
6102 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
6103 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6104 tabpage_close_other(tp, eap->forceit);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6105 // if we failed to close it quit
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6106 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
6107 done = 1000;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6108 // start over, "tp" is now invalid
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6109 break;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6110 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6111 if (first_tabpage->tp_next == NULL)
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6112 break;
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6113 }
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6114 }
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6115 }
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6116 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6117
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6118 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6119 * Close the current tab page.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6120 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6121 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6122 tabpage_close(int forceit)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6123 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6124 // First close all the windows but the current one. If that worked then
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6125 // 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
6126 if (!ONE_WINDOW)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6127 close_others(TRUE, forceit);
10357
59d01e335858 commit https://github.com/vim/vim/commit/459ca563128f2edb7e3bb190090bbb755a56dd55
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
6128 if (ONE_WINDOW)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6129 ex_win_close(forceit, curwin, NULL);
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6130 # ifdef FEAT_GUI
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6131 need_mouse_correct = TRUE;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6132 # endif
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6133 }
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6134
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6135 /*
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6136 * Close tab page "tp", which is not the current tab page.
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6137 * Note that autocommands may make "tp" invalid.
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6138 * Also takes care of the tab pages line disappearing when closing the
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6139 * last-but-one tab page.
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6140 */
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6141 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6142 tabpage_close_other(tabpage_T *tp, int forceit)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6143 {
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6144 int done = 0;
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6145 win_T *wp;
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6146 int h = tabline_height();
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6147
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6148 // Limit to 1000 windows, autocommands may add a window while we close
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6149 // one. OK, so I'm paranoid...
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6150 while (++done < 1000)
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6151 {
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6152 wp = tp->tp_firstwin;
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6153 ex_win_close(forceit, wp, tp);
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6154
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6155 // Autocommands may delete the tab page under our fingers and we may
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6156 // fail to close a window with a modified buffer.
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6157 if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6158 break;
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
6159 }
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6160
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
6161 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
6162
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6163 redraw_tabline = TRUE;
971
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6164 if (h != tabline_height())
a9ffa7c7db77 updated for version 7.0-097
vimboss
parents: 944
diff changeset
6165 shell_new_rows();
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6166 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 * ":only".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6170 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6172 ex_only(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 {
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6174 win_T *wp;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6175 int wnr;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 # endif
6398
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6179 if (eap->addr_count > 0)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6180 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6181 wnr = eap->line2;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6182 for (wp = firstwin; --wnr > 0; )
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6183 {
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6184 if (wp->w_next == NULL)
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6185 break;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6186 else
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6187 wp = wp->w_next;
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6188 }
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6189 win_goto(wp);
5a76e36f07b1 updated for version 7.4.530
Bram Moolenaar <bram@vim.org>
parents: 6353
diff changeset
6190 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 close_others(TRUE, eap->forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194 static void
10492
b2cd5a71f4bb commit https://github.com/vim/vim/commit/5e1e6d265d26ee2952c4a018a5ff72c950d2d700
Christian Brabandt <cb@256bit.org>
parents: 10490
diff changeset
6195 ex_hide(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6197 // ":hide" or ":hide | cmd": hide current window
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6198 if (!eap->skip)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6199 {
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6200 #ifdef FEAT_GUI
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6201 need_mouse_correct = TRUE;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6202 #endif
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6203 if (eap->addr_count == 0)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6204 win_close(curwin, FALSE); // don't free buffer
10383
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6205 else
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6206 {
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6207 int winnr = 0;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6208 win_T *win;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6209
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6210 FOR_ALL_WINDOWS(win)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6211 {
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6212 winnr++;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6213 if (winnr == eap->line2)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6214 break;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6215 }
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6216 if (win == NULL)
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6217 win = lastwin;
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6218 win_close(win, FALSE);
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6219 }
b59df2194b01 commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Christian Brabandt <cb@256bit.org>
parents: 10373
diff changeset
6220 }
7
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224 * ":stop" and ":suspend": Suspend Vim.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225 */
26825
3c1dcb63f579 patch 8.2.3941: SIGTSTP is not handled
Bram Moolenaar <Bram@vim.org>
parents: 26809
diff changeset
6226 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6227 ex_stop(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 * Disallow suspending for "rvim".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6231 */
10264
c036c0f636d5 commit https://github.com/vim/vim/commit/cea912af725c54f4727a0565e31661f6b29c6bb1
Christian Brabandt <cb@256bit.org>
parents: 10240
diff changeset
6232 if (!check_restricted())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 if (!eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 autowrite_all();
23165
a916fca16d4b patch 8.2.2128: there is no way to do something on CTRL-Z
Bram Moolenaar <Bram@vim.org>
parents: 23062
diff changeset
6236 apply_autocmds(EVENT_VIMSUSPEND, NULL, NULL, FALSE, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237 windgoto((int)Rows - 1, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 out_char('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 stoptermcap();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6241 out_flush(); // needed for SUN to restore xterm buffer
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6242 mch_restore_title(SAVE_RESTORE_BOTH); // restore window titles
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6243 ui_suspend(); // call machine specific function
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 maketitle();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6245 resettitle(); // force updating the title
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 starttermcap();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6247 scroll_start(); // scroll screen before redrawing
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6248 redraw_later_clear();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6249 shell_resized(); // may have resized window
23165
a916fca16d4b patch 8.2.2128: there is no way to do something on CTRL-Z
Bram Moolenaar <Bram@vim.org>
parents: 23062
diff changeset
6250 apply_autocmds(EVENT_VIMRESUME, NULL, NULL, FALSE, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6251 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6254 /*
24723
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6255 * ":exit", ":xit" and ":wq": Write file and quit the current window.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6256 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6257 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6258 ex_exit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6259 {
21518
0b448762ebbd patch 8.2.1309: build failure with tiny version
Bram Moolenaar <Bram@vim.org>
parents: 21516
diff changeset
6260 #ifdef FEAT_EVAL
21516
c7b2ce90c2de patch 8.2.1308: Vim9: accidentally using "x" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 21493
diff changeset
6261 if (not_in_vim9(eap) == FAIL)
c7b2ce90c2de patch 8.2.1308: Vim9: accidentally using "x" causes Vim to exit
Bram Moolenaar <Bram@vim.org>
parents: 21493
diff changeset
6262 return;
21518
0b448762ebbd patch 8.2.1309: build failure with tiny version
Bram Moolenaar <Bram@vim.org>
parents: 21516
diff changeset
6263 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6264 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6265 if (cmdwin_type != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6266 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6267 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6268 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6269 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6270 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6271 // Don't quit while editing the command line.
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
6272 if (text_locked())
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
6273 {
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
6274 text_locked_msg();
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
6275 return;
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
6276 }
13442
94e638936d3e patch 8.0.1595: no autocommand triggered before exiting
Christian Brabandt <cb@256bit.org>
parents: 13435
diff changeset
6277
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6278 /*
24723
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6279 * we plan to exit if there is only one relevant window
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6280 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6281 if (check_more(FALSE, eap->forceit) == OK && only_one_window())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6282 exiting = TRUE;
24723
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6283
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6284 // Write the buffer for ":wq" or when it was changed.
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6285 // Trigger QuitPre and ExitPre.
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6286 // Check if we can exit now, after autocommands have changed things.
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6287 if (((eap->cmdidx == CMD_wq || curbufIsChanged()) && do_write(eap) == FAIL)
5194fba32954 patch 8.2.2900: QuitPre is triggered before :wq writes the file
Bram Moolenaar <Bram@vim.org>
parents: 24719
diff changeset
6288 || before_quit_autocmds(curwin, FALSE, eap->forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6289 || 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
6290 || (only_one_window() && check_changed_any(eap->forceit, FALSE)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6291 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6292 not_exiting();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6293 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6294 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6295 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6296 if (only_one_window()) // quit last window, exit Vim
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 getout(0);
12624
ae2802b6bf7d patch 8.0.1190: unusable after opening new window in BufWritePre event
Christian Brabandt <cb@256bit.org>
parents: 12622
diff changeset
6298 not_exiting();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6299 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6301 # endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6302 // Quit current window, may free the buffer.
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
6303 win_close(curwin, !buf_hide(curwin->w_buffer));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6304 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6306
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6308 * ":print", ":list", ":number".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6309 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6310 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6311 ex_print(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6312 {
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6313 if (curbuf->b_ml.ml_flags & ML_EMPTY)
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
6314 emsg(_(e_empty_buffer));
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6315 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6316 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6317 for ( ;!got_int; ui_breakcheck())
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6318 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6319 print_line(eap->line1,
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6320 (eap->cmdidx == CMD_number || eap->cmdidx == CMD_pound
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6321 || (eap->flags & EXFLAG_NR)),
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6322 eap->cmdidx == CMD_list || (eap->flags & EXFLAG_LIST));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6323 if (++eap->line1 > eap->line2)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6324 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6325 out_flush(); // show one line at a time
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6326 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6327 setpcmark();
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6328 // put cursor at last line
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6329 curwin->w_cursor.lnum = eap->line2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6330 beginline(BL_SOL | BL_FIX);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6331 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6332
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6333 ex_no_reprint = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6336 #ifdef FEAT_BYTEOFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6337 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6338 ex_goto(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6339 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6340 goto_byte(eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6341 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6342 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6343
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6344 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6345 * ":shell".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6346 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6347 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6348 ex_shell(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6349 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6350 do_shell(NULL, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6352
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6353 #if defined(HAVE_DROP_FILE) || defined(PROTO)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6354
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6355 static int drop_busy = FALSE;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6356 static int drop_filec;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6357 static char_u **drop_filev = NULL;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6358 static int drop_split;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6359 static void (*drop_callback)(void *);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6360 static void *drop_cookie;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6361
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6362 static void
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6363 handle_drop_internal(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6364 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6365 exarg_T ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6366 int save_msg_scroll = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6367
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6368 // Setting the argument list may cause screen updates and being called
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6369 // recursively. Avoid that by setting drop_busy.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6370 drop_busy = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6371
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6372 // Check whether the current buffer is changed. If so, we will need
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6373 // to split the current window or data could be lost.
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6374 // We don't need to check if the 'hidden' option is set, as in this
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6375 // case the buffer won't be lost.
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6376 if (!buf_hide(curbuf) && !drop_split)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6377 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6378 ++emsg_off;
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6379 drop_split = check_changed(curbuf, CCGD_AW);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6380 --emsg_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6381 }
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6382 if (drop_split)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6384 if (win_split(0, 0) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6385 return;
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
6386 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6387
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6388 // When splitting the window, create a new alist. Otherwise the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6389 // existing one is overwritten.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6390 alist_unlink(curwin->w_alist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6391 alist_new();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6392 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6394 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6395 * Set up the new argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6396 */
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6397 alist_set(ALIST(curwin), drop_filec, drop_filev, FALSE, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6398
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6399 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6400 * Move to the first file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6401 */
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6402 // Fake up a minimal "next" command for do_argfile()
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
6403 CLEAR_FIELD(ea);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6404 ea.cmd = (char_u *)"next";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6405 do_argfile(&ea, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6406
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6407 // do_ecmd() may set need_start_insertmode, but since we never left Insert
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6408 // mode that is not needed here.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6409 need_start_insertmode = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6410
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6411 // Restore msg_scroll, otherwise a following command may cause scrolling
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6412 // unexpectedly. The screen will be redrawn by the caller, thus
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6413 // msg_scroll being set by displaying a message is irrelevant.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6414 msg_scroll = save_msg_scroll;
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6415
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6416 if (drop_callback != NULL)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6417 drop_callback(drop_cookie);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6418
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6419 drop_filev = NULL;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6420 drop_busy = FALSE;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6421 }
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6422
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6423 /*
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6424 * Handle a file drop. The code is here because a drop is *nearly* like an
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6425 * :args command, but not quite (we have a list of exact filenames, so we
15490
98c35d312987 patch 8.1.0753: printf format not checked for semsg()
Bram Moolenaar <Bram@vim.org>
parents: 15488
diff changeset
6426 * don't want to (a) parse a command line, or (b) expand wildcards). So the
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6427 * code is very similar to :args and hence needs access to a lot of the static
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6428 * functions in this file.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6429 *
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6430 * The "filev" list must have been allocated using alloc(), as should each item
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6431 * in the list. This function takes over responsibility for freeing the "filev"
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6432 * list.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6433 */
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6434 void
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6435 handle_drop(
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6436 int filec, // the number of files dropped
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6437 char_u **filev, // the list of files dropped
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6438 int split, // force splitting the window
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6439 void (*callback)(void *), // to be called after setting the argument
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6440 // list
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6441 void *cookie) // argument for "callback" (allocated)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6442 {
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6443 // Cannot handle recursive drops, finish the pending one.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6444 if (drop_busy)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6445 {
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6446 FreeWild(filec, filev);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6447 vim_free(cookie);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6448 return;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6449 }
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6450
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6451 // When calling handle_drop() more than once in a row we only use the last
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6452 // one.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6453 if (drop_filev != NULL)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6454 {
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6455 FreeWild(drop_filec, drop_filev);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6456 vim_free(drop_cookie);
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6457 }
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6458
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6459 drop_filec = filec;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6460 drop_filev = filev;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6461 drop_split = split;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6462 drop_callback = callback;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6463 drop_cookie = cookie;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6464
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6465 // Postpone this when:
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6466 // - editing the command line
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6467 // - not possible to change the current buffer
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6468 // - updating the screen
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6469 // As it may change buffers and window structures that are in use and cause
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6470 // freed memory to be used.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6471 if (text_locked() || curbuf_locked() || updating_screen)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6472 return;
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6473
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6474 handle_drop_internal();
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6475 }
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6476
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6477 /*
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6478 * To be called when text is unlocked, curbuf is unlocked or updating_screen is
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6479 * reset: Handle a postponed drop.
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6480 */
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6481 void
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6482 handle_any_postponed_drop(void)
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6483 {
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6484 if (!drop_busy && drop_filev != NULL
20229
06a1dd50463e patch 8.2.0670: cannot change window when evaluating 'completefunc'
Bram Moolenaar <Bram@vim.org>
parents: 20185
diff changeset
6485 && !text_locked() && !curbuf_locked() && !updating_screen)
14428
aab5947be7c5 patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents: 14409
diff changeset
6486 handle_drop_internal();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6487 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6488 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6489
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6490 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6491 * ":preserve".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6492 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6493 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6494 ex_preserve(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6495 {
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
6496 curbuf->b_flags |= BF_PRESERVED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6497 ml_preserve(curbuf, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6498 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6499
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6500 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6501 * ":recover".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6502 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6503 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6504 ex_recover(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6505 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6506 // Set recoverymode right away to avoid the ATTENTION prompt.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6507 recoverymode = TRUE;
5464
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
6508 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
6509 | CCGD_MULTWIN
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
6510 | (eap->forceit ? CCGD_FORCEIT : 0)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
6511 | CCGD_EXCMD)
9c777e2c7024 updated for version 7.4.082
Bram Moolenaar <bram@vim.org>
parents: 5458
diff changeset
6512
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6513 && (*eap->arg == NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6514 || setfname(curbuf, eap->arg, NULL, TRUE) == OK))
16738
b52ea9c5f1db patch 8.1.1371: cannot recover from a swap file
Bram Moolenaar <Bram@vim.org>
parents: 16608
diff changeset
6515 ml_recover(TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6516 recoverymode = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6517 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6519 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6520 * Command modifier used in a wrong way.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6521 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6522 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6523 ex_wrongmodifier(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6524 {
21821
0deb6f96a5a3 patch 8.2.1460: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 21789
diff changeset
6525 eap->errmsg = _(e_invalid_command);
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6529 * :sview [+command] file split window with new file, read-only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6530 * :split [[+command] file] split window with current or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6531 * :vsplit [[+command] file] split window vertically with current or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6532 * :new [[+command] file] split window with no or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6533 * :vnew [[+command] file] split vertically window with no or new file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6534 * :sfind [+command] file split window with file in 'path'
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6535 *
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6536 * :tabedit open new Tab page with empty window
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6537 * :tabedit [+command] file open new Tab page and edit "file"
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6538 * :tabnew [[+command] file] just like :tabedit
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6539 * :tabfind [+command] file open new Tab page and find "file"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6540 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6541 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6542 ex_splitview(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6543 {
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6544 win_T *old_curwin = curwin;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6545 #if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6546 char_u *fname = NULL;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6547 #endif
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6548 #ifdef FEAT_BROWSE
22588
050cff1294ab patch 8.2.1842: crash when USE_FNAME_CASE is defined and using :browse
Bram Moolenaar <Bram@vim.org>
parents: 22559
diff changeset
6549 char_u dot_path[] = ".";
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6550 int save_cmod_flags = cmdmod.cmod_flags;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6551 #endif
14155
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6552 int use_tab = eap->cmdidx == CMD_tabedit
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6553 || eap->cmdidx == CMD_tabfind
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6554 || eap->cmdidx == CMD_tabnew;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6555
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
6556 if (ERROR_IF_ANY_POPUP_WINDOW)
16874
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
6557 return;
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
6558
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6559 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6560 need_mouse_correct = TRUE;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6561 #endif
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6562
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6563 #ifdef FEAT_QUICKFIX
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6564 // A ":split" in the quickfix window works like ":new". Don't want two
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6565 // quickfix windows. But it's OK when doing ":tab split".
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6566 if (bt_quickfix(curbuf) && cmdmod.cmod_tab == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6567 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6568 if (eap->cmdidx == CMD_split)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6569 eap->cmdidx = CMD_new;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6570 if (eap->cmdidx == CMD_vsplit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6571 eap->cmdidx = CMD_vnew;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6572 }
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6573 #endif
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6574
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6575 #ifdef FEAT_SEARCHPATH
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6576 if (eap->cmdidx == CMD_sfind || eap->cmdidx == CMD_tabfind)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6577 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6578 fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6579 FNAME_MESS, TRUE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6580 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6581 goto theend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6582 eap->arg = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6583 }
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6584 # ifdef FEAT_BROWSE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6585 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6586 # endif
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6587 #endif
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6588 #ifdef FEAT_BROWSE
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6589 if ((cmdmod.cmod_flags & CMOD_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6590 && eap->cmdidx != CMD_vnew
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6591 && eap->cmdidx != CMD_new)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6592 {
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6593 if (
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
6594 # ifdef FEAT_GUI
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6595 !gui.in_use &&
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
6596 # endif
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6597 au_has_group((char_u *)"FileExplorer"))
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6598 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6599 // No browsing supported but we do have the file explorer:
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6600 // Edit the directory.
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6601 if (*eap->arg == NUL || !mch_isdir(eap->arg))
22588
050cff1294ab patch 8.2.1842: crash when USE_FNAME_CASE is defined and using :browse
Bram Moolenaar <Bram@vim.org>
parents: 22559
diff changeset
6602 eap->arg = dot_path;
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6603 }
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6604 else
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6605 {
14155
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6606 fname = do_browse(0, (char_u *)(use_tab
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6607 ? _("Edit File in new tab page")
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6608 : _("Edit File in new window")),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6609 eap->arg, NULL, NULL, NULL, curbuf);
461
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6610 if (fname == NULL)
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6611 goto theend;
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6612 eap->arg = fname;
f98374445f66 updated for version 7.0123
vimboss
parents: 446
diff changeset
6613 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6614 }
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6615 cmdmod.cmod_flags &= ~CMOD_BROWSE; // Don't browse again in do_ecmd().
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
6616 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6617
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6618 /*
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6619 * Either open new tab page or split the window.
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6620 */
14155
da09e29e59d9 patch 8.1.0095: dialog for ":browse tabnew" says "new window"
Christian Brabandt <cb@256bit.org>
parents: 14059
diff changeset
6621 if (use_tab)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6622 {
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6623 if (win_new_tabpage(cmdmod.cmod_tab != 0 ? cmdmod.cmod_tab
820
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
6624 : eap->addr_count == 0 ? 0
57c7403f6599 updated for version 7.0c11
vimboss
parents: 819
diff changeset
6625 : (int)eap->line2 + 1) != FAIL)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6626 {
1498
4845822f6a6c updated for version 7.1-213
vimboss
parents: 1496
diff changeset
6627 do_exedit(eap, old_curwin);
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6628
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6629 // set the alternate buffer for the window we came from
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6630 if (curwin != old_curwin
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6631 && win_valid(old_curwin)
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6632 && old_curwin->w_buffer != curbuf
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6633 && (cmdmod.cmod_flags & CMOD_KEEPALT) == 0)
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6634 old_curwin->w_alt_fnum = curbuf->b_fnum;
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6635 }
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6636 }
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6637 else if (win_split(eap->addr_count > 0 ? (int)eap->line2 : 0,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 *eap->cmd == 'v' ? WSP_VERT : 0) != FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6639 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6640 // Reset 'scrollbind' when editing another file, but keep it when
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6641 // doing ":split" without arguments.
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6642 if (*eap->arg != NUL)
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2575
diff changeset
6643 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6644 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6645 do_check_scrollbind(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6646 do_exedit(eap, old_curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6647 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6648
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6649 # ifdef FEAT_BROWSE
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6650 cmdmod.cmod_flags = save_cmod_flags;
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6651 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6652
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6653 # if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6654 theend:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6655 vim_free(fname);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6656 # endif
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6657 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6658
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6659 /*
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6660 * Open a new tab page.
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6661 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6662 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6663 tabpage_new(void)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6664 {
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6665 exarg_T ea;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6666
20007
aadd1cae2ff5 patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents: 19892
diff changeset
6667 CLEAR_FIELD(ea);
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6668 ea.cmdidx = CMD_tabnew;
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6669 ea.cmd = (char_u *)"tabn";
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6670 ea.arg = (char_u *)"";
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6671 ex_splitview(&ea);
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6672 }
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6673
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6674 /*
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6675 * :tabnext command
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6676 */
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6677 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6678 ex_tabnext(exarg_T *eap)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6679 {
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6680 int tab_number;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6681
17111
af861fccc309 patch 8.1.1555: NOT_IN_POPUP_WINDOW is confusing
Bram Moolenaar <Bram@vim.org>
parents: 17095
diff changeset
6682 if (ERROR_IF_POPUP_WINDOW)
16874
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
6683 return;
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6684 switch (eap->cmdidx)
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6685 {
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6686 case CMD_tabfirst:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6687 case CMD_tabrewind:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6688 goto_tabpage(1);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6689 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6690 case CMD_tablast:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6691 goto_tabpage(9999);
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6692 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6693 case CMD_tabprevious:
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6694 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
6695 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
6696 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6697 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
6698 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
6699
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6700 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
6701 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
6702 || tab_number == 0)
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6703 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6704 // No numbers as argument.
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
6705 eap->errmsg = ex_errmsg(e_invalid_argument_str, eap->arg);
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6706 return;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6707 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6708 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6709 else
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6710 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6711 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
6712 tab_number = 1;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6713 else
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6714 {
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6715 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
6716 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
6717 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
6718 eap->errmsg = _(e_invalid_range);
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6719 return;
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6720 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6721 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6722 }
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6723 goto_tabpage(-tab_number);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6724 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6725 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
6726 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
6727 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
6728 goto_tabpage(tab_number);
685
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6729 break;
d7e33248b9c8 updated for version 7.0206
vimboss
parents: 682
diff changeset
6730 }
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6731 }
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6732
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6733 /*
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6734 * :tabmove command
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6735 */
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6736 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6737 ex_tabmove(exarg_T *eap)
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6738 {
6775
c0bc9b60fb8a patch 7.4.709
Bram Moolenaar <bram@vim.org>
parents: 6739
diff changeset
6739 int tab_number;
3662
e5b925ae56e3 updated for version 7.3.591
Bram Moolenaar <bram@vim.org>
parents: 3570
diff changeset
6740
10739
380e706814da patch 8.0.0259: tab commands do not handle count correctly
Christian Brabandt <cb@256bit.org>
parents: 10726
diff changeset
6741 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
6742 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
6743 tabpage_move(tab_number);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6744 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6745
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6746 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6747 * :tabs command: List tabs and their contents.
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6748 */
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6749 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6750 ex_tabs(exarg_T *eap UNUSED)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6751 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6752 tabpage_T *tp;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6753 win_T *wp;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6754 int tabcount = 1;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6755
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6756 msg_start();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6757 msg_scroll = TRUE;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6758 for (tp = first_tabpage; tp != NULL && !got_int; tp = tp->tp_next)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6759 {
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6760 msg_putchar('\n');
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6761 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
6762 msg_outtrans_attr(IObuff, HL_ATTR(HLF_T));
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6763 out_flush(); // output one line at a time
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6764 ui_breakcheck();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6765
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
6766 if (tp == curtab)
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6767 wp = firstwin;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6768 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6769 wp = tp->tp_firstwin;
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6770 for ( ; wp != NULL && !got_int; wp = wp->w_next)
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6771 {
682
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6772 msg_putchar('\n');
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6773 msg_putchar(wp == curwin ? '>' : ' ');
f1b013312711 updated for version 7.0205
vimboss
parents: 681
diff changeset
6774 msg_putchar(' ');
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6775 msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
6776 msg_putchar(' ');
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6777 if (buf_spname(wp->w_buffer) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3810
diff changeset
6778 vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6779 else
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6780 home_replace(wp->w_buffer, wp->w_buffer->b_fname,
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6781 IObuff, IOSIZE, TRUE);
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6782 msg_outtrans(IObuff);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6783 out_flush(); // output one line at a time
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6784 ui_breakcheck();
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6785 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6786 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6787 }
9090f866cd57 updated for version 7.0197
vimboss
parents: 655
diff changeset
6788
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6789 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6790 * ":mode": Set screen mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6791 * If no argument given, just get the screen size and redraw.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6792 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6793 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6794 ex_mode(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6796 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6797 shell_resized();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6798 else
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
6799 emsg(_(e_screen_mode_setting_not_supported));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6800 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6802 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6803 * ":resize".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6804 * set, increment or decrement current window height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6805 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6806 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6807 ex_resize(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6808 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6809 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6810 win_T *wp = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6811
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6812 if (eap->addr_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6813 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 n = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815 for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6818
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
6819 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6820 need_mouse_correct = TRUE;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
6821 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6822 n = atol((char *)eap->arg);
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
6823 if (cmdmod.cmod_split & WSP_VERT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6825 if (*eap->arg == '-' || *eap->arg == '+')
22616
f773ac13c093 patch 8.2.1856: "2resize" uses size of current window
Bram Moolenaar <Bram@vim.org>
parents: 22610
diff changeset
6826 n += wp->w_width;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6827 else if (n == 0 && eap->arg[0] == NUL) // default is very wide
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6828 n = 9999;
27426
41e0dcf38521 patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
6829 win_setwidth_win(n, wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6830 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833 if (*eap->arg == '-' || *eap->arg == '+')
22616
f773ac13c093 patch 8.2.1856: "2resize" uses size of current window
Bram Moolenaar <Bram@vim.org>
parents: 22610
diff changeset
6834 n += wp->w_height;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6835 else if (n == 0 && eap->arg[0] == NUL) // default is very high
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6836 n = 9999;
27426
41e0dcf38521 patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
6837 win_setheight_win(n, wp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6841 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6842 * ":find [+command] <file>" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6844 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6845 ex_find(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6847 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6849 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6851 fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg), FNAME_MESS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6852 TRUE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6853 if (eap->addr_count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6854 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6855 // Repeat finding the file "count" times. This matters when it
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6856 // appears several times in the path.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6857 count = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6858 while (fname != NULL && --count > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6859 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6860 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6861 fname = find_file_in_path(NULL, 0, FNAME_MESS,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6862 FALSE, curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6863 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6866 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6867 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6868 eap->arg = fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6869 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6870 do_exedit(eap, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6871 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6872 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6873 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6874 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6877 /*
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6878 * ":open" simulation: for now just work like ":visual".
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6879 */
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6880 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6881 ex_open(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6882 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6883 regmatch_T regmatch;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6884 char_u *p;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6885
24114
291c57cf4731 patch 8.2.2598: Vim9: :open does not need to be supported
Bram Moolenaar <Bram@vim.org>
parents: 24049
diff changeset
6886 #ifdef FEAT_EVAL
291c57cf4731 patch 8.2.2598: Vim9: :open does not need to be supported
Bram Moolenaar <Bram@vim.org>
parents: 24049
diff changeset
6887 if (not_in_vim9(eap) == FAIL)
291c57cf4731 patch 8.2.2598: Vim9: :open does not need to be supported
Bram Moolenaar <Bram@vim.org>
parents: 24049
diff changeset
6888 return;
291c57cf4731 patch 8.2.2598: Vim9: :open does not need to be supported
Bram Moolenaar <Bram@vim.org>
parents: 24049
diff changeset
6889 #endif
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6890 curwin->w_cursor.lnum = eap->line2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6891 beginline(BL_SOL | BL_FIX);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6892 if (*eap->arg == '/')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6893 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6894 // ":open /pattern/": put cursor in column found with pattern
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6895 ++eap->arg;
23272
a84e7abb0c92 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Bram Moolenaar <Bram@vim.org>
parents: 23239
diff changeset
6896 p = skip_regexp(eap->arg, '/', magic_isset());
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6897 *p = NUL;
23272
a84e7abb0c92 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Bram Moolenaar <Bram@vim.org>
parents: 23239
diff changeset
6898 regmatch.regprog = vim_regcomp(eap->arg, magic_isset() ? RE_MAGIC : 0);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6899 if (regmatch.regprog != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6900 {
26420
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6901 // make a copy of the line, when searching for a mark it might be
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6902 // flushed
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6903 char_u *line = vim_strsave(ml_get_curline());
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6904
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6905 regmatch.rm_ic = p_ic;
26420
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6906 if (vim_regexec(&regmatch, line, (colnr_T)0))
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6907 curwin->w_cursor.col = (colnr_T)(regmatch.startp[0] - line);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6908 else
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
6909 emsg(_(e_no_match));
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
6910 vim_regfree(regmatch.regprog);
26420
75e6d917696e patch 8.2.3741: using freed memory in open command
Bram Moolenaar <Bram@vim.org>
parents: 26370
diff changeset
6911 vim_free(line);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6912 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6913 // Move to the NUL, ignore any other arguments.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6914 eap->arg += STRLEN(eap->arg);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6915 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6916 check_cursor();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6917
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6918 eap->cmdidx = CMD_visual;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6919 do_exedit(eap, NULL);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6920 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6921
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6922 /*
22840
7c1e2e3f2d8d patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents: 22790
diff changeset
6923 * ":edit", ":badd", ":balt", ":visual".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6924 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6925 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6926 ex_edit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6927 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6928 do_exedit(eap, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6929 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6930
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6931 /*
19195
2ef19eed524a patch 8.2.0156: various typos in source files and tests
Bram Moolenaar <Bram@vim.org>
parents: 19191
diff changeset
6932 * ":edit <file>" command and alike.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6933 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6934 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6935 do_exedit(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6936 exarg_T *eap,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6937 win_T *old_curwin) // curwin before doing a split or NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6939 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6940 int need_hide;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6941 int exmode_was = exmode_active;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6942
19271
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
6943 if ((eap->cmdidx != CMD_pedit && ERROR_IF_POPUP_WINDOW)
ebeeb4b4a1fa patch 8.2.0194: some commands can cause problems in terminal popup
Bram Moolenaar <Bram@vim.org>
parents: 19261
diff changeset
6944 || ERROR_IF_TERM_POPUP_WINDOW)
16874
da5f5836e90c patch 8.1.1438: some commands cause trouble in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 16825
diff changeset
6945 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6946 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6947 * ":vi" command ends Ex mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6948 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6949 if (exmode_active && (eap->cmdidx == CMD_visual
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6950 || eap->cmdidx == CMD_view))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6951 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6952 exmode_active = FALSE;
20897
213fb059e02e patch 8.2.1000: get error when leaving Ex mode with :visual
Bram Moolenaar <Bram@vim.org>
parents: 20711
diff changeset
6953 ex_pressedreturn = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6954 if (*eap->arg == NUL)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6955 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
6956 // Special case: ":global/pat/visual\NLvi-commands"
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6957 if (global_busy)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6958 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6959 int rd = RedrawingDisabled;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6960 int nwr = no_wait_return;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6961 int ms = msg_scroll;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6962 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6963 int he = hold_gui_events;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6964 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6965
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6966 if (eap->nextcmd != NULL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6967 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6968 stuffReadbuff(eap->nextcmd);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6969 eap->nextcmd = NULL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6970 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6971
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6972 if (exmode_was != EXMODE_VIM)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6973 settmode(TMODE_RAW);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6974 RedrawingDisabled = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6975 no_wait_return = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6976 need_wait_return = FALSE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6977 msg_scroll = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6978 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6979 hold_gui_events = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6980 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6981 must_redraw = CLEAR;
19433
af9d5585cfbf patch 8.2.0274: hang with combination of feedkeys(), Ex mode and :global
Bram Moolenaar <Bram@vim.org>
parents: 19415
diff changeset
6982 pending_exmode_active = TRUE;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6983
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6984 main_loop(FALSE, TRUE);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6985
19433
af9d5585cfbf patch 8.2.0274: hang with combination of feedkeys(), Ex mode and :global
Bram Moolenaar <Bram@vim.org>
parents: 19415
diff changeset
6986 pending_exmode_active = FALSE;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6987 RedrawingDisabled = rd;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6988 no_wait_return = nwr;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6989 msg_scroll = ms;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6990 #ifdef FEAT_GUI
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6991 hold_gui_events = he;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6992 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6993 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6994 return;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
6995 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6996 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6997
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6998 if ((eap->cmdidx == CMD_new
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
6999 || eap->cmdidx == CMD_tabnew
51794dc170f7 updated for version 7.0202
vimboss
parents: 674
diff changeset
7000 || eap->cmdidx == CMD_tabedit
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7001 || eap->cmdidx == CMD_vnew) && *eap->arg == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7002 {
26771
fc859aea8cec patch 8.2.3914: various spelling mistakes in comments
Bram Moolenaar <Bram@vim.org>
parents: 26576
diff changeset
7003 // ":new" or ":tabnew" without argument: edit a new empty buffer
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7004 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7005 (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE,
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
7006 ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0),
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
7007 old_curwin == NULL ? curwin : NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7008 }
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7009 else if ((eap->cmdidx != CMD_split && eap->cmdidx != CMD_vsplit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7010 || *eap->arg != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7011 #ifdef FEAT_BROWSE
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
7012 || (cmdmod.cmod_flags & CMOD_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7013 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7014 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7015 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7016 // Can't edit another file when "curbuf_lock" is set. Only ":edit"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7017 // can bring us here, others are stopped earlier.
822
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
7018 if (*eap->arg != NUL && curbuf_locked())
45fad0f590d0 updated for version 7.0c12
vimboss
parents: 820
diff changeset
7019 return;
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
7020
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7021 n = readonlymode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7022 if (eap->cmdidx == CMD_view || eap->cmdidx == CMD_sview)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7023 readonlymode = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7024 else if (eap->cmdidx == CMD_enew)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7025 readonlymode = FALSE; // 'readonly' doesn't make sense in an
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7026 // empty buffer
23023
4384c44c031a patch 8.2.2058: using mkview/loadview changes the jumplist
Bram Moolenaar <Bram@vim.org>
parents: 23011
diff changeset
7027 if (eap->cmdidx != CMD_balt && eap->cmdidx != CMD_badd)
4384c44c031a patch 8.2.2058: using mkview/loadview changes the jumplist
Bram Moolenaar <Bram@vim.org>
parents: 23011
diff changeset
7028 setpcmark();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7029 if (do_ecmd(0, (eap->cmdidx == CMD_enew ? NULL : eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7030 NULL, eap,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7031 // ":edit" goes to first line if Vi compatible
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7032 (*eap->arg == NUL && eap->do_ecmd_lnum == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7033 && vim_strchr(p_cpo, CPO_GOTO1) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7034 ? ECMD_ONE : eap->do_ecmd_lnum,
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
7035 (buf_hide(curbuf) ? ECMD_HIDE : 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7036 + (eap->forceit ? ECMD_FORCEIT : 0)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7037 // after a split we can use an existing buffer
5741
f069a3a0f844 updated for version 7.4.215
Bram Moolenaar <bram@vim.org>
parents: 5737
diff changeset
7038 + (old_curwin != NULL ? ECMD_OLDBUF : 0)
22840
7c1e2e3f2d8d patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents: 22790
diff changeset
7039 + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0)
7c1e2e3f2d8d patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents: 22790
diff changeset
7040 + (eap->cmdidx == CMD_balt ? ECMD_ALTBUF : 0)
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1733
diff changeset
7041 , old_curwin == NULL ? curwin : NULL) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7042 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7043 // Editing the file failed. If the window was split, close it.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7044 if (old_curwin != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7045 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7046 need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1);
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
7047 if (!need_hide || buf_hide(curbuf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7048 {
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
7049 #if defined(FEAT_EVAL)
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
7050 cleanup_T cs;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
7051
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7052 // Reset the error/interrupt/exception state here so that
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7053 // aborting() returns FALSE when closing a window.
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
7054 enter_cleanup(&cs);
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7055 #endif
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7056 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7057 need_mouse_correct = TRUE;
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7058 #endif
11957
bc0fee081e1e patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents: 11806
diff changeset
7059 win_close(curwin, !need_hide && !buf_hide(curbuf));
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
7060
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
7061 #if defined(FEAT_EVAL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7062 // Restore the error/interrupt/exception state if not
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7063 // discarded by a new aborting error, interrupt, or
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7064 // uncaught exception.
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
7065 leave_cleanup(&cs);
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7066 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7067 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7068 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7069 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7070 else if (readonlymode && curbuf->b_nwindows == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7071 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7072 // When editing an already visited buffer, 'readonly' won't be set
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7073 // but the previous value is kept. With ":view" and ":sview" we
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7074 // want the file to be readonly, except when another window is
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7075 // editing the same buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7076 curbuf->b_p_ro = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7078 readonlymode = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7079 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7080 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7081 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7082 if (eap->do_ecmd_cmd != NULL)
23011
ec23d84a096d patch 8.2.2052: Vim9: "edit +4 fname" gives an error
Bram Moolenaar <Bram@vim.org>
parents: 22973
diff changeset
7083 do_cmd_argument(eap->do_ecmd_cmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7084 n = curwin->w_arg_idx_invalid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7085 check_arg_idx(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7086 if (n != curwin->w_arg_idx_invalid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7087 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7088 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7089
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7090 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7091 * if ":split file" worked, set alternate file name in old window to new
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7092 * file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7093 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7094 if (old_curwin != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7095 && *eap->arg != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7096 && curwin != old_curwin
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7097 && win_valid(old_curwin)
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 17
diff changeset
7098 && old_curwin->w_buffer != curbuf
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
7099 && (cmdmod.cmod_flags & CMOD_KEEPALT) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7100 old_curwin->w_alt_fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7102 ex_no_reprint = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7103 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7105 #ifndef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7106 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7107 * ":gui" and ":gvim" when there is no GUI.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7108 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7109 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7110 ex_nogui(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7111 {
25306
078edc1821bf patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 25304
diff changeset
7112 eap->errmsg = _(e_gui_cannot_be_used_not_enabled_at_compile_time);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7113 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7114 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7115
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15866
diff changeset
7116 #if defined(FEAT_GUI_MSWIN) && defined(FEAT_MENU) && defined(FEAT_TEAROFF)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7117 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7118 ex_tearoff(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7119 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7120 gui_make_tearoff(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7122 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7123
13392
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7124 #if (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_GTK) \
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7125 || defined(FEAT_TERM_POPUP_MENU)) && defined(FEAT_MENU)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7126 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7127 ex_popup(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7128 {
13392
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7129 # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_GTK)
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7130 if (gui.in_use)
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7131 gui_make_popup(eap->arg, eap->forceit);
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7132 # ifdef FEAT_TERM_POPUP_MENU
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7133 else
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7134 # endif
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7135 # endif
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7136 # ifdef FEAT_TERM_POPUP_MENU
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7137 pum_make_popup(eap->arg, eap->forceit);
d5347779fb20 patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents: 13384
diff changeset
7138 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7139 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7140 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7141
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7142 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7143 ex_swapname(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7145 if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL)
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
7146 msg(_("No swap file"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7147 else
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
7148 msg((char *)curbuf->b_ml.ml_mfp->mf_fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7149 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7150
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7151 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7152 * ":syncbind" forces all 'scrollbind' windows to have the same relative
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7153 * offset.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7154 * (1998-11-02 16:21:01 R. Edward Ralston <eralston@computer.org>)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7155 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7156 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7157 ex_syncbind(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7158 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7159 win_T *wp;
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7160 win_T *save_curwin = curwin;
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7161 buf_T *save_curbuf = curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7162 long topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7163 long y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7164 linenr_T old_linenr = curwin->w_cursor.lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7166 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7168 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7169 * determine max topline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7170 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7171 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7172 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7173 topline = curwin->w_topline;
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7174 FOR_ALL_WINDOWS(wp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7175 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7176 if (wp->w_p_scb && wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7177 {
15713
ad8b2c109b22 patch 8.1.0864: cannot have a local value for 'scrolloff' and 'sidescrolloff'
Bram Moolenaar <Bram@vim.org>
parents: 15663
diff changeset
7178 y = wp->w_buffer->b_ml.ml_line_count - get_scrolloff_value();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7179 if (topline > y)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7180 topline = y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7183 if (topline < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7184 topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7186 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7187 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7188 topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7191
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7192 /*
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7193 * Set all scrollbind windows to the same topline.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7194 */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9538
diff changeset
7195 FOR_ALL_WINDOWS(curwin)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7196 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7197 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7198 {
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7199 curbuf = curwin->w_buffer;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7200 y = topline - curwin->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7201 if (y > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7202 scrollup(y, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7203 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7204 scrolldown(-y, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7205 curwin->w_scbind_pos = topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7206 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7207 cursor_correct();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7208 curwin->w_redr_status = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7210 }
5566
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7211 curwin = save_curwin;
4b23119cb584 updated for version 7.4.131
Bram Moolenaar <bram@vim.org>
parents: 5545
diff changeset
7212 curbuf = save_curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7213 if (curwin->w_p_scb)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7215 did_syncbind = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7216 checkpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7217 if (old_linenr != curwin->w_cursor.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7218 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7219 char_u ctrl_o[2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7221 ctrl_o[0] = Ctrl_O;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7222 ctrl_o[1] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7223 ins_typebuf(ctrl_o, REMAP_NONE, 0, TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7225 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7226 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7229 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7230 ex_read(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7231 {
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7232 int i;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7233 int empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7234 linenr_T lnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7235
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7236 if (eap->usefilter) // :r!cmd
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7237 do_bang(1, eap, FALSE, FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7238 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7240 if (u_save(eap->line2, (linenr_T)(eap->line2 + 1)) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7241 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7242
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7243 #ifdef FEAT_BROWSE
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
7244 if (cmdmod.cmod_flags & CMOD_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7246 char_u *browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7247
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
7248 browseFile = do_browse(0, (char_u *)_("Append File"), eap->arg,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7249 NULL, NULL, NULL, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7250 if (browseFile != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7251 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7252 i = readfile(browseFile, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7253 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7254 vim_free(browseFile);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7256 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7257 i = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7258 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7259 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7260 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7261 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7262 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7263 if (check_fname() == FAIL) // check for no file name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7264 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7265 i = readfile(curbuf->b_ffname, curbuf->b_fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7266 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7268 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7269 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7270 if (vim_strchr(p_cpo, CPO_ALTREAD) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7271 (void)setaltfname(eap->arg, eap->arg, (linenr_T)1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7272 i = readfile(eap->arg, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7273 eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7274
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7275 }
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10520
diff changeset
7276 if (i != OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7277 {
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
7278 #if defined(FEAT_EVAL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7279 if (!aborting())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7280 #endif
26877
06a137af96f8 patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
7281 semsg(_(e_cant_open_file_str), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7283 else
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7284 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7285 if (empty && exmode_active)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7286 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7287 // Delete the empty line that remains. Historically ex does
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7288 // this but vi doesn't.
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7289 if (eap->line2 == 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7290 lnum = curbuf->b_ml.ml_line_count;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7291 else
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7292 lnum = 1;
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
7293 if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7294 {
20599
d571231175b4 patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents: 20575
diff changeset
7295 ml_delete(lnum);
573
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
7296 if (curwin->w_cursor.lnum > 1
c85bf6a4999b updated for version 7.0163
vimboss
parents: 557
diff changeset
7297 && curwin->w_cursor.lnum >= lnum)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7298 --curwin->w_cursor.lnum;
1929
9230c45fdde6 updated for version 7.2-226
vimboss
parents: 1926
diff changeset
7299 deleted_lines_mark(lnum, 1L);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7300 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7301 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7302 redraw_curbuf_later(VALID);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7303 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7304 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7305 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7306
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7307 static char_u *prev_dir = NULL;
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7308
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7309 #if defined(EXITFREE) || defined(PROTO)
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7310 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7311 free_cd_dir(void)
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7312 {
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
7313 VIM_CLEAR(prev_dir);
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
7314 VIM_CLEAR(globaldir);
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7315 }
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7316 #endif
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7317
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7318 /*
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7319 * Get the previous directory for the given chdir scope.
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7320 */
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7321 static char_u *
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7322 get_prevdir(cdscope_T scope)
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7323 {
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7324 if (scope == CDSCOPE_WINDOW)
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7325 return curwin->w_prevdir;
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7326 else if (scope == CDSCOPE_TABPAGE)
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7327 return curtab->tp_prevdir;
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7328 return prev_dir;
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7329 }
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7330
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7331 /*
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7332 * Deal with the side effects of changing the current directory.
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7333 * When 'scope' is CDSCOPE_TABPAGE then this was after an ":tcd" command.
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7334 * When 'scope' is CDSCOPE_WINDOW then this was after an ":lcd" command.
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7335 */
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7336 void
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7337 post_chdir(cdscope_T scope)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7338 {
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7339 if (scope != CDSCOPE_WINDOW)
16427
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7340 // Clear tab local directory for both :cd and :tcd
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7341 VIM_CLEAR(curtab->tp_localdir);
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
7342 VIM_CLEAR(curwin->w_localdir);
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7343 if (scope != CDSCOPE_GLOBAL)
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7344 {
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7345 char_u *pdir = get_prevdir(scope);
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7346
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7347 // If still in the global directory, need to remember current
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7348 // directory as the global directory.
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7349 if (globaldir == NULL && pdir != NULL)
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7350 globaldir = vim_strsave(pdir);
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7351
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7352 // Remember this local directory for the window.
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7353 if (mch_dirname(NameBuff, MAXPATHL) == OK)
16427
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7354 {
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7355 if (scope == CDSCOPE_TABPAGE)
16427
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7356 curtab->tp_localdir = vim_strsave(NameBuff);
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7357 else
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7358 curwin->w_localdir = vim_strsave(NameBuff);
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7359 }
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7360 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7361 else
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7362 {
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7363 // We are now in the global directory, no need to remember its name.
13244
ac42c4b11dbc patch 8.0.1496: clearing a pointer takes two lines
Christian Brabandt <cb@256bit.org>
parents: 13221
diff changeset
7364 VIM_CLEAR(globaldir);
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7365 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7366
26181
027c5b4b6f07 patch 8.2.3622: "verbose pwd" shows confusing info
Bram Moolenaar <Bram@vim.org>
parents: 26171
diff changeset
7367 last_chdir_reason = NULL;
4704
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7368 shorten_fnames(TRUE);
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7369 }
542af01979be updated for version 7.3.1099
Bram Moolenaar <bram@vim.org>
parents: 4435
diff changeset
7370
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7371 /*
27617
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7372 * Trigger DirChangedPre for "acmd_fname" with directory "new_dir".
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7373 */
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7374 void
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7375 trigger_DirChangedPre(char_u *acmd_fname, char_u *new_dir)
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7376 {
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7377 #ifdef FEAT_EVAL
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7378 dict_T *v_event;
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7379 save_v_event_T save_v_event;
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7380
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7381 v_event = get_v_event(&save_v_event);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7382 (void)dict_add_string(v_event, "directory", new_dir);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7383 dict_set_items_ro(v_event);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7384 #endif
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7385 apply_autocmds(EVENT_DIRCHANGEDPRE, acmd_fname, new_dir, FALSE, curbuf);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7386 #ifdef FEAT_EVAL
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7387 restore_v_event(v_event, &save_v_event);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7388 #endif
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7389 }
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7390
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7391 /*
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7392 * Change directory function used by :cd/:tcd/:lcd Ex commands and the
20645
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7393 * chdir() function.
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7394 * scope == CDSCOPE_WINDOW: changes the window-local directory
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7395 * scope == CDSCOPE_TABPAGE: changes the tab-local directory
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7396 * Otherwise: changes the global directory
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7397 * Returns TRUE if the directory is successfully changed.
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7398 */
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7399 int
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7400 changedir_func(
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7401 char_u *new_dir,
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7402 int forceit,
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7403 cdscope_T scope)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7404 {
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7405 char_u *pdir = NULL;
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7406 int dir_differs;
27617
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7407 char_u *acmd_fname = NULL;
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7408 char_u **pp;
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7409
19261
a20c66f13a6e patch 8.2.0189: cd() with NULL argument crashes
Bram Moolenaar <Bram@vim.org>
parents: 19195
diff changeset
7410 if (new_dir == NULL || allbuf_locked())
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7411 return FALSE;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7412
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7413 if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged() && !forceit)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7414 {
26958
d92e0d85923f patch 8.2.4008: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26952
diff changeset
7415 emsg(_(e_cannot_change_directory_buffer_is_modified_add_bang_to_override));
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7416 return FALSE;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7417 }
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7418
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7419 // ":cd -": Change to previous directory
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7420 if (STRCMP(new_dir, "-") == 0)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7421 {
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7422 pdir = get_prevdir(scope);
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7423 if (pdir == NULL)
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7424 {
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
7425 emsg(_(e_no_previous_directory));
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7426 return FALSE;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7427 }
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7428 new_dir = pdir;
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7429 }
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7430
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7431 // Save current directory for next ":cd -"
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7432 if (mch_dirname(NameBuff, MAXPATHL) == OK)
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7433 pdir = vim_strsave(NameBuff);
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7434 else
20711
d91b8d1e5198 patch 8.2.0909: cannot go back to the previous local directory
Bram Moolenaar <Bram@vim.org>
parents: 20659
diff changeset
7435 pdir = NULL;
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7436
26500
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7437 // For UNIX ":cd" means: go to home directory.
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7438 // On other systems too if 'cdhome' is set.
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7439 #if defined(UNIX) || defined(VMS)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7440 if (*new_dir == NUL)
26500
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7441 #else
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7442 if (*new_dir == NUL && p_cdh)
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7443 #endif
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7444 {
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7445 // use NameBuff for home directory name
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7446 # ifdef VMS
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7447 char_u *p;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7448
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7449 p = mch_getenv((char_u *)"SYS$LOGIN");
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7450 if (p == NULL || *p == NUL) // empty is the same as not set
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7451 NameBuff[0] = NUL;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7452 else
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7453 vim_strncpy(NameBuff, p, MAXPATHL - 1);
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7454 # else
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7455 expand_env((char_u *)"$HOME", NameBuff, MAXPATHL);
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7456 # endif
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7457 new_dir = NameBuff;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7458 }
26837
6aae8f25790a patch 8.2.3947: unnecessary check for NULL pointer
Bram Moolenaar <Bram@vim.org>
parents: 26825
diff changeset
7459 dir_differs = pdir == NULL
27617
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7460 || pathcmp((char *)pdir, (char *)new_dir, -1) != 0;
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7461 if (dir_differs)
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7462 {
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7463 if (scope == CDSCOPE_WINDOW)
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7464 acmd_fname = (char_u *)"window";
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7465 else if (scope == CDSCOPE_TABPAGE)
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7466 acmd_fname = (char_u *)"tabpage";
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7467 else
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7468 acmd_fname = (char_u *)"global";
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7469 trigger_DirChangedPre(acmd_fname, new_dir);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7470
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7471 if (vim_chdir(new_dir))
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7472 {
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7473 emsg(_(e_command_failed));
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7474 vim_free(pdir);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7475 return FALSE;
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7476 }
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7477 }
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7478
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7479 if (scope == CDSCOPE_WINDOW)
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7480 pp = &curwin->w_prevdir;
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7481 else if (scope == CDSCOPE_TABPAGE)
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7482 pp = &curtab->tp_prevdir;
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7483 else
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7484 pp = &prev_dir;
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7485 vim_free(*pp);
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7486 *pp = pdir;
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7487
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7488 post_chdir(scope);
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7489
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7490 if (dir_differs)
27617
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
7491 apply_autocmds(EVENT_DIRCHANGED, acmd_fname, new_dir, FALSE, curbuf);
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27499
diff changeset
7492 return TRUE;
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7493 }
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 355
diff changeset
7494
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7495 /*
16427
8c3a1bd270bb patch 8.1.1218: cannot set a directory for a tab page
Bram Moolenaar <Bram@vim.org>
parents: 16411
diff changeset
7496 * ":cd", ":tcd", ":lcd", ":chdir" ":tchdir" and ":lchdir".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7497 */
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1408
diff changeset
7498 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7499 ex_cd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7500 {
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15152
diff changeset
7501 char_u *new_dir;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7502
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7503 new_dir = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7504 #if !defined(UNIX) && !defined(VMS)
26500
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7505 // for non-UNIX ":cd" means: print current directory unless 'cdhome' is set
8088fa133b93 patch 8.2.3780: ":cd" works differently on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 26439
diff changeset
7506 if (*new_dir == NUL && !p_cdh)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7507 ex_pwd(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7508 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7509 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7510 {
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7511 cdscope_T scope = CDSCOPE_GLOBAL;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7512
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7513 if (eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7514 scope = CDSCOPE_WINDOW;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7515 else if (eap->cmdidx == CMD_tcd || eap->cmdidx == CMD_tchdir)
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7516 scope = CDSCOPE_TABPAGE;
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7517
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7518 if (changedir_func(new_dir, eap->forceit, scope))
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7519 {
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7520 // Echo the new current directory if the command was typed.
1930
89d1e8ed6c1d updated for version 7.2-227
vimboss
parents: 1929
diff changeset
7521 if (KeyTyped || p_verbose >= 5)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7522 ex_pwd(eap);
16576
bcc343175103 patch 8.1.1291: not easy to change directory and restore
Bram Moolenaar <Bram@vim.org>
parents: 16515
diff changeset
7523 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7524 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7527 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7528 * ":pwd".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7529 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7530 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7531 ex_pwd(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7533 if (mch_dirname(NameBuff, MAXPATHL) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7535 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7536 slash_adjust(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7537 #endif
20645
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7538 if (p_verbose > 0)
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7539 {
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7540 char *context = "global";
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7541
26171
fa8161b003f6 patch 8.2.3617: ":verbose pwd" does not mention 'autochdir' was applied
Bram Moolenaar <Bram@vim.org>
parents: 26096
diff changeset
7542 if (last_chdir_reason != NULL)
fa8161b003f6 patch 8.2.3617: ":verbose pwd" does not mention 'autochdir' was applied
Bram Moolenaar <Bram@vim.org>
parents: 26096
diff changeset
7543 context = last_chdir_reason;
fa8161b003f6 patch 8.2.3617: ":verbose pwd" does not mention 'autochdir' was applied
Bram Moolenaar <Bram@vim.org>
parents: 26096
diff changeset
7544 else if (curwin->w_localdir != NULL)
20645
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7545 context = "window";
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7546 else if (curtab->tp_localdir != NULL)
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7547 context = "tabpage";
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7548 smsg("[%s] %s", context, (char *)NameBuff);
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7549 }
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7550 else
b60bb094af52 patch 8.2.0876: :pwd does not give a hint about the scope of the directory
Bram Moolenaar <Bram@vim.org>
parents: 20599
diff changeset
7551 msg((char *)NameBuff);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7553 else
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
7554 emsg(_(e_directory_unknown));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7555 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7556
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7557 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7558 * ":=".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7559 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7560 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7561 ex_equal(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7562 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
7563 smsg("%ld", (long)eap->line2);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7564 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7566
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7567 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7568 ex_sleep(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7569 {
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7570 int n;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7571 long len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7572
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7573 if (cursor_valid())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7574 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7575 n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7576 if (n >= 0)
27426
41e0dcf38521 patch 8.2.4241: some type casts are redundant
Bram Moolenaar <Bram@vim.org>
parents: 27342
diff changeset
7577 windgoto(n, curwin->w_wincol + curwin->w_wcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7578 }
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7579
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7580 len = eap->line2;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7581 switch (*eap->arg)
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7582 {
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7583 case 'm': break;
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7584 case NUL: len *= 1000L; break;
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
7585 default: semsg(_(e_invalid_argument_str), eap->arg); return;
236
4707450c2b33 updated for version 7.0066
vimboss
parents: 198
diff changeset
7586 }
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7587
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7588 // Hide the cursor if invoked with !
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7589 do_sleep(len, eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7590 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7591
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7592 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7593 * Sleep for "msec" milliseconds, but keep checking for a CTRL-C every second.
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7594 * Hide the cursor if "hide_cursor" is TRUE.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7595 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7596 void
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7597 do_sleep(long msec, int hide_cursor)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7598 {
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7599 long done = 0;
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7600 long wait_now;
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7601 # ifdef ELAPSED_FUNC
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7602 elapsed_T start_tv;
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7603
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7604 // Remember at what time we started, so that we know how much longer we
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7605 // should wait after waiting for a bit.
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7606 ELAPSED_INIT(start_tv);
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7607 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7608
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7609 if (hide_cursor)
26809
1c22fcc7415c patch 8.2.3933: after ":cd" fails ":cd -" is incorrect
Bram Moolenaar <Bram@vim.org>
parents: 26804
diff changeset
7610 cursor_sleep();
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7611 else
26809
1c22fcc7415c patch 8.2.3933: after ":cd" fails ":cd -" is incorrect
Bram Moolenaar <Bram@vim.org>
parents: 26804
diff changeset
7612 cursor_on();
23648
b7d3c79075c5 patch 8.2.2366: when using ":sleep" the cursor is always displayed
Bram Moolenaar <Bram@vim.org>
parents: 23616
diff changeset
7613
14860
ac5d0d27aef9 patch 8.1.0442: GUI: cursor not drawn after ":redraw | sleep"
Christian Brabandt <cb@256bit.org>
parents: 14760
diff changeset
7614 out_flush_cursor(FALSE, FALSE);
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7615 while (!got_int && done < msec)
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7616 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7617 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
7618 #ifdef FEAT_TIMERS
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7619 {
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7620 long due_time = check_due_timer();
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7621
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7622 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
7623 wait_now = due_time;
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7624 }
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7625 #endif
10240
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7626 #ifdef FEAT_JOB_CHANNEL
17708
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7627 if (has_any_channel() && wait_now > 20L)
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7628 wait_now = 20L;
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7629 #endif
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7630 #ifdef FEAT_SOUND
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7631 if (has_any_sound_callback() && wait_now > 20L)
10696f279e20 patch 8.1.1851: crash when sound_playfile() callback plays sound
Bram Moolenaar <Bram@vim.org>
parents: 17652
diff changeset
7632 wait_now = 20L;
10240
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7633 #endif
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents: 8524
diff changeset
7634 ui_delay(wait_now, TRUE);
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7635
10240
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7636 #ifdef FEAT_JOB_CHANNEL
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7637 if (has_any_channel())
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7638 ui_breakcheck_force(TRUE);
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7639 else
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7640 #endif
175b1116f96a commit https://github.com/vim/vim/commit/b9c31e71f5a4653a27e81c21226039bfa35b9131
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
7641 ui_breakcheck();
7109
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
7642 #ifdef MESSAGE_QUEUE
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7643 // Process the netbeans and clientserver messages that may have been
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7644 // received in the call to ui_breakcheck() when the GUI is in use. This
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7645 // may occur when running a test case.
7109
fa95595fbc52 commit https://github.com/vim/vim/commit/93c88e0f6a4a8f7634ed84721daf4af46fc0d5db
Christian Brabandt <cb@256bit.org>
parents: 7105
diff changeset
7646 parse_queued_messages();
3151
af76a61a7f79 updated for version 7.3.346
Bram Moolenaar <bram@vim.org>
parents: 3116
diff changeset
7647 #endif
17712
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7648
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7649 # ifdef ELAPSED_FUNC
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7650 // actual time passed
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7651 done = ELAPSED_FUNC(start_tv);
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7652 # else
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7653 // guestimate time passed (will actually be more)
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7654 done += wait_now;
316ae5631c1d patch 8.1.1853: timers test is still flaky
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
7655 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7656 }
14284
7cd8298c4c04 patch 8.1.0158: GUI: input() fails if CTRL-C was pressed before
Christian Brabandt <cb@256bit.org>
parents: 14266
diff changeset
7657
7cd8298c4c04 patch 8.1.0158: GUI: input() fails if CTRL-C was pressed before
Christian Brabandt <cb@256bit.org>
parents: 14266
diff changeset
7658 // If CTRL-C was typed to interrupt the sleep, drop the CTRL-C from the
7cd8298c4c04 patch 8.1.0158: GUI: input() fails if CTRL-C was pressed before
Christian Brabandt <cb@256bit.org>
parents: 14266
diff changeset
7659 // input buffer, otherwise a following call to input() fails.
7cd8298c4c04 patch 8.1.0158: GUI: input() fails if CTRL-C was pressed before
Christian Brabandt <cb@256bit.org>
parents: 14266
diff changeset
7660 if (got_int)
7cd8298c4c04 patch 8.1.0158: GUI: input() fails if CTRL-C was pressed before
Christian Brabandt <cb@256bit.org>
parents: 14266
diff changeset
7661 (void)vpeekc();
24428
9299d21d1d5d patch 8.2.2754: :sleep! does not always hide the cursor
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
7662
9299d21d1d5d patch 8.2.2754: :sleep! does not always hide the cursor
Bram Moolenaar <Bram@vim.org>
parents: 24369
diff changeset
7663 if (hide_cursor)
26809
1c22fcc7415c patch 8.2.3933: after ":cd" fails ":cd -" is incorrect
Bram Moolenaar <Bram@vim.org>
parents: 26804
diff changeset
7664 cursor_unsleep();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7665 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7666
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7667 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7668 * ":winsize" command (obsolete).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7669 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7670 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7671 ex_winsize(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7672 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7673 int w, h;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7674 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7675 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7676
23855
a7098bc3810e patch 8.2.2469: confusing error if :winsize has a wrong argument
Bram Moolenaar <Bram@vim.org>
parents: 23853
diff changeset
7677 if (!isdigit(*arg))
a7098bc3810e patch 8.2.2469: confusing error if :winsize has a wrong argument
Bram Moolenaar <Bram@vim.org>
parents: 23853
diff changeset
7678 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
7679 semsg(_(e_invalid_argument_str), arg);
23855
a7098bc3810e patch 8.2.2469: confusing error if :winsize has a wrong argument
Bram Moolenaar <Bram@vim.org>
parents: 23853
diff changeset
7680 return;
a7098bc3810e patch 8.2.2469: confusing error if :winsize has a wrong argument
Bram Moolenaar <Bram@vim.org>
parents: 23853
diff changeset
7681 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7682 w = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7683 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7684 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7685 h = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7686 if (*p != NUL && *arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7687 set_shellsize(w, h, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7688 else
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
7689 emsg(_(e_winsize_requires_two_number_arguments));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7692 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7693 ex_wincmd(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7695 int xchar = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7696 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7697
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7698 if (*eap->arg == 'g' || *eap->arg == Ctrl_G)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7699 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7700 // CTRL-W g and CTRL-W CTRL-G have an extra command character
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7701 if (eap->arg[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7702 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
7703 emsg(_(e_invalid_argument));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7704 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7706 xchar = eap->arg[1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7707 p = eap->arg + 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7709 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7710 p = eap->arg + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7711
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
7712 set_nextcmd(eap, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7713 p = skipwhite(p);
21353
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7714 if (*p != NUL && *p != (
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7715 #ifdef FEAT_EVAL
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7716 in_vim9script() ? '#' :
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7717 #endif
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7718 '"')
fb8c8fcb7b60 patch 8.2.1227: Vim9: allowing both quoted and # comments is confusing
Bram Moolenaar <Bram@vim.org>
parents: 21335
diff changeset
7719 && eap->nextcmd == NULL)
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
7720 emsg(_(e_invalid_argument));
2887
15705b520c29 updated for version 7.3.217
Bram Moolenaar <bram@vim.org>
parents: 2853
diff changeset
7721 else if (!eap->skip)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7722 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7723 // Pass flags on for ":vertical wincmd ]".
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
7724 postponed_split_flags = cmdmod.cmod_split;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
7725 postponed_split_tab = cmdmod.cmod_tab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7726 do_window(*eap->arg, eap->addr_count > 0 ? eap->line2 : 0L, xchar);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7727 postponed_split_flags = 0;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
7728 postponed_split_tab = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7729 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7731
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7732 #if defined(FEAT_GUI) || defined(UNIX) || defined(VMS) || defined(MSWIN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7733 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7734 * ":winpos".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7735 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7736 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7737 ex_winpos(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7738 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7739 int x, y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7740 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7741 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7742
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7743 if (*arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7744 {
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7745 # if defined(FEAT_GUI) || defined(MSWIN)
16451
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7746 # ifdef VIMDLL
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7747 if (gui.in_use ? gui_mch_get_winpos(&x, &y) != FAIL :
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7748 mch_get_winpos(&x, &y) != FAIL)
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7749 # elif defined(FEAT_GUI)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7750 if (gui.in_use && gui_mch_get_winpos(&x, &y) != FAIL)
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7751 # else
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7752 if (mch_get_winpos(&x, &y) != FAIL)
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7753 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7755 sprintf((char *)IObuff, _("Window position: X %d, Y %d"), x, y);
15543
dd725a8ab112 patch 8.1.0779: argument for message functions is inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15510
diff changeset
7756 msg((char *)IObuff);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7757 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7758 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7759 # endif
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
7760 emsg(_(e_obtaining_window_position_not_implemented_for_this_platform));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7761 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7762 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7764 x = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7765 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7766 p = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7767 y = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7768 if (*p == NUL || *arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7769 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
7770 emsg(_(e_winpos_requires_two_number_arguments));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7771 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7772 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7773 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7774 if (gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7775 gui_mch_set_winpos(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7776 else if (gui.starting)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7777 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7778 // Remember the coordinates for when the window is opened.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7779 gui_win_x = x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7780 gui_win_y = y;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7781 }
16451
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7782 # if defined(HAVE_TGETENT) || defined(VIMDLL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7783 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7784 # endif
16451
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7785 # endif
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
7786 # if defined(MSWIN) && (!defined(FEAT_GUI) || defined(VIMDLL))
11
4424b47a0797 updated for version 7.0003
vimboss
parents: 9
diff changeset
7787 mch_set_winpos(x, y);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7788 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7789 # ifdef HAVE_TGETENT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7790 if (*T_CWP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7791 term_set_winpos(x, y);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7792 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7795 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7797 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7798 * Handle command that work like operators: ":delete", ":yank", ":>" and ":<".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7799 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7800 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7801 ex_operators(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7803 oparg_T oa;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7805 clear_oparg(&oa);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7806 oa.regname = eap->regname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7807 oa.start.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7808 oa.end.lnum = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7809 oa.line_count = eap->line2 - eap->line1 + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7810 oa.motion_type = MLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7811 virtual_op = FALSE;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7812 if (eap->cmdidx != CMD_yank) // position cursor for undo
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7813 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7814 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7815 curwin->w_cursor.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7816 beginline(BL_SOL | BL_FIX);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7818
5498
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
7819 if (VIsual_active)
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
7820 end_visual_mode();
79a8bac614c0 updated for version 7.4.098
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
7821
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7822 switch (eap->cmdidx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7824 case CMD_delete:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7825 oa.op_type = OP_DELETE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7826 op_delete(&oa);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7827 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7828
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7829 case CMD_yank:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7830 oa.op_type = OP_YANK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7831 (void)op_yank(&oa, FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7832 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7833
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7834 default: // CMD_rshift or CMD_lshift
4889
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7835 if (
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7836 #ifdef FEAT_RIGHTLEFT
4889
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7837 (eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7838 #else
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7839 eap->cmdidx == CMD_rshift
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7840 #endif
25d64a4edc0b updated for version 7.3.1190
Bram Moolenaar <bram@vim.org>
parents: 4857
diff changeset
7841 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7842 oa.op_type = OP_RSHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7843 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7844 oa.op_type = OP_LSHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7845 op_shift(&oa, FALSE, eap->amount);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7846 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7847 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7848 virtual_op = MAYBE;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7849 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7850 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7851
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7852 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7853 * ":put".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7854 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7855 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7856 ex_put(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7857 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7858 // ":0put" works like ":1put!".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7859 if (eap->line2 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7860 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7861 eap->line2 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7862 eap->forceit = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7863 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7864 curwin->w_cursor.lnum = eap->line2;
26096
e353ace59e62 patch 8.2.3581: reading character past end of line
Bram Moolenaar <Bram@vim.org>
parents: 25939
diff changeset
7865 check_cursor_col();
22176
6941d3205be9 patch 8.2.1637: Vim9: :put ={expr} does not work inside :def function
Bram Moolenaar <Bram@vim.org>
parents: 21939
diff changeset
7866 do_put(eap->regname, NULL, eap->forceit ? BACKWARD : FORWARD, 1L,
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7867 PUT_LINE|PUT_CURSLINE);
7
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7871 * Handle ":copy" and ":move".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7872 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7873 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7874 ex_copymove(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7875 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7876 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7877
21592
7d721e95dc51 patch 8.2.1346: small build fails
Bram Moolenaar <Bram@vim.org>
parents: 21584
diff changeset
7878 #ifdef FEAT_EVAL
21584
d0c76ce48326 patch 8.2.1342: Vim9: accidentally using "t" gives a confusing error
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
7879 if (not_in_vim9(eap) == FAIL)
d0c76ce48326 patch 8.2.1342: Vim9: accidentally using "t" gives a confusing error
Bram Moolenaar <Bram@vim.org>
parents: 21544
diff changeset
7880 return;
21592
7d721e95dc51 patch 8.2.1346: small build fails
Bram Moolenaar <Bram@vim.org>
parents: 21584
diff changeset
7881 #endif
14760
fd69edd2c67e patch 8.1.0392: error while typing :/foo/s// with 'incsearch' enabled
Christian Brabandt <cb@256bit.org>
parents: 14700
diff changeset
7882 n = get_address(eap, &eap->arg, eap->addr_type, FALSE, FALSE, FALSE, 1);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7883 if (eap->arg == NULL) // error detected
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7884 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7885 eap->nextcmd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7886 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7887 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7888 get_flags(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7889
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7890 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7891 * move or copy lines from 'eap->line1'-'eap->line2' to below line 'n'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7892 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7893 if (n == MAXLNUM || n < 0 || n > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7894 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
7895 emsg(_(e_invalid_range));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7896 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7897 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7899 if (eap->cmdidx == CMD_move)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7900 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7901 if (do_move(eap->line1, eap->line2, n) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7902 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7904 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7905 ex_copy(eap->line1, eap->line2, n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7906 u_clearline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7907 beginline(BL_SOL | BL_FIX);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7908 ex_may_print(eap);
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7909 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7910
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7911 /*
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7912 * Print the current line if flags were given to the Ex command.
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7913 */
5776
845608965bd9 updated for version 7.4.232
Bram Moolenaar <bram@vim.org>
parents: 5741
diff changeset
7914 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7915 ex_may_print(exarg_T *eap)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7916 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7917 if (eap->flags != 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7918 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7919 print_line(curwin->w_cursor.lnum, (eap->flags & EXFLAG_NR),
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7920 (eap->flags & EXFLAG_LIST));
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7921 ex_no_reprint = TRUE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7922 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7923 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7925 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7926 * ":smagic" and ":snomagic".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7927 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7928 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7929 ex_submagic(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7930 {
23505
bb29b09902d5 patch 8.2.2295: incsearch does not detect empty pattern properly
Bram Moolenaar <Bram@vim.org>
parents: 23398
diff changeset
7931 optmagic_T saved = magic_overruled;
bb29b09902d5 patch 8.2.2295: incsearch does not detect empty pattern properly
Bram Moolenaar <Bram@vim.org>
parents: 23398
diff changeset
7932
bb29b09902d5 patch 8.2.2295: incsearch does not detect empty pattern properly
Bram Moolenaar <Bram@vim.org>
parents: 23398
diff changeset
7933 magic_overruled = eap->cmdidx == CMD_smagic
bb29b09902d5 patch 8.2.2295: incsearch does not detect empty pattern properly
Bram Moolenaar <Bram@vim.org>
parents: 23398
diff changeset
7934 ? OPTION_MAGIC_ON : OPTION_MAGIC_OFF;
21773
2f2e528c5782 patch 8.2.1436: function implementing :substitute has unexpected name
Bram Moolenaar <Bram@vim.org>
parents: 21727
diff changeset
7935 ex_substitute(eap);
23272
a84e7abb0c92 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Bram Moolenaar <Bram@vim.org>
parents: 23239
diff changeset
7936 magic_overruled = saved;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7937 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7939 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7940 * ":join".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7941 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7942 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7943 ex_join(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7944 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7945 curwin->w_cursor.lnum = eap->line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7946 if (eap->line1 == eap->line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7947 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7948 if (eap->addr_count >= 2) // :2,2join does nothing
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7949 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7950 if (eap->line2 == curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7951 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7952 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7953 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7954 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7955 ++eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7956 }
5848
75f222d67cea updated for version 7.4.267
Bram Moolenaar <bram@vim.org>
parents: 5790
diff changeset
7957 (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7958 beginline(BL_WHITE | BL_FIX);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7959 ex_may_print(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7960 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7961
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7962 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7963 * ":[addr]@r" or ":[addr]*r": execute register
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7964 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7965 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
7966 ex_at(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7967 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7968 int c;
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
7969 int prev_len = typebuf.tb_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7970
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7971 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
7972 check_cursor_col();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7974 #ifdef USE_ON_FLY_SCROLL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7975 dont_scroll = TRUE; // disallow scrolling here
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7976 #endif
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7977
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7978 // get the register name. No name means to use the previous one
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7979 c = *eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7980 if (c == NUL || (c == '*' && *eap->cmd == '*'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7981 c = '@';
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
7982 // Put the register in the typeahead buffer with the "silent" flag.
1034
98d1c149be76 updated for version 7.0-160
vimboss
parents: 1021
diff changeset
7983 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
7984 == FAIL)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7985 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7986 beep_flush();
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
7987 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7988 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7989 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7990 int save_efr = exec_from_reg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7991
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7992 exec_from_reg = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7994 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7995 * Execute from the typeahead buffer.
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
7996 * Continue until the stuff buffer is empty and all added characters
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
7997 * have been consumed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7998 */
1973
1e52efdc900c updated for version 7.2-270
vimboss
parents: 1968
diff changeset
7999 while (!stuff_empty() || typebuf.tb_len > prev_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8000 (void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8002 exec_from_reg = save_efr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8003 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8004 }
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 * ":!".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8008 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8009 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8010 ex_bang(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8011 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8012 do_bang(eap->addr_count, eap, eap->forceit, TRUE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8014
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8015 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8016 * ":undo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8017 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8018 static void
8368
db2a07b710ed commit https://github.com/vim/vim/commit/f1d2501ebe33e148886c2914acd33140e20ee222
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
8019 ex_undo(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8020 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8021 if (eap->addr_count == 1) // :undo 123
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
8022 undo_time(eap->line2, FALSE, FALSE, TRUE);
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 756
diff changeset
8023 else
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 756
diff changeset
8024 u_undo(1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8025 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8026
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8027 #ifdef FEAT_PERSISTENT_UNDO
2340
99c1eba60b2d Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents: 2333
diff changeset
8028 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8029 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
8030 {
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8031 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
8032
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8033 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
8034 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
8035 }
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8036
2340
99c1eba60b2d Make automatic prototype generation work with more interfaces.
Bram Moolenaar <bram@vim.org>
parents: 2333
diff changeset
8037 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8038 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
8039 {
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8040 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
8041
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8042 u_compute_hash(hash);
2238
3d0a7beb0d75 Made reading/writing undo info a bit more robust.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
8043 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
8044 }
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8045 #endif
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
8046
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8047 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8048 * ":redo".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8049 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8050 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8051 ex_redo(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8053 u_redo(1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8054 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8055
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8056 /*
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8057 * ":earlier" and ":later".
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8058 */
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8059 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8060 ex_later(exarg_T *eap)
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8061 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8062 long count = 0;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8063 int sec = FALSE;
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
8064 int file = FALSE;
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8065 char_u *p = eap->arg;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8066
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8067 if (*p == NUL)
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8068 count = 1;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8069 else if (isdigit(*p))
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8070 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8071 count = getdigits(&p);
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8072 switch (*p)
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8073 {
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8074 case 's': ++p; sec = TRUE; break;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8075 case 'm': ++p; sec = TRUE; count *= 60; break;
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8076 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
8077 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
8078 case 'f': ++p; file = TRUE; break;
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8079 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8080 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8081
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8082 if (*p != NUL)
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
8083 semsg(_(e_invalid_argument_str), eap->arg);
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8084 else
2281
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
8085 undo_time(eap->cmdidx == CMD_earlier ? -count : count,
e41433ea71df Added ":earlier 1f" and ":later 1f".
Bram Moolenaar <bram@vim.org>
parents: 2276
diff changeset
8086 sec, file, FALSE);
756
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8087 }
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8088
f0edbe50b896 updated for version 7.0224
vimboss
parents: 737
diff changeset
8089 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8090 * ":redir": start/stop redirection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8091 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8092 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8093 ex_redir(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8094 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8095 char *mode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8096 char_u *fname;
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8097 char_u *arg = eap->arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8098
9440
73c0d07cc15e commit https://github.com/vim/vim/commit/ba768495c2e6bae74e49d22d489fbf211ecad55e
Christian Brabandt <cb@256bit.org>
parents: 9438
diff changeset
8099 #ifdef FEAT_EVAL
9454
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9440
diff changeset
8100 if (redir_execute)
9da0cb39cbee commit https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
Christian Brabandt <cb@256bit.org>
parents: 9440
diff changeset
8101 {
26966
ac75c145f0a9 patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
8102 emsg(_(e_cannot_use_redir_inside_execute));
9438
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
8103 return;
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
8104 }
9440
73c0d07cc15e commit https://github.com/vim/vim/commit/ba768495c2e6bae74e49d22d489fbf211ecad55e
Christian Brabandt <cb@256bit.org>
parents: 9438
diff changeset
8105 #endif
9438
7897b1e4f3e7 commit https://github.com/vim/vim/commit/245a7cb6d33e556415c9fcaa874b784a6d8f0ef3
Christian Brabandt <cb@256bit.org>
parents: 9432
diff changeset
8106
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8107 if (STRICMP(eap->arg, "END") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8108 close_redir();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8109 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8110 {
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8111 if (*arg == '>')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8112 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8113 ++arg;
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8114 if (*arg == '>')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8115 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8116 ++arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8117 mode = "a";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8119 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8120 mode = "w";
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8121 arg = skipwhite(arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8123 close_redir();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8124
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8125 // Expand environment variables and "~/".
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8126 fname = expand_env_save(arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8127 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8128 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8129 #ifdef FEAT_BROWSE
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
8130 if (cmdmod.cmod_flags & CMOD_BROWSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8131 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8132 char_u *browseFile;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8133
28
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
8134 browseFile = do_browse(BROWSE_SAVE,
726bdc53fa49 updated for version 7.0018
vimboss
parents: 24
diff changeset
8135 (char_u *)_("Save Redirection"),
13802
378f9f8e6d8f patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents: 13792
diff changeset
8136 fname, NULL, NULL,
378f9f8e6d8f patch 8.0.1773: dialog messages are not translated
Christian Brabandt <cb@256bit.org>
parents: 13792
diff changeset
8137 (char_u *)_(BROWSE_FILTER_ALL_FILES), curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8138 if (browseFile == NULL)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8139 return; // operation cancelled
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8140 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8141 fname = browseFile;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8142 eap->forceit = TRUE; // since dialog already asked
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8143 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8144 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8146 redir_fd = open_exfile(fname, eap->forceit, mode);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8147 vim_free(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8148 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8149 #ifdef FEAT_EVAL
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8150 else if (*arg == '@')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8151 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8152 // redirect to a register a-z (resp. A-Z for appending)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8153 close_redir();
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8154 ++arg;
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8155 if (ASCII_ISALPHA(*arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8156 # ifdef FEAT_CLIPBOARD
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8157 || *arg == '*'
1038
777d5460622d updated for version 7.0-164
vimboss
parents: 1034
diff changeset
8158 || *arg == '+'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8159 # endif
122
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8160 || *arg == '"')
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8161 {
56eb9755174b updated for version 7.0043
vimboss
parents: 111
diff changeset
8162 redir_reg = *arg++;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8163 if (*arg == '>' && arg[1] == '>') // append
268
8e3c690f1f3c updated for version 7.0072
vimboss
parents: 236
diff changeset
8164 arg += 2;
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
8165 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8166 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8167 // Can use both "@a" and "@a>".
296
00b73c762d77 updated for version 7.0078
vimboss
parents: 291
diff changeset
8168 if (*arg == '>')
00b73c762d77 updated for version 7.0078
vimboss
parents: 291
diff changeset
8169 arg++;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8170 // Make register empty when not using @A-@Z and the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8171 // command is valid.
1427
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
8172 if (*arg == NUL && !isupper(redir_reg))
0e5eb96dc18c updated for version 7.1-142
vimboss
parents: 1411
diff changeset
8173 write_reg_contents(redir_reg, (char_u *)"", -1, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8174 }
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8175 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8176 if (*arg != NUL)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8177 {
268
8e3c690f1f3c updated for version 7.0072
vimboss
parents: 236
diff changeset
8178 redir_reg = 0;
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
8179 semsg(_(e_invalid_argument_str), eap->arg);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8180 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8181 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8182 else if (*arg == '=' && arg[1] == '>')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8183 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8184 int append;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8185
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8186 // redirect to a variable
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8187 close_redir();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8188 arg += 2;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8189
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8190 if (*arg == '>')
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8191 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8192 ++arg;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8193 append = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8195 else
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8196 append = FALSE;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8197
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8198 if (var_redir_start(skipwhite(arg), append) == OK)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8199 redir_vname = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8200 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8201 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8202
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8203 // TODO: redirect to a buffer
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8204
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8205 else
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
8206 semsg(_(e_invalid_argument_str), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8207 }
972
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8208
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8209 // Make sure redirection is not off. Can happen for cmdline completion
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8210 // that indirectly invokes a command to catch its output.
972
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8211 if (redir_fd != NULL
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8212 #ifdef FEAT_EVAL
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8213 || redir_reg || redir_vname
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8214 #endif
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8215 )
decce137e7be updated for version 7.0-098
vimboss
parents: 971
diff changeset
8216 redir_off = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8217 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8219 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8220 * ":redraw": force redraw
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8221 */
7864
6b0891de44a9 commit https://github.com/vim/vim/commit/fb1f62691eae7c79a28b3b17a60e72ce198c71a2
Christian Brabandt <cb@256bit.org>
parents: 7850
diff changeset
8222 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8223 ex_redraw(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8225 int r = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8226 int p = p_lz;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8228 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8229 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
8230 validate_cursor();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8231 update_topline();
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5720
diff changeset
8232 update_screen(eap->forceit ? CLEAR : VIsual_active ? INVERTED : 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8233 if (need_maketitle)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8234 maketitle();
16451
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
8235 #if defined(MSWIN) && (!defined(FEAT_GUI_MSWIN) || defined(VIMDLL))
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
8236 # ifdef VIMDLL
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
8237 if (!gui.in_use)
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
8238 # endif
7ae2396cef62 patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents: 16427
diff changeset
8239 resize_console_buf();
15866
6ddcd10aa7af patch 8.1.0940: MS-Windows console resizing not handled properly
Bram Moolenaar <Bram@vim.org>
parents: 15748
diff changeset
8240 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8241 RedrawingDisabled = r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8242 p_lz = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8243
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8244 // Reset msg_didout, so that a message that's there is overwritten.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8245 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8246 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8247
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8248 // No need to wait after an intentional redraw.
5198
1b89e3f916c5 updated for version 7.4a.025
Bram Moolenaar <bram@vim.org>
parents: 4928
diff changeset
8249 need_wait_return = FALSE;
1b89e3f916c5 updated for version 7.4a.025
Bram Moolenaar <bram@vim.org>
parents: 4928
diff changeset
8250
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8251 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8254 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8255 * ":redrawstatus": force redraw of status line(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8256 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8257 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8258 ex_redrawstatus(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8260 int r = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8261 int p = p_lz;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8262
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8263 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8264 p_lz = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8265 if (eap->forceit)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8266 status_redraw_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8267 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8268 status_redraw_curbuf();
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5720
diff changeset
8269 update_screen(VIsual_active ? INVERTED : 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8270 RedrawingDisabled = r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8271 p_lz = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8272 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8273 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8274
15396
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8275 /*
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8276 * ":redrawtabline": force redraw of the tabline
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8277 */
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8278 static void
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8279 ex_redrawtabline(exarg_T *eap UNUSED)
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8280 {
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8281 int r = RedrawingDisabled;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8282 int p = p_lz;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8283
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8284 RedrawingDisabled = 0;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8285 p_lz = FALSE;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8286
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8287 draw_tabline();
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8288
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8289 RedrawingDisabled = r;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8290 p_lz = p;
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8291 out_flush();
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8292 }
325e4a8ba1b6 patch 8.1.0706: tabline is not always redrawn
Bram Moolenaar <Bram@vim.org>
parents: 15263
diff changeset
8293
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8294 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8295 close_redir(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8297 if (redir_fd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8299 fclose(redir_fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8300 redir_fd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8301 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8302 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8303 redir_reg = 0;
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8304 if (redir_vname)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8305 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8306 var_redir_stop();
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8307 redir_vname = 0;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8308 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8309 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8311
17539
554240b9574b patch 8.1.1767: FEAT_SESSION defined separately
Bram Moolenaar <Bram@vim.org>
parents: 17536
diff changeset
8312 #if (defined(FEAT_SESSION) || defined(FEAT_EVAL)) || defined(PROTO)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8313 int
18139
59bc3cd42cf5 patch 8.1.2064: MS-Windows: compiler warnings for unused arguments
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
8314 vim_mkdir_emsg(char_u *name, int prot UNUSED)
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8315 {
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8316 if (vim_mkdir(name, prot) != 0)
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8317 {
26952
b34ddbca305c patch 8.2.4005: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26948
diff changeset
8318 semsg(_(e_cannot_create_directory_str), name);
167
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8319 return FAIL;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8320 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8321 return OK;
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8322 }
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8323 #endif
c93c9cad9618 updated for version 7.0051
vimboss
parents: 164
diff changeset
8324
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8325 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8326 * Open a file for writing for an Ex command, with some checks.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8327 * Return file descriptor, or NULL on failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8328 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8329 FILE *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8330 open_exfile(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8331 char_u *fname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8332 int forceit,
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8333 char *mode) // "w" for create new file or "a" for append
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8334 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8335 FILE *fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8337 #ifdef UNIX
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8338 // with Unix it is possible to open a directory
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8339 if (mch_isdir(fname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8340 {
25064
8f2262c72178 patch 8.2.3069: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 24984
diff changeset
8341 semsg(_(e_src_is_directory), fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8342 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8343 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8344 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8345 if (!forceit && *mode != 'a' && vim_fexists(fname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8346 {
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
8347 semsg(_(e_str_exists_add_bang_to_override), fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8348 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8349 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8351 if ((fd = mch_fopen((char *)fname, mode)) == NULL)
26857
2aeea8611342 patch 8.2.3957: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26837
diff changeset
8352 semsg(_(e_cannot_open_str_for_writing_2), fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8353
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8354 return fd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8357 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8358 * ":mark" and ":k".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8359 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8360 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8361 ex_mark(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8362 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8363 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8364
23978
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
8365 #ifdef FEAT_EVAL
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
8366 if (not_in_vim9(eap) == FAIL)
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
8367 return;
54b2aa1f0d42 patch 8.2.2531: Vim9: the :k command is obscure
Bram Moolenaar <Bram@vim.org>
parents: 23974
diff changeset
8368 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8369 if (*eap->arg == NUL) // No argument?
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
8370 emsg(_(e_argument_required));
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8371 else if (eap->arg[1] != NUL) // more than one character?
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
8372 semsg(_(e_trailing_characters_str), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8373 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8374 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8375 pos = curwin->w_cursor; // save curwin->w_cursor
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8376 curwin->w_cursor.lnum = eap->line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8377 beginline(BL_WHITE | BL_FIX);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8378 if (setmark(*eap->arg) == FAIL) // set mark
26861
df2de1e63de0 patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26857
diff changeset
8379 emsg(_(e_argument_must_be_letter_or_forward_backward_quote));
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8380 curwin->w_cursor = pos; // restore curwin->w_cursor
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8382 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8383
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8384 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8385 * Update w_topline, w_leftcol and the cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8386 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8387 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8388 update_topline_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8389 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8390 check_cursor(); // put cursor on valid line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8391 update_topline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8392 if (!curwin->w_p_wrap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8393 validate_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8394 update_curswant();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8395 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8397 /*
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8398 * Save the current State and go to Normal mode.
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8399 * Return TRUE if the typeahead could be saved.
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8400 */
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8401 int
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8402 save_current_state(save_state_T *sst)
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8403 {
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8404 sst->save_msg_scroll = msg_scroll;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8405 sst->save_restart_edit = restart_edit;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8406 sst->save_msg_didout = msg_didout;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8407 sst->save_State = State;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8408 sst->save_insertmode = p_im;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8409 sst->save_finish_op = finish_op;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8410 sst->save_opcount = opcount;
15973
393a9a3a2da2 patch 8.1.0992: a :normal command resets the reg_executing() result
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
8411 sst->save_reg_executing = reg_executing;
23056
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8412
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8413 msg_scroll = FALSE; // no msg scrolling in Normal mode
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8414 restart_edit = 0; // don't go to Insert mode
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8415 p_im = FALSE; // don't use 'insertmode'
23390
9a5f12b36273 patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 23378
diff changeset
8416
23062
fa87b0d1277b patch 8.2.2077: build failure with small features
Bram Moolenaar <Bram@vim.org>
parents: 23056
diff changeset
8417 sst->save_script_version = current_sctx.sc_version;
23056
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8418 current_sctx.sc_version = 1; // not in Vim9 script
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8419
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8420 /*
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8421 * Save the current typeahead. This is required to allow using ":normal"
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8422 * from an event handler and makes sure we don't hang when the argument
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8423 * ends with half a command.
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8424 */
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8425 save_typeahead(&sst->tabuf);
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8426 return sst->tabuf.typebuf_valid;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8427 }
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8428
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8429 void
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8430 restore_current_state(save_state_T *sst)
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8431 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8432 // Restore the previous typeahead.
24846
fdc6a7769045 patch 8.2.2961: keys typed during a :normal command are discarded
Bram Moolenaar <Bram@vim.org>
parents: 24834
diff changeset
8433 restore_typeahead(&sst->tabuf, FALSE);
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8434
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8435 msg_scroll = sst->save_msg_scroll;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8436 restart_edit = sst->save_restart_edit;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8437 p_im = sst->save_insertmode;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8438 finish_op = sst->save_finish_op;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8439 opcount = sst->save_opcount;
15973
393a9a3a2da2 patch 8.1.0992: a :normal command resets the reg_executing() result
Bram Moolenaar <Bram@vim.org>
parents: 15868
diff changeset
8440 reg_executing = sst->save_reg_executing;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8441 msg_didout |= sst->save_msg_didout; // don't reset msg_didout now
23056
57b6427c18e4 patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Bram Moolenaar <Bram@vim.org>
parents: 23050
diff changeset
8442 current_sctx.sc_version = sst->save_script_version;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8443
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8444 // Restore the state (needed when called from a function executed for
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8445 // 'indentexpr'). Update the mouse and cursor, they may have changed.
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8446 State = sst->save_State;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8447 #ifdef CURSOR_SHAPE
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8448 ui_cursor_shape(); // may show different cursor shape
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8449 #endif
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8450 }
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8451
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8452 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8453 * ":normal[!] {commands}": Execute normal mode commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8454 */
7840
28f569c7dab9 commit https://github.com/vim/vim/commit/20fb9f346497daca4d19402fdfa5de7958642477
Christian Brabandt <cb@256bit.org>
parents: 7819
diff changeset
8455 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8456 ex_normal(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8457 {
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8458 save_state_T save_state;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8459 char_u *arg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8460 int l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8461 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8462
856
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
8463 if (ex_normal_lock > 0)
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
8464 {
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
8465 emsg(_(e_not_allowed_here));
856
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
8466 return;
8cd729851562 updated for version 7.0g
vimboss
parents: 844
diff changeset
8467 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8468 if (ex_normal_busy >= p_mmd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8469 {
26861
df2de1e63de0 patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26857
diff changeset
8470 emsg(_(e_recursive_use_of_normal_too_deep));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8471 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8472 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8473
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8474 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8475 * vgetc() expects a CSI and K_SPECIAL to have been escaped. Don't do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8476 * this for the K_SPECIAL leading byte, otherwise special keys will not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8477 * work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8478 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8479 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8480 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8481 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8482
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8483 // Count the number of characters to be escaped.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8484 for (p = eap->arg; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8485 {
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8486 #ifdef FEAT_GUI
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8487 if (*p == CSI) // leadbyte CSI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8488 len += 2;
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8489 #endif
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 461
diff changeset
8490 for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8491 if (*++p == K_SPECIAL // trailbyte K_SPECIAL or CSI
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8492 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8493 || *p == CSI
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8494 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8495 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8496 len += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8497 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8498 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8499 {
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16738
diff changeset
8500 arg = alloc(STRLEN(eap->arg) + len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8501 if (arg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8502 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8503 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8504 for (p = eap->arg; *p != NUL; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8506 arg[len++] = *p;
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8507 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8508 if (*p == CSI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8509 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8510 arg[len++] = KS_EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8511 arg[len++] = (int)KE_CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8512 }
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8513 #endif
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 461
diff changeset
8514 for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8515 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8516 arg[len++] = *++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8517 if (*p == K_SPECIAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8518 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8519 arg[len++] = KS_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8520 arg[len++] = KE_FILLER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8521 }
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8522 #ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8523 else if (*p == CSI)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8525 arg[len++] = KS_EXTRA;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8526 arg[len++] = (int)KE_CSI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8527 }
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8528 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8529 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8530 arg[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8531 }
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 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8535
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8536 ++ex_normal_busy;
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8537 if (save_current_state(&save_state))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8538 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8539 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8540 * Repeat the :normal command for each line in the range. When no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8541 * range given, execute it just once, without positioning the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8542 * first.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8543 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8544 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8546 if (eap->addr_count != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8548 curwin->w_cursor.lnum = eap->line1++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8549 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
8550 check_cursor_moved(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8551 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8552
15595
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8553 exec_normal_cmd(arg != NULL
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8554 ? arg
1ec942f1b648 patch 8.1.0805: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15591
diff changeset
8555 : eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8556 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8557 while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8558 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8559
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8560 // Might not return to the main loop when in an event handler.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8561 update_topline_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8562
12521
718787498836 patch 8.0.1139: using window toolbar changes state
Christian Brabandt <cb@256bit.org>
parents: 12515
diff changeset
8563 restore_current_state(&save_state);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8564 --ex_normal_busy;
6322
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
8565 setmouse();
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
8566 #ifdef CURSOR_SHAPE
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8567 ui_cursor_shape(); // may show different cursor shape
6322
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
8568 #endif
85d8cde3b432 updated for version 7.4.494
Bram Moolenaar <bram@vim.org>
parents: 6305
diff changeset
8569
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8570 vim_free(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8572
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8573 /*
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8574 * ":startinsert", ":startreplace" and ":startgreplace"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8575 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8576 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8577 ex_startinsert(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8578 {
98
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
8579 if (eap->forceit)
98435a8ddb09 updated for version 7.0038
vimboss
parents: 93
diff changeset
8580 {
17984
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8581 // cursor line can be zero on startup
12545
241fbf588b95 patch 8.0.1151: "vim -c startinsert!" doesn't append
Christian Brabandt <cb@256bit.org>
parents: 12521
diff changeset
8582 if (!curwin->w_cursor.lnum)
241fbf588b95 patch 8.0.1151: "vim -c startinsert!" doesn't append
Christian Brabandt <cb@256bit.org>
parents: 12521
diff changeset
8583 curwin->w_cursor.lnum = 1;
17984
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8584 set_cursor_for_append_to_line();
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8585 }
20097
165ec447ca77 patch 8.2.0604: :startinsert in a terminal window used later
Bram Moolenaar <Bram@vim.org>
parents: 20079
diff changeset
8586 #ifdef FEAT_TERMINAL
165ec447ca77 patch 8.2.0604: :startinsert in a terminal window used later
Bram Moolenaar <Bram@vim.org>
parents: 20079
diff changeset
8587 // Ignore this when running in an active terminal.
165ec447ca77 patch 8.2.0604: :startinsert in a terminal window used later
Bram Moolenaar <Bram@vim.org>
parents: 20079
diff changeset
8588 if (term_job_running(curbuf->b_term))
165ec447ca77 patch 8.2.0604: :startinsert in a terminal window used later
Bram Moolenaar <Bram@vim.org>
parents: 20079
diff changeset
8589 return;
165ec447ca77 patch 8.2.0604: :startinsert in a terminal window used later
Bram Moolenaar <Bram@vim.org>
parents: 20079
diff changeset
8590 #endif
17984
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8591
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8592 // Ignore the command when already in Insert mode. Inserting an
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8593 // expression register that invokes a function can do this.
89
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
8594 if (State & INSERT)
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
8595 return;
e1a8191c6768 updated for version 7.0036
vimboss
parents: 84
diff changeset
8596
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8597 if (eap->cmdidx == CMD_startinsert)
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8598 restart_edit = 'a';
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8599 else if (eap->cmdidx == CMD_startreplace)
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8600 restart_edit = 'R';
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8601 else
598
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8602 restart_edit = 'V';
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8603
05c67faedc8b updated for version 7.0170
vimboss
parents: 595
diff changeset
8604 if (!eap->forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8605 {
14
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
8606 if (eap->cmdidx == CMD_startinsert)
946da5994c01 updated for version 7.0006
vimboss
parents: 11
diff changeset
8607 restart_edit = 'i';
17984
2ea47dee7ddd patch 8.1.1988: :startinsert! does not work the same way as "A"
Bram Moolenaar <Bram@vim.org>
parents: 17966
diff changeset
8608 curwin->w_curswant = 0; // avoid MAXCOL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8609 }
22862
6d50182e7e24 patch 8.2.1978: making a mapping work in all modes is complicated
Bram Moolenaar <Bram@vim.org>
parents: 22840
diff changeset
8610
6d50182e7e24 patch 8.2.1978: making a mapping work in all modes is complicated
Bram Moolenaar <Bram@vim.org>
parents: 22840
diff changeset
8611 if (VIsual_active)
6d50182e7e24 patch 8.2.1978: making a mapping work in all modes is complicated
Bram Moolenaar <Bram@vim.org>
parents: 22840
diff changeset
8612 showmode();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8615 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8616 * ":stopinsert"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8617 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8618 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8619 ex_stopinsert(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8620 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8621 restart_edit = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8622 stop_insert_mode = TRUE;
8817
b7eb7bbd71d0 commit https://github.com/vim/vim/commit/fd773e9e88add7d1ffef890fb9f3a00d613b4326
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
8623 clearmode();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8624 }
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7840
diff changeset
8625
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8626 /*
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8627 * Execute normal mode command "cmd".
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8628 * "remap" can be REMAP_NONE or REMAP_YES.
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8629 */
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8630 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8631 exec_normal_cmd(char_u *cmd, int remap, int silent)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8632 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8633 // Stuff the argument into the typeahead buffer.
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8634 ins_typebuf(cmd, remap, 0, TRUE, silent);
14871
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8635 exec_normal(FALSE, FALSE, FALSE);
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8636 }
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7840
diff changeset
8637
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8638 /*
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8639 * Execute normal_cmd() until there is no typeahead left.
14871
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8640 * When "use_vpeekc" is TRUE use vpeekc() to check for available chars.
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8641 */
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8642 void
14871
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8643 exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop UNUSED)
7703
39251e981d1f commit https://github.com/vim/vim/commit/25281634cda03ce302aaf9f906a9520b5f81f91e
Christian Brabandt <cb@256bit.org>
parents: 7549
diff changeset
8644 {
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8645 oparg_T oa;
16263
d3377393e3d9 patch 8.1.1136: decoding of mouse click escape sequence is not tested
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
8646 int c;
d3377393e3d9 patch 8.1.1136: decoding of mouse click escape sequence is not tested
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
8647
d3377393e3d9 patch 8.1.1136: decoding of mouse click escape sequence is not tested
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
8648 // When calling vpeekc() from feedkeys() it will return Ctrl_C when there
d3377393e3d9 patch 8.1.1136: decoding of mouse click escape sequence is not tested
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
8649 // is nothing to get, so also check for Ctrl_C.
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8650 clear_oparg(&oa);
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8651 finish_op = FALSE;
14871
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8652 while ((!stuff_empty()
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8653 || ((was_typed || !typebuf_typed()) && typebuf.tb_len > 0)
16263
d3377393e3d9 patch 8.1.1136: decoding of mouse click escape sequence is not tested
Bram Moolenaar <Bram@vim.org>
parents: 16162
diff changeset
8654 || (use_vpeekc && (c = vpeekc()) != NUL && c != Ctrl_C))
14871
f20df682c8af patch 8.1.0447: GUI scrollbar test fails with Athena and Motif
Christian Brabandt <cb@256bit.org>
parents: 14862
diff changeset
8655 && !got_int)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8656 {
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8657 update_topline_cursor();
13829
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8658 #ifdef FEAT_TERMINAL
13866
4b35f2835ce4 patch 8.0.1804: using :normal in terminal window causes problems
Christian Brabandt <cb@256bit.org>
parents: 13829
diff changeset
8659 if (may_use_terminal_loop && term_use_loop()
13829
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8660 && oa.op_type == OP_NOP && oa.regname == NUL
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8661 && !VIsual_active)
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8662 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8663 // If terminal_loop() returns OK we got a key that is handled
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8664 // in Normal model. With FAIL we first need to position the
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8665 // cursor and the screen needs to be redrawn.
13829
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8666 if (terminal_loop(TRUE) == OK)
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8667 normal_cmd(&oa, TRUE);
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8668 }
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8669 else
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8670 #endif
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8671 // execute a Normal mode cmd
13829
044337cbf854 patch 8.0.1786: no test for 'termwinkey'
Christian Brabandt <cb@256bit.org>
parents: 13802
diff changeset
8672 normal_cmd(&oa, TRUE);
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8673 }
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8674 }
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
8675
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8676 #ifdef FEAT_FIND_ID
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8677 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8678 ex_checkpath(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8679 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8680 find_pattern_in_path(NULL, 0, 0, FALSE, FALSE, CHECK_PATH, 1L,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8681 eap->forceit ? ACTION_SHOW_ALL : ACTION_SHOW,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8682 (linenr_T)1, (linenr_T)MAXLNUM);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8684
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
8685 #if defined(FEAT_QUICKFIX)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8686 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8687 * ":psearch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8688 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8689 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8690 ex_psearch(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8692 g_do_tagpreview = p_pvh;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8693 ex_findpat(eap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8694 g_do_tagpreview = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8695 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8696 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8697
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8698 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8699 ex_findpat(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8700 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8701 int whole = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8702 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8703 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8704 int action;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8706 switch (cmdnames[eap->cmdidx].cmd_name[2])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8707 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8708 case 'e': // ":psearch", ":isearch" and ":dsearch"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8709 if (cmdnames[eap->cmdidx].cmd_name[0] == 'p')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8710 action = ACTION_GOTO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8711 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8712 action = ACTION_SHOW;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8713 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8714 case 'i': // ":ilist" and ":dlist"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8715 action = ACTION_SHOW_ALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8716 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8717 case 'u': // ":ijump" and ":djump"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8718 action = ACTION_GOTO;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8719 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8720 default: // ":isplit" and ":dsplit"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8721 action = ACTION_SPLIT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8722 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8723 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8724
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8725 n = 1;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8726 if (vim_isdigit(*eap->arg)) // get count
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8727 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8728 n = getdigits(&eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8729 eap->arg = skipwhite(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8730 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8731 if (*eap->arg == '/') // Match regexp, not just whole words
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8732 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8733 whole = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8734 ++eap->arg;
23272
a84e7abb0c92 patch 8.2.2182: Vim9: value of 'magic' is still relevant
Bram Moolenaar <Bram@vim.org>
parents: 23239
diff changeset
8735 p = skip_regexp(eap->arg, '/', magic_isset());
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8736 if (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8737 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8738 *p++ = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8739 p = skipwhite(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8740
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8741 // Check for trailing illegal characters
20111
f40231487a49 patch 8.2.0611: Vim9: no check for space before #comment
Bram Moolenaar <Bram@vim.org>
parents: 20097
diff changeset
8742 if (!ends_excmd2(eap->arg, p))
26883
7f150a4936f2 patch 8.2.3970: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26877
diff changeset
8743 eap->errmsg = ex_errmsg(e_trailing_characters_str, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8744 else
25521
2063b858cad9 patch 8.2.3297: cannot use all commands inside a {} block
Bram Moolenaar <Bram@vim.org>
parents: 25469
diff changeset
8745 set_nextcmd(eap, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8746 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8747 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8748 if (!eap->skip)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8749 find_pattern_in_path(eap->arg, 0, (int)STRLEN(eap->arg),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8750 whole, !eap->forceit,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8751 *eap->cmd == 'd' ? FIND_DEFINE : FIND_ANY,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8752 n, action, eap->line1, eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8753 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8754 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8755
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
8756
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
8757 #ifdef FEAT_QUICKFIX
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8758 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8759 * ":ptag", ":ptselect", ":ptjump", ":ptnext", etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8760 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8761 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8762 ex_ptag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8763 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8764 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
8765 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8768 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8769 * ":pedit"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8770 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8771 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8772 ex_pedit(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8773 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8774 win_T *curwin_save = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8775
19621
0d677257e35d patch 8.2.0367: can use :pedit in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19575
diff changeset
8776 if (ERROR_IF_ANY_POPUP_WINDOW)
0d677257e35d patch 8.2.0367: can use :pedit in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19575
diff changeset
8777 return;
0d677257e35d patch 8.2.0367: can use :pedit in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 19575
diff changeset
8778
17746
a4e488a6655c patch 8.1.1870: using :pedit from a help file sets help filetype
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
8779 // Open the preview window or popup and make it the current window.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8780 g_do_tagpreview = p_pvh;
17767
c75da1064e33 patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents: 17746
diff changeset
8781 prepare_tagpreview(TRUE, TRUE, FALSE);
17644
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8782
17746
a4e488a6655c patch 8.1.1870: using :pedit from a help file sets help filetype
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
8783 // Edit the file.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8784 do_exedit(eap, NULL);
17644
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8785
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8786 if (curwin != curwin_save && win_valid(curwin_save))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8787 {
17746
a4e488a6655c patch 8.1.1870: using :pedit from a help file sets help filetype
Bram Moolenaar <Bram@vim.org>
parents: 17744
diff changeset
8788 // Return cursor to where we were
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8789 validate_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8790 redraw_later(VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8791 win_enter(curwin_save, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8792 }
18763
49b78d6465e5 patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents: 18715
diff changeset
8793 # ifdef FEAT_PROP_POPUP
17644
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8794 else if (WIN_IS_POPUP(curwin))
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8795 {
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8796 // can't keep focus in popup window
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8797 win_enter(firstwin, TRUE);
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8798 }
daa1dea1c1b3 patch 8.1.1819: :pedit does not work with a popup preview window
Bram Moolenaar <Bram@vim.org>
parents: 17622
diff changeset
8799 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8800 g_do_tagpreview = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8801 }
12477
68d7bc045dbe patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
8802 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8803
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8804 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8805 * ":stag", ":stselect" and ":stjump".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8806 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8807 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8808 ex_stag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8810 postponed_split = -1;
22699
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
8811 postponed_split_flags = cmdmod.cmod_split;
e82579016863 patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents: 22697
diff changeset
8812 postponed_split_tab = cmdmod.cmod_tab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8813 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8814 postponed_split_flags = 0;
1090
9a3b65713280 updated for version 7.0-216
vimboss
parents: 1088
diff changeset
8815 postponed_split_tab = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8818 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8819 * ":tag", ":tselect", ":tjump", ":tnext", etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8820 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8821 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8822 ex_tag(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8824 ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8825 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8827 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8828 ex_tag_cmd(exarg_T *eap, char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8829 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8830 int cmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8832 switch (name[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8833 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8834 case 'j': cmd = DT_JUMP; // ":tjump"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8835 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8836 case 's': cmd = DT_SELECT; // ":tselect"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8837 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8838 case 'p': cmd = DT_PREV; // ":tprevious"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8839 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8840 case 'N': cmd = DT_PREV; // ":tNext"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8841 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8842 case 'n': cmd = DT_NEXT; // ":tnext"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8843 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8844 case 'o': cmd = DT_POP; // ":pop"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8845 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8846 case 'f': // ":tfirst"
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8847 case 'r': cmd = DT_FIRST; // ":trewind"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8848 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8849 case 'l': cmd = DT_LAST; // ":tlast"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8850 break;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8851 default: // ":tag"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8852 #ifdef FEAT_CSCOPE
1603
694e8715dce6 updated for version 7.1-316
vimboss
parents: 1570
diff changeset
8853 if (p_cst && *eap->arg != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8854 {
10373
bd674706408a commit https://github.com/vim/vim/commit/d4db7719bdfbc54df396eac08d8cbb2389feacf4
Christian Brabandt <cb@256bit.org>
parents: 10361
diff changeset
8855 ex_cstag(eap);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8856 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8857 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8858 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8859 cmd = DT_TAG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8860 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8861 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8862
649
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8863 if (name[0] == 'l')
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8864 {
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8865 #ifndef FEAT_QUICKFIX
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8866 ex_ni(eap);
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8867 return;
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8868 #else
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8869 cmd = DT_LTAG;
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8870 #endif
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8871 }
8157079cea85 updated for version 7.0191
vimboss
parents: 635
diff changeset
8872
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8873 do_tag(eap->arg, cmd, eap->addr_count > 0 ? (int)eap->line2 : 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8874 eap->forceit, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8875 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8877 /*
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8878 * Check "str" for starting with a special cmdline variable.
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8879 * 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
8880 * the variable. Otherwise return -1 and "*usedlen" is unchanged.
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8881 */
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8882 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8883 find_cmdline_var(char_u *src, int *usedlen)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8884 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8885 int len;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8886 int i;
1879
e8eeeff19eae updated for version 7.2-176
vimboss
parents: 1877
diff changeset
8887 static char *(spec_str[]) = {
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8888 "%",
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8889 #define SPEC_PERC 0
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8890 "#",
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8891 #define SPEC_HASH (SPEC_PERC + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8892 "<cword>", // cursor word
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8893 #define SPEC_CWORD (SPEC_HASH + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8894 "<cWORD>", // cursor WORD
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8895 #define SPEC_CCWORD (SPEC_CWORD + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8896 "<cexpr>", // expr under cursor
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8897 #define SPEC_CEXPR (SPEC_CCWORD + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8898 "<cfile>", // cursor path name
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8899 #define SPEC_CFILE (SPEC_CEXPR + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8900 "<sfile>", // ":so" file name
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8901 #define SPEC_SFILE (SPEC_CFILE + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8902 "<slnum>", // ":so" file line number
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
8903 #define SPEC_SLNUM (SPEC_SFILE + 1)
21493
7449921216bc patch 8.2.1297: when a test fails it's often not easy to see where
Bram Moolenaar <Bram@vim.org>
parents: 21487
diff changeset
8904 "<stack>", // call stack
7449921216bc patch 8.2.1297: when a test fails it's often not easy to see where
Bram Moolenaar <Bram@vim.org>
parents: 21487
diff changeset
8905 #define SPEC_STACK (SPEC_SLNUM + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8906 "<afile>", // autocommand file name
21493
7449921216bc patch 8.2.1297: when a test fails it's often not easy to see where
Bram Moolenaar <Bram@vim.org>
parents: 21487
diff changeset
8907 #define SPEC_AFILE (SPEC_STACK + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8908 "<abuf>", // autocommand buffer number
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
8909 #define SPEC_ABUF (SPEC_AFILE + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8910 "<amatch>", // autocommand match name
13380
69517d67421f patch 8.0.1564: too many #ifdefs
Christian Brabandt <cb@256bit.org>
parents: 13288
diff changeset
8911 #define SPEC_AMATCH (SPEC_ABUF + 1)
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8912 "<sflnum>", // script file line number
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
8913 #define SPEC_SFLNUM (SPEC_AMATCH + 1)
21594
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
8914 "<SID>", // script ID: <SNR>123_
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
8915 #define SPEC_SID (SPEC_SFLNUM + 1)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8916 #ifdef FEAT_CLIENTSERVER
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8917 "<client>"
21594
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
8918 # define SPEC_CLIENT (SPEC_SID + 1)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8919 #endif
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8920 };
1872
f13849167330 updated for version 7.2-169
vimboss
parents: 1868
diff changeset
8921
24768
7334bf933510 patch 8.2.2922: computing array length is done in various ways
Bram Moolenaar <Bram@vim.org>
parents: 24723
diff changeset
8922 for (i = 0; i < (int)ARRAY_LENGTH(spec_str); ++i)
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8923 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8924 len = (int)STRLEN(spec_str[i]);
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8925 if (STRNCMP(src, spec_str[i], len) == 0)
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8926 {
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8927 *usedlen = len;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8928 return i;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8929 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8930 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8931 return -1;
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8932 }
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8933
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8934 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8935 * Evaluate cmdline variables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8936 *
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8937 * change "%" to curbuf->b_ffname
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8938 * "#" to curwin->w_alt_fnum
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8939 * "%%" to curwin->w_alt_fnum in Vim9 script
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8940 * "<cword>" to word under the cursor
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8941 * "<cWORD>" to WORD under the cursor
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8942 * "<cexpr>" to C-expression under the cursor
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8943 * "<cfile>" to path name under the cursor
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8944 * "<sfile>" to sourced file name
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8945 * "<stack>" to call stack
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8946 * "<slnum>" to sourced file line number
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8947 * "<afile>" to file name for autocommand
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8948 * "<abuf>" to buffer number for autocommand
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
8949 * "<amatch>" to matching name for autocommand
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8950 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8951 * 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
8952 * "" for error without a message) and NULL is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8953 * Returns an allocated string if a valid match was found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8954 * Returns NULL if no match was found. "usedlen" then still contains the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8955 * number of characters to skip.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8956 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8957 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
8958 eval_vars(
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8959 char_u *src, // pointer into commandline
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8960 char_u *srcstart, // beginning of valid memory for src
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8961 int *usedlen, // characters after src that are used
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8962 linenr_T *lnump, // line number for :e command, or NULL
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8963 char **errormsg, // pointer to error message
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8964 int *escaped) // return value has escaped white space (can
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8965 // be NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8967 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8968 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8969 char_u *result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8970 char_u *resultbuf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8971 int resultlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8972 buf_T *buf;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8973 int valid = VALID_HEAD + VALID_PATH; // assume valid result
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8974 int spec_idx;
14405
289b850d2cbf patch 8.1.0217: compiler warning for variable set but not used
Christian Brabandt <cb@256bit.org>
parents: 14393
diff changeset
8975 int tilde_file = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8976 int skip_mod = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8977 char_u strbuf[30];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8978
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8979 *errormsg = NULL;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
8980 if (escaped != NULL)
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
8981 *escaped = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8982
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8983 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8984 * Check if there is something to do.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8985 */
1661
5bbc2d6658ad updated for version 7.2a-013
vimboss
parents: 1619
diff changeset
8986 spec_idx = find_cmdline_var(src, usedlen);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
8987 if (spec_idx < 0) // no match
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8988 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8989 *usedlen = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8990 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8992
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8993 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8994 * Skip when preceded with a backslash "\%" and "\#".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8995 * Note: In "\\%" the % is also not recognized!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8996 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8997 if (src > srcstart && src[-1] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8999 *usedlen = 0;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9000 STRMOVE(src - 1, src); // remove backslash
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9001 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9003
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9004 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9005 * word or WORD under cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9006 */
12421
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9007 if (spec_idx == SPEC_CWORD || spec_idx == SPEC_CCWORD
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9008 || spec_idx == SPEC_CEXPR)
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9009 {
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9010 resultlen = find_ident_under_cursor(&result,
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9011 spec_idx == SPEC_CWORD ? (FIND_IDENT | FIND_STRING)
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9012 : spec_idx == SPEC_CEXPR ? (FIND_IDENT | FIND_STRING | FIND_EVAL)
da55ea30842c patch 8.0.1090: cannot get the text under the cursor like v:beval_text
Christian Brabandt <cb@256bit.org>
parents: 12419
diff changeset
9013 : FIND_STRING);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9014 if (resultlen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9015 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9016 *errormsg = "";
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9017 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9018 }
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9022 * '#': Alternate file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9023 * '%': Current file name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9024 * File name under the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9025 * File name for autocommand
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9026 * and following modifiers
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9027 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9028 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9029 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9030 int off = 0;
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9031
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9032 switch (spec_idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9033 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9034 case SPEC_PERC:
23372
86d155b29dd7 patch 8.2.2229: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 23370
diff changeset
9035 #ifdef FEAT_EVAL
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9036 if (!in_vim9script() || src[1] != '%')
23372
86d155b29dd7 patch 8.2.2229: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 23370
diff changeset
9037 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9038 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9039 // '%': current file
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9040 if (curbuf->b_fname == NULL)
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9041 {
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9042 result = (char_u *)"";
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9043 valid = 0; // Must have ":p:h" to be valid
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9044 }
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9045 else
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9046 {
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9047 result = curbuf->b_fname;
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9048 tilde_file = STRCMP(result, "~") == 0;
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9049 }
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9050 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9051 }
23372
86d155b29dd7 patch 8.2.2229: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents: 23370
diff changeset
9052 #ifdef FEAT_EVAL
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9053 // "%%" alternate file
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9054 off = 1;
23378
8e956ea07bb2 patch 8.2.2232: compiler error for falling through into next case
Bram Moolenaar <Bram@vim.org>
parents: 23372
diff changeset
9055 #endif
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9056 // FALLTHROUGH
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9057 case SPEC_HASH: // '#' or "#99": alternate file
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9058 if (off == 0 ? src[1] == '#' : src[2] == '%')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9059 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9060 // "##" or "%%%": the argument list
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9061 result = arg_all();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9062 resultbuf = result;
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9063 *usedlen = off + 2;
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
9064 if (escaped != NULL)
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
9065 *escaped = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9066 skip_mod = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9067 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9068 }
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9069 s = src + off + 1;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9070 if (*s == '<') // "#<99" uses v:oldfiles
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9071 ++s;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9072 i = (int)getdigits(&s);
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9073 if (s == src + off + 2 && src[off + 1] == '-')
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9074 // just a minus sign, don't skip over it
12706
9b882316aa63 patch 8.0.1231: expanding file name drops dash
Christian Brabandt <cb@256bit.org>
parents: 12674
diff changeset
9075 s--;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9076 *usedlen = (int)(s - src); // length of what we expand
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9077
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9078 if (src[off + 1] == '<' && i != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9079 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9080 if (*usedlen < off + 2)
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9081 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9082 // Should we give an error message for #<text?
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9083 *usedlen = off + 1;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9084 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9085 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9086 #ifdef FEAT_EVAL
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9087 result = list_find_str(get_vim_var_list(VV_OLDFILES),
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9088 (long)i);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9089 if (result == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9090 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9091 *errormsg = "";
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9092 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9093 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9094 #else
26962
85866e069c24 patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
9095 *errormsg = _(e_hashsmall_is_not_available_without_the_eval_feature);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9096 return NULL;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9097 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9098 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9099 else
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9100 {
23370
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9101 if (i == 0 && src[off + 1] == '<' && *usedlen > off + 1)
622e90acea5d patch 8.2.2228: Vim9: cannot use ":e #" because # starts a comment
Bram Moolenaar <Bram@vim.org>
parents: 23358
diff changeset
9102 *usedlen = off + 1;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9103 buf = buflist_findnr(i);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9104 if (buf == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9105 {
26861
df2de1e63de0 patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26857
diff changeset
9106 *errormsg = _(e_no_alternate_file_name_to_substitute_for_hash);
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9107 return NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9108 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9109 if (lnump != NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9110 *lnump = ECMD_LAST;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9111 if (buf->b_fname == NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9112 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9113 result = (char_u *)"";
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9114 valid = 0; // Must have ":p:h" to be valid
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9115 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9116 else
14393
c62601adad69 patch 8.1.0211: expanding a file name "~" results in $HOME
Christian Brabandt <cb@256bit.org>
parents: 14286
diff changeset
9117 {
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9118 result = buf->b_fname;
14393
c62601adad69 patch 8.1.0211: expanding a file name "~" results in $HOME
Christian Brabandt <cb@256bit.org>
parents: 14286
diff changeset
9119 tilde_file = STRCMP(result, "~") == 0;
c62601adad69 patch 8.1.0211: expanding a file name "~" results in $HOME
Christian Brabandt <cb@256bit.org>
parents: 14286
diff changeset
9120 }
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1731
diff changeset
9121 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9122 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9124 #ifdef FEAT_SEARCHPATH
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9125 case SPEC_CFILE: // file name under cursor
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
9126 result = file_name_at_cursor(FNAME_MESS|FNAME_HYP, 1L, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9127 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9128 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9129 *errormsg = "";
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9130 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9131 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9132 resultbuf = result; // remember allocated string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9133 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9134 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9135
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9136 case SPEC_AFILE: // file name for autocommand
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9137 result = autocmd_fname;
1723
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9138 if (result != NULL && !autocmd_fname_full)
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9139 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9140 // Still need to turn the fname into a full path. It is
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9141 // postponed to avoid a delay when <afile> is not used.
1723
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9142 autocmd_fname_full = TRUE;
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9143 result = FullName_save(autocmd_fname, FALSE);
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9144 vim_free(autocmd_fname);
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9145 autocmd_fname = result;
2e42153b37f1 updated for version 7.2-021
vimboss
parents: 1721
diff changeset
9146 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9147 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9148 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9149 *errormsg = _(e_no_autocommand_file_name_to_substitute_for_afile);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9150 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9151 }
1471
e980e93d2ac2 updated for version 7.1-186
vimboss
parents: 1467
diff changeset
9152 result = shorten_fname1(result);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9153 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9154
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9155 case SPEC_ABUF: // buffer number for autocommand
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9156 if (autocmd_bufnr <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9157 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9158 *errormsg = _(e_no_autocommand_buffer_name_to_substitute_for_abuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9159 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9160 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9161 sprintf((char *)strbuf, "%d", autocmd_bufnr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9162 result = strbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9163 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9164
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9165 case SPEC_AMATCH: // match name for autocommand
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9166 result = autocmd_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9167 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9168 {
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9169 *errormsg = _(e_no_autocommand_match_name_to_substitute_for_amatch);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9170 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9172 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9173
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9174 case SPEC_SFILE: // file name for ":so" command
21493
7449921216bc patch 8.2.1297: when a test fails it's often not easy to see where
Bram Moolenaar <Bram@vim.org>
parents: 21487
diff changeset
9175 case SPEC_STACK: // call stack
22208
a607f02fd17a patch 8.2.1653: expand('<stack>') does not include the final line number
Bram Moolenaar <Bram@vim.org>
parents: 22176
diff changeset
9176 result = estack_sfile(spec_idx == SPEC_SFILE
a607f02fd17a patch 8.2.1653: expand('<stack>') does not include the final line number
Bram Moolenaar <Bram@vim.org>
parents: 22176
diff changeset
9177 ? ESTACK_SFILE : ESTACK_STACK);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9178 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9179 {
21493
7449921216bc patch 8.2.1297: when a test fails it's often not easy to see where
Bram Moolenaar <Bram@vim.org>
parents: 21487
diff changeset
9180 *errormsg = spec_idx == SPEC_SFILE
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9181 ? _(e_no_source_file_name_to_substitute_for_sfile)
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9182 : _(e_no_call_stack_to_substitute_for_stack);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9183 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9184 }
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
9185 resultbuf = result; // remember allocated string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9186 break;
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9187
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9188 case SPEC_SLNUM: // line in file for ":so" command
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
9189 if (SOURCING_NAME == NULL || SOURCING_LNUM == 0)
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
9190 {
26962
85866e069c24 patch 8.2.4010: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26960
diff changeset
9191 *errormsg = _(e_no_line_number_to_use_for_slnum);
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
9192 return NULL;
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
9193 }
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
9194 sprintf((char *)strbuf, "%ld", SOURCING_LNUM);
2645
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
9195 result = strbuf;
a2271decbce5 updated for version 7.3.065
Bram Moolenaar <bram@vim.org>
parents: 2635
diff changeset
9196 break;
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9197
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9198 #ifdef FEAT_EVAL
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9199 case SPEC_SFLNUM: // line in script file
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
9200 if (current_sctx.sc_lnum + SOURCING_LNUM == 0)
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9201 {
26966
ac75c145f0a9 patch 8.2.4012: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26962
diff changeset
9202 *errormsg = _(e_no_line_number_to_use_for_sflnum);
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9203 return NULL;
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9204 }
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9205 sprintf((char *)strbuf, "%ld",
18991
847cc7932c42 patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents: 18904
diff changeset
9206 (long)(current_sctx.sc_lnum + SOURCING_LNUM));
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9207 result = strbuf;
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9208 break;
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9209
21594
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9210 case SPEC_SID:
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9211 if (current_sctx.sc_sid <= 0)
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9212 {
26439
b18f3b0f317c patch 8.2.3750: error messages are everywhere
Bram Moolenaar <Bram@vim.org>
parents: 26420
diff changeset
9213 *errormsg = _(e_using_sid_not_in_script_context);
21594
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9214 return NULL;
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9215 }
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9216 sprintf((char *)strbuf, "<SNR>%d_", current_sctx.sc_sid);
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9217 result = strbuf;
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9218 break;
21596
c18d00494b60 patch 8.2.1348: build failure without the eval feature
Bram Moolenaar <Bram@vim.org>
parents: 21594
diff changeset
9219 #endif
21594
5daca8504c63 patch 8.2.1347: cannot easily get the script ID
Bram Moolenaar <Bram@vim.org>
parents: 21592
diff changeset
9220
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9221 #ifdef FEAT_CLIENTSERVER
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9222 case SPEC_CLIENT: // Source of last submitted input
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
9223 sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
9224 (long_u)clientWindow);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9225 result = strbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9226 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9227 #endif
14700
0a3b9ecf7cb8 patch 8.1.0362: cannot get the script line number when executing a function
Christian Brabandt <cb@256bit.org>
parents: 14677
diff changeset
9228
11428
346168f2a6cb patch 8.0.0598: building with gcc 7.1 yields new warnings
Christian Brabandt <cb@256bit.org>
parents: 11374
diff changeset
9229 default:
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9230 result = (char_u *)""; // avoid gcc warning
11428
346168f2a6cb patch 8.0.0598: building with gcc 7.1 yields new warnings
Christian Brabandt <cb@256bit.org>
parents: 11374
diff changeset
9231 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9233
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9234 resultlen = (int)STRLEN(result); // length of new string
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9235 if (src[*usedlen] == '<') // remove the file name extension
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9236 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9237 ++*usedlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9238 if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9239 resultlen = (int)(s - result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9240 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9241 else if (!skip_mod)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9242 {
14393
c62601adad69 patch 8.1.0211: expanding a file name "~" results in $HOME
Christian Brabandt <cb@256bit.org>
parents: 14286
diff changeset
9243 valid |= modify_fname(src, tilde_file, usedlen, &result, &resultbuf,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9244 &resultlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9245 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9246 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9247 *errormsg = "";
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9248 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9249 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9250 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9251 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9253 if (resultlen == 0 || valid != VALID_HEAD + VALID_PATH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9254 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9255 if (valid != VALID_HEAD + VALID_PATH)
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9256 *errormsg = _(e_empty_file_name_for_percent_or_hash_only_works_with_ph);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9257 else
26915
3631d2deb36c patch 8.2.3986: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26909
diff changeset
9258 *errormsg = _(e_evaluates_to_an_empty_string);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9259 result = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9260 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9261 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9262 result = vim_strnsave(result, resultlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9263 vim_free(resultbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9264 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9265 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9267 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9268 * Expand the <sfile> string in "arg".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9269 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9270 * Returns an allocated string, or NULL for any error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9271 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9272 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9273 expand_sfile(char_u *arg)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9274 {
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9275 char *errormsg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9276 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9277 char_u *result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9278 char_u *newres;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9279 char_u *repl;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9280 int srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9281 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9283 result = vim_strsave(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9284 if (result == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9285 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9286
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9287 for (p = result; *p; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9289 if (STRNCMP(p, "<sfile>", 7) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9290 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9291 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9292 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9293 // replace "<sfile>" with the sourced file name, and do ":" stuff
1098
5a1d8468d1fa updated for version 7.0-224
vimboss
parents: 1090
diff changeset
9294 repl = eval_vars(p, result, &srclen, NULL, &errormsg, NULL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9295 if (errormsg != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9297 if (*errormsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9298 emsg(errormsg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9299 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9300 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9301 }
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9302 if (repl == NULL) // no match (cannot happen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9304 p += srclen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9305 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9307 len = (int)STRLEN(result) - srclen + (int)STRLEN(repl) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9308 newres = alloc(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9309 if (newres == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9310 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9311 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9312 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9313 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9314 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9315 mch_memmove(newres, result, (size_t)(p - result));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9316 STRCPY(newres + (p - result), repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9317 len = (int)STRLEN(newres);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9318 STRCAT(newres, p + srclen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9319 vim_free(repl);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9320 vim_free(result);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9321 result = newres;
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9322 p = newres + len; // continue after the match
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9323 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9324 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9326 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9327 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9328
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9329 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
272
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
9330 /*
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
9331 * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
310
04bf54c587f4 updated for version 7.0082
vimboss
parents: 296
diff changeset
9332 * "format" must contain "%s".
272
ddada568db54 updated for version 7.0073
vimboss
parents: 268
diff changeset
9333 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9334 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9335 dialog_msg(char_u *buff, char *format, char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9337 if (fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9338 fname = (char_u *)_("Untitled");
2770
25672ad7f377 updated for version 7.3.161
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
9339 vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9340 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9341 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9342
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9343 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9344 * ":behave {mswin,xterm}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9345 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9346 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9347 ex_behave(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9349 if (STRCMP(eap->arg, "mswin") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9350 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9351 set_option_value((char_u *)"selection", 0L, (char_u *)"exclusive", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9352 set_option_value((char_u *)"selectmode", 0L, (char_u *)"mouse,key", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9353 set_option_value((char_u *)"mousemodel", 0L, (char_u *)"popup", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9354 set_option_value((char_u *)"keymodel", 0L,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9355 (char_u *)"startsel,stopsel", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9357 else if (STRCMP(eap->arg, "xterm") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9359 set_option_value((char_u *)"selection", 0L, (char_u *)"inclusive", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9360 set_option_value((char_u *)"selectmode", 0L, (char_u *)"", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9361 set_option_value((char_u *)"mousemodel", 0L, (char_u *)"extend", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9362 set_option_value((char_u *)"keymodel", 0L, (char_u *)"", 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9363 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9364 else
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
9365 semsg(_(e_invalid_argument_str), eap->arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9366 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9368 static int filetype_detect = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9369 static int filetype_plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9370 static int filetype_indent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9372 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9373 * ":filetype [plugin] [indent] {on,off,detect}"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9374 * on: Load the filetype.vim file to install autocommands for file types.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9375 * off: Load the ftoff.vim file to remove all autocommands for file types.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9376 * plugin on: load filetype.vim and ftplugin.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9377 * plugin off: load ftplugof.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9378 * indent on: load filetype.vim and indent.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9379 * indent off: load indoff.vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9380 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9381 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9382 ex_filetype(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9384 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9385 int plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9386 int indent = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9387
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9388 if (*eap->arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9389 {
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9390 // Print current status.
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15452
diff changeset
9391 smsg("filetype detection:%s plugin:%s indent:%s",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9392 filetype_detect ? "ON" : "OFF",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9393 filetype_plugin ? (filetype_detect ? "ON" : "(on)") : "OFF",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9394 filetype_indent ? (filetype_detect ? "ON" : "(on)") : "OFF");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9395 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9396 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9397
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9398 // Accept "plugin" and "indent" in any order.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9399 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9400 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9401 if (STRNCMP(arg, "plugin", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9402 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9403 plugin = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9404 arg = skipwhite(arg + 6);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9405 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9406 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9407 if (STRNCMP(arg, "indent", 6) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9408 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9409 indent = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9410 arg = skipwhite(arg + 6);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9411 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9413 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9415 if (STRCMP(arg, "on") == 0 || STRCMP(arg, "detect") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9416 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9417 if (*arg == 'o' || !filetype_detect)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9418 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9419 source_runtime((char_u *)FILETYPE_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9420 filetype_detect = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9421 if (plugin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9422 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9423 source_runtime((char_u *)FTPLUGIN_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9424 filetype_plugin = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9425 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9426 if (indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9427 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9428 source_runtime((char_u *)INDENT_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9429 filetype_indent = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9430 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9431 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9432 if (*arg == 'd')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9433 {
9260
ac8180818504 commit https://github.com/vim/vim/commit/1610d052413e0ed664498853a47acc2d677a22d1
Christian Brabandt <cb@256bit.org>
parents: 9230
diff changeset
9434 (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE, NULL);
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 715
diff changeset
9435 do_modelines(0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9436 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9437 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9438 else if (STRCMP(arg, "off") == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9440 if (plugin || indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9442 if (plugin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9443 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9444 source_runtime((char_u *)FTPLUGOF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9445 filetype_plugin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9447 if (indent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9448 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9449 source_runtime((char_u *)INDOFF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9450 filetype_indent = FALSE;
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 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9454 {
8524
2f57bbe870ea commit https://github.com/vim/vim/commit/7f8989dd8a627af2185df381195351a913f3777f
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
9455 source_runtime((char_u *)FTOFF_FILE, DIP_ALL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9456 filetype_detect = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9457 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9459 else
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26861
diff changeset
9460 semsg(_(e_invalid_argument_str), arg);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9461 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9463 /*
11459
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
9464 * ":setfiletype [FALLBACK] {name}"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9465 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9466 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9467 ex_setfiletype(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9469 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
9470 {
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
9471 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
9472
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
9473 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
9474 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
9475
561b76ed9d12 patch 8.0.0613: the conf filetype is used before ftdetect from packages
Christian Brabandt <cb@256bit.org>
parents: 11428
diff changeset
9476 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
9477 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
9478 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
9479 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9481
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9482 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9483 ex_digraphs(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9485 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9486 if (*eap->arg != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9487 putdigraph(eap->arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9488 else
15152
1ef429366fd4 patch 8.1.0586: :digraph output is not easy to read
Bram Moolenaar <Bram@vim.org>
parents: 15125
diff changeset
9489 listdigraphs(eap->forceit);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9490 #else
25294
c626fd34b66f patch 8.2.3184: cannot add a digraph with a leading space
Bram Moolenaar <Bram@vim.org>
parents: 25064
diff changeset
9491 emsg(_(e_no_digraphs_version));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9492 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9493 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9494
13792
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9495 #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9496 void
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9497 set_no_hlsearch(int flag)
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9498 {
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9499 no_hlsearch = flag;
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9500 # ifdef FEAT_EVAL
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9501 set_vim_var_nr(VV_HLSEARCH, !no_hlsearch && p_hls);
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9502 # endif
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9503 }
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9504
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9505 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9506 * ":nohlsearch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9507 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9508 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9509 ex_nohlsearch(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9510 {
13792
0e9b2971d7c3 patch 8.0.1768: SET_NO_HLSEARCH() used in a wrong way
Christian Brabandt <cb@256bit.org>
parents: 13581
diff changeset
9511 set_no_hlsearch(TRUE);
737
59971e227f8c updated for version 7.0222
vimboss
parents: 727
diff changeset
9512 redraw_all_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9514 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9516 #ifdef FEAT_CRYPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9517 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9518 * ":X": Get crypt key
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_X(exarg_T *eap UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9522 {
6353
60659773c73b updated for version 7.4.509
Bram Moolenaar <bram@vim.org>
parents: 6322
diff changeset
9523 crypt_check_current_method();
6122
18ac55444b37 updated for version 7.4.399
Bram Moolenaar <bram@vim.org>
parents: 6116
diff changeset
9524 (void)crypt_get_key(TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9526 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9527
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9528 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9529 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9530 ex_fold(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9531 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9532 if (foldManualAllowed(TRUE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9533 foldCreate(eap->line1, eap->line2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9534 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9535
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9536 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
9537 ex_foldopen(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9538 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9539 opFoldRange(eap->line1, eap->line2, eap->cmdidx == CMD_foldopen,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9540 eap->forceit, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9541 }
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_folddo(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 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9547
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
9548 # ifdef FEAT_CLIPBOARD
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
9549 start_global_changes();
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
9550 # endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
9551
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9552 // First set the marks for all lines closed/open.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9553 for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9554 if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9555 ml_setmarked(lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9556
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9557 // Execute the command on the marked lines.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9558 global_exe(eap->arg);
18779
8f05b3cf8557 patch 8.1.2379: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents: 18763
diff changeset
9559 ml_clearmarked(); // clear rest of the marks
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
9560 # ifdef FEAT_CLIPBOARD
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
9561 end_global_changes();
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
9562 # endif
6116
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
9563 }
7766142fc7d3 updated for version 7.4.396
Bram Moolenaar <bram@vim.org>
parents: 5979
diff changeset
9564 #endif
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9565
19181
94eda51ba9ba patch 8.2.0149: maintaining a Vim9 branch separately is more work
Bram Moolenaar <Bram@vim.org>
parents: 19137
diff changeset
9566 #if defined(FEAT_QUICKFIX) || defined(PROTO)
14550
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9567 /*
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9568 * Returns TRUE if the supplied Ex cmdidx is for a location list command
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9569 * instead of a quickfix command.
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9570 */
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9571 int
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9572 is_loclist_cmd(int cmdidx)
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9573 {
14621
89cc3e7ecb68 patch 8.1.0324: off-by-one error in cmdidx check
Christian Brabandt <cb@256bit.org>
parents: 14591
diff changeset
9574 if (cmdidx < 0 || cmdidx >= CMD_SIZE)
14550
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9575 return FALSE;
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9576 return cmdnames[cmdidx].cmd_name[0] == 'l';
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9577 }
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9578 #endif
60b9b6196644 patch 8.1.0288: quickfix code uses cmdidx too often
Christian Brabandt <cb@256bit.org>
parents: 14538
diff changeset
9579
18297
b0b37bd807ba patch 8.1.2143: cannot see each command even when 'verbose' is set
Bram Moolenaar <Bram@vim.org>
parents: 18139
diff changeset
9580 #if defined(FEAT_TIMERS) || defined(PROTO)
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9581 int
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9582 get_pressedreturn(void)
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9583 {
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9584 return ex_pressedreturn;
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9585 }
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9586
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9587 void
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9588 set_pressedreturn(int val)
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9589 {
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9590 ex_pressedreturn = val;
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9591 }
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12457
diff changeset
9592 #endif