Mercurial > vim
annotate src/autocmd.c @ 31121:cc6522f808de v9.0.0895
patch 9.0.0895: file renamed twice in test, missing feature check
Commit: https://github.com/vim/vim/commit/780154bf7a07813e474105837c2b5998009d9c71
Author: zeertzjq <zeertzjq@outlook.com>
Date: Thu Nov 17 15:23:52 2022 +0000
patch 9.0.0895: file renamed twice in test, missing feature check
Problem: File renamed twice in test; missing feature check.
Solution: Remove a rename() call. Add check for cryptv feature.
(closes #11564)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 17 Nov 2022 16:30:03 +0100 |
parents | df4957f0ccb5 |
children | 981f7bc781bb |
rev | line source |
---|---|
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * autocmd.c: Autocommand related functions |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
16 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
17 * The autocommands are stored in a list for each event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
18 * Autocommands for the same pattern, that are consecutive, are joined |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
19 * together, to avoid having to match the pattern too often. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
20 * The result is an array of Autopat lists, which point to AutoCmd lists: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
21 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
22 * last_autopat[0] -----------------------------+ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
23 * V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
24 * first_autopat[0] --> Autopat.next --> Autopat.next --> NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
25 * Autopat.cmds Autopat.cmds |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
26 * | | |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
27 * V V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
28 * AutoCmd.next AutoCmd.next |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
29 * | | |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
30 * V V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
31 * AutoCmd.next NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
32 * | |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
33 * V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
34 * NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
35 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
36 * last_autopat[1] --------+ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
37 * V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
38 * first_autopat[1] --> Autopat.next --> NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
39 * Autopat.cmds |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
40 * | |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
41 * V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
42 * AutoCmd.next |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
43 * | |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
44 * V |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
45 * NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
46 * etc. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
47 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
48 * The order of AutoCmds is important, this is the order in which they were |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
49 * defined and will have to be executed. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
50 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
51 typedef struct AutoCmd |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
52 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
53 char_u *cmd; // The command to be executed (NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
54 // when command has been removed). |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
55 char once; // "One shot": removed after execution |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
56 char nested; // If autocommands nest here. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
57 char last; // last command in list |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
58 sctx_T script_ctx; // script context where it is defined |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
59 struct AutoCmd *next; // next AutoCmd in list |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
60 } AutoCmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
61 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
62 typedef struct AutoPat |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
63 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
64 struct AutoPat *next; // Next AutoPat in AutoPat list; MUST |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
65 // be the first entry. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
66 char_u *pat; // pattern as typed (NULL when pattern |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
67 // has been removed) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
68 regprog_T *reg_prog; // compiled regprog for pattern |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
69 AutoCmd *cmds; // list of commands to do |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
70 int group; // group ID |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
71 int patlen; // strlen() of pat |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
72 int buflocal_nr; // !=0 for buffer-local AutoPat |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
73 char allow_dirs; // Pattern may match whole path |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
74 char last; // last pattern for apply_autocmds() |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
75 } AutoPat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
76 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
77 static struct event_name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
78 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
79 char *name; // event name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
80 event_T event; // event number |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
81 } event_names[] = |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
83 {"BufAdd", EVENT_BUFADD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 {"BufCreate", EVENT_BUFADD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
85 {"BufDelete", EVENT_BUFDELETE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
86 {"BufEnter", EVENT_BUFENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
87 {"BufFilePost", EVENT_BUFFILEPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
88 {"BufFilePre", EVENT_BUFFILEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
89 {"BufHidden", EVENT_BUFHIDDEN}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
90 {"BufLeave", EVENT_BUFLEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
91 {"BufNew", EVENT_BUFNEW}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
92 {"BufNewFile", EVENT_BUFNEWFILE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
93 {"BufRead", EVENT_BUFREADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
94 {"BufReadCmd", EVENT_BUFREADCMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
95 {"BufReadPost", EVENT_BUFREADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
96 {"BufReadPre", EVENT_BUFREADPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
97 {"BufUnload", EVENT_BUFUNLOAD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
98 {"BufWinEnter", EVENT_BUFWINENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
99 {"BufWinLeave", EVENT_BUFWINLEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
100 {"BufWipeout", EVENT_BUFWIPEOUT}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
101 {"BufWrite", EVENT_BUFWRITEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
102 {"BufWritePost", EVENT_BUFWRITEPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
103 {"BufWritePre", EVENT_BUFWRITEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
104 {"BufWriteCmd", EVENT_BUFWRITECMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
105 {"CmdlineChanged", EVENT_CMDLINECHANGED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
106 {"CmdlineEnter", EVENT_CMDLINEENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
107 {"CmdlineLeave", EVENT_CMDLINELEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
108 {"CmdwinEnter", EVENT_CMDWINENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
109 {"CmdwinLeave", EVENT_CMDWINLEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
110 {"CmdUndefined", EVENT_CMDUNDEFINED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
111 {"ColorScheme", EVENT_COLORSCHEME}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
112 {"ColorSchemePre", EVENT_COLORSCHEMEPRE}, |
16268
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
113 {"CompleteChanged", EVENT_COMPLETECHANGED}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
114 {"CompleteDone", EVENT_COMPLETEDONE}, |
19199
8cbadf7fb9d4
patch 8.2.0158: triggering CompleteDone earlier is not backwards compatible
Bram Moolenaar <Bram@vim.org>
parents:
19075
diff
changeset
|
115 {"CompleteDonePre", EVENT_COMPLETEDONEPRE}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
116 {"CursorHold", EVENT_CURSORHOLD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
117 {"CursorHoldI", EVENT_CURSORHOLDI}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
118 {"CursorMoved", EVENT_CURSORMOVED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
119 {"CursorMovedI", EVENT_CURSORMOVEDI}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
120 {"DiffUpdated", EVENT_DIFFUPDATED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
121 {"DirChanged", EVENT_DIRCHANGED}, |
27617
269f89efb06a
patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents:
27360
diff
changeset
|
122 {"DirChangedPre", EVENT_DIRCHANGEDPRE}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
123 {"EncodingChanged", EVENT_ENCODINGCHANGED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
124 {"ExitPre", EVENT_EXITPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
125 {"FileEncoding", EVENT_ENCODINGCHANGED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
126 {"FileAppendPost", EVENT_FILEAPPENDPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
127 {"FileAppendPre", EVENT_FILEAPPENDPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
128 {"FileAppendCmd", EVENT_FILEAPPENDCMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
129 {"FileChangedShell",EVENT_FILECHANGEDSHELL}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
130 {"FileChangedShellPost",EVENT_FILECHANGEDSHELLPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
131 {"FileChangedRO", EVENT_FILECHANGEDRO}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
132 {"FileReadPost", EVENT_FILEREADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
133 {"FileReadPre", EVENT_FILEREADPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
134 {"FileReadCmd", EVENT_FILEREADCMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
135 {"FileType", EVENT_FILETYPE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
136 {"FileWritePost", EVENT_FILEWRITEPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
137 {"FileWritePre", EVENT_FILEWRITEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
138 {"FileWriteCmd", EVENT_FILEWRITECMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
139 {"FilterReadPost", EVENT_FILTERREADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
140 {"FilterReadPre", EVENT_FILTERREADPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
141 {"FilterWritePost", EVENT_FILTERWRITEPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
142 {"FilterWritePre", EVENT_FILTERWRITEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
143 {"FocusGained", EVENT_FOCUSGAINED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
144 {"FocusLost", EVENT_FOCUSLOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
145 {"FuncUndefined", EVENT_FUNCUNDEFINED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
146 {"GUIEnter", EVENT_GUIENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
147 {"GUIFailed", EVENT_GUIFAILED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
148 {"InsertChange", EVENT_INSERTCHANGE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
149 {"InsertEnter", EVENT_INSERTENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
150 {"InsertLeave", EVENT_INSERTLEAVE}, |
22651
fba5ccf33794
patch 8.2.1874: can't do something just before leaving Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
22470
diff
changeset
|
151 {"InsertLeavePre", EVENT_INSERTLEAVEPRE}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
152 {"InsertCharPre", EVENT_INSERTCHARPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
153 {"MenuPopup", EVENT_MENUPOPUP}, |
25790
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
154 {"ModeChanged", EVENT_MODECHANGED}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
155 {"OptionSet", EVENT_OPTIONSET}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
156 {"QuickFixCmdPost", EVENT_QUICKFIXCMDPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
157 {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
158 {"QuitPre", EVENT_QUITPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
159 {"RemoteReply", EVENT_REMOTEREPLY}, |
18098
a2870e6f5b45
patch 8.1.2044: no easy way to process postponed work
Bram Moolenaar <Bram@vim.org>
parents:
17809
diff
changeset
|
160 {"SafeState", EVENT_SAFESTATE}, |
18102
0d9ec3a2821f
patch 8.1.2046: SafeState may be triggered at the wrong moment
Bram Moolenaar <Bram@vim.org>
parents:
18098
diff
changeset
|
161 {"SafeStateAgain", EVENT_SAFESTATEAGAIN}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
162 {"SessionLoadPost", EVENT_SESSIONLOADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
163 {"ShellCmdPost", EVENT_SHELLCMDPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
164 {"ShellFilterPost", EVENT_SHELLFILTERPOST}, |
20800
e76b83c07bd8
patch 8.2.0952: no simple way to interrupt Vim
Bram Moolenaar <Bram@vim.org>
parents:
20751
diff
changeset
|
165 {"SigUSR1", EVENT_SIGUSR1}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
166 {"SourceCmd", EVENT_SOURCECMD}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
167 {"SourcePre", EVENT_SOURCEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
168 {"SourcePost", EVENT_SOURCEPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
169 {"SpellFileMissing",EVENT_SPELLFILEMISSING}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
170 {"StdinReadPost", EVENT_STDINREADPOST}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
171 {"StdinReadPre", EVENT_STDINREADPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
172 {"SwapExists", EVENT_SWAPEXISTS}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
173 {"Syntax", EVENT_SYNTAX}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
174 {"TabNew", EVENT_TABNEW}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
175 {"TabClosed", EVENT_TABCLOSED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
176 {"TabEnter", EVENT_TABENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
177 {"TabLeave", EVENT_TABLEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
178 {"TermChanged", EVENT_TERMCHANGED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 {"TerminalOpen", EVENT_TERMINALOPEN}, |
18450
507348b211b4
patch 8.1.2219: no autocommand for open window with terminal
Bram Moolenaar <Bram@vim.org>
parents:
18102
diff
changeset
|
180 {"TerminalWinOpen", EVENT_TERMINALWINOPEN}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 {"TermResponse", EVENT_TERMRESPONSE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 {"TextChanged", EVENT_TEXTCHANGED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 {"TextChangedI", EVENT_TEXTCHANGEDI}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 {"TextChangedP", EVENT_TEXTCHANGEDP}, |
30843
82e62fd4eae9
patch 9.0.0756: no autocmd event for changing text in a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
30757
diff
changeset
|
185 {"TextChangedT", EVENT_TEXTCHANGEDT}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 {"User", EVENT_USER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 {"VimEnter", EVENT_VIMENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 {"VimLeave", EVENT_VIMLEAVE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 {"VimLeavePre", EVENT_VIMLEAVEPRE}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 {"WinNew", EVENT_WINNEW}, |
26117
d4d9c7c55a5f
patch 8.2.3591: no event is triggered when closing a window
Bram Moolenaar <Bram@vim.org>
parents:
26042
diff
changeset
|
191 {"WinClosed", EVENT_WINCLOSED}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 {"WinEnter", EVENT_WINENTER}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
193 {"WinLeave", EVENT_WINLEAVE}, |
28375
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
194 {"WinScrolled", EVENT_WINSCROLLED}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
195 {"VimResized", EVENT_VIMRESIZED}, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 {"TextYankPost", EVENT_TEXTYANKPOST}, |
23165
a916fca16d4b
patch 8.2.2128: there is no way to do something on CTRL-Z
Bram Moolenaar <Bram@vim.org>
parents:
22838
diff
changeset
|
197 {"VimSuspend", EVENT_VIMSUSPEND}, |
a916fca16d4b
patch 8.2.2128: there is no way to do something on CTRL-Z
Bram Moolenaar <Bram@vim.org>
parents:
22838
diff
changeset
|
198 {"VimResume", EVENT_VIMRESUME}, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 {NULL, (event_T)0} |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 }; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 static AutoPat *first_autopat[NUM_EVENTS] = |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
204 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
207 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
210 }; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
212 static AutoPat *last_autopat[NUM_EVENTS] = |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
213 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
214 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
215 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
217 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
218 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
219 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
220 }; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
221 |
27752
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27639
diff
changeset
|
222 #define AUGROUP_DEFAULT (-1) // default autocmd group |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27639
diff
changeset
|
223 #define AUGROUP_ERROR (-2) // erroneous autocmd group |
c1d1639b52dd
patch 8.2.4402: missing parenthesis may cause unexpected problems
Bram Moolenaar <Bram@vim.org>
parents:
27639
diff
changeset
|
224 #define AUGROUP_ALL (-3) // all autocmd groups |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
225 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
227 * struct used to keep status while executing autocommands for an event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
228 */ |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
229 struct AutoPatCmd_S |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
230 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
231 AutoPat *curpat; // next AutoPat to examine |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
232 AutoCmd *nextcmd; // next AutoCmd to execute |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
233 int group; // group being used |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
234 char_u *fname; // fname to match with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
235 char_u *sfname; // sfname to match with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
236 char_u *tail; // tail of fname |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
237 event_T event; // current event |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
238 sctx_T script_ctx; // script context where it is defined |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
239 int arg_bufnr; // Initially equal to <abuf>, set to zero when |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
240 // buf is deleted. |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
241 AutoPatCmd_T *next; // chain of active apc-s for auto-invalidation |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
242 }; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
244 static AutoPatCmd_T *active_apc_list = NULL; // stack of active autocommands |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
246 // Macro to loop over all the patterns for an autocmd event |
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
247 #define FOR_ALL_AUTOCMD_PATTERNS(event, ap) \ |
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
248 for ((ap) = first_autopat[(int)(event)]; (ap) != NULL; (ap) = (ap)->next) |
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
249 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
250 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 * augroups stores a list of autocmd group names. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 static garray_T augroups = {0, 0, sizeof(char_u *), 10, NULL}; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
254 #define AUGROUP_NAME(i) (((char_u **)augroups.ga_data)[i]) |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
255 // use get_deleted_augroup() to get this |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 static char_u *deleted_augroup = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 * The ID of the current group. Group 0 is the default one. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 static int current_augroup = AUGROUP_DEFAULT; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
263 static int au_need_clean = FALSE; // need to delete marked patterns |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 static char_u *event_nr2name(event_T event); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 static int au_get_grouparg(char_u **argp); |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
267 static int do_autocmd_event(event_T event, char_u *pat, int once, int nested, char_u *cmd, int forceit, int group, int flags); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap); |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
269 static void auto_next_pat(AutoPatCmd_T *apc, int stop_at_last); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 static int au_find_group(char_u *name); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 static event_T last_event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 static int last_group; |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
274 static int autocmd_blocked = 0; // block all autocmds |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 static char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 get_deleted_augroup(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
278 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 if (deleted_augroup == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 deleted_augroup = (char_u *)_("--Deleted--"); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
281 return deleted_augroup; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
283 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
284 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
285 * Show the autocommands for one AutoPat. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
286 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
287 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 show_autocmd(AutoPat *ap, event_T event) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 AutoCmd *ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 // Check for "got_int" (here and at various places below), which is set |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 // when "q" has been hit for the "--more--" prompt |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 if (got_int) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
295 return; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 if (ap->pat == NULL) // pattern has been removed |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 return; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
299 // Make sure no info referenced by "ap" is cleared, e.g. when a timer |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
300 // clears an augroup. Jump to "theend" after this! |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
301 // "ap->pat" may be cleared anyway. |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
302 ++autocmd_busy; |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
303 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
304 msg_putchar('\n'); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 if (got_int) |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
306 goto theend; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 if (event != last_event || ap->group != last_group) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
308 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 if (ap->group != AUGROUP_DEFAULT) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
310 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 if (AUGROUP_NAME(ap->group) == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 msg_puts_attr((char *)get_deleted_augroup(), HL_ATTR(HLF_E)); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
313 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
314 msg_puts_attr((char *)AUGROUP_NAME(ap->group), HL_ATTR(HLF_T)); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 msg_puts(" "); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 msg_puts_attr((char *)event_nr2name(event), HL_ATTR(HLF_T)); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 last_event = event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 last_group = ap->group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 msg_putchar('\n'); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 if (got_int) |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
322 goto theend; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 } |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
324 |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
325 if (ap->pat == NULL) |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
326 goto theend; // timer might have cleared the pattern or group |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
327 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 msg_col = 4; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
329 msg_outtrans(ap->pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
330 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
331 for (ac = ap->cmds; ac != NULL; ac = ac->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
332 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
333 if (ac->cmd == NULL) // skip removed commands |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
334 continue; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
335 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
336 if (msg_col >= 14) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
337 msg_putchar('\n'); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
338 msg_col = 14; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
339 if (got_int) |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
340 goto theend; |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
341 msg_outtrans(ac->cmd); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
342 #ifdef FEAT_EVAL |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
343 if (p_verbose > 0) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
344 last_set_msg(ac->script_ctx); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
345 #endif |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
346 if (got_int) |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
347 goto theend; |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
348 if (ac->next != NULL) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
349 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
350 msg_putchar('\n'); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
351 if (got_int) |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
352 goto theend; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
353 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
354 } |
31073
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
355 |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
356 theend: |
df4957f0ccb5
patch 9.0.0871: using freed memory when clearing augroup at more prompt
Bram Moolenaar <Bram@vim.org>
parents:
30843
diff
changeset
|
357 --autocmd_busy; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
358 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
359 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
360 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
361 * Mark an autocommand pattern for deletion. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
362 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
363 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
364 au_remove_pat(AutoPat *ap) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
365 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
366 VIM_CLEAR(ap->pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
367 ap->buflocal_nr = -1; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
368 au_need_clean = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
369 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
370 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
371 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
372 * Mark all commands for a pattern for deletion. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
373 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
374 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
375 au_remove_cmds(AutoPat *ap) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
376 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
377 AutoCmd *ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
378 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
379 for (ac = ap->cmds; ac != NULL; ac = ac->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
380 VIM_CLEAR(ac->cmd); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
381 au_need_clean = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
382 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
383 |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
384 // Delete one command from an autocmd pattern. |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
385 static void au_del_cmd(AutoCmd *ac) |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
386 { |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
387 VIM_CLEAR(ac->cmd); |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
388 au_need_clean = TRUE; |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
389 } |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
390 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
392 * Cleanup autocommands and patterns that have been deleted. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
393 * This is only done when not executing autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
394 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
395 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
396 au_cleanup(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 AutoPat *ap, **prev_ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 AutoCmd *ac, **prev_ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
400 event_T event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
401 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
402 if (autocmd_busy || !au_need_clean) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
403 return; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
404 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
405 // loop over all events |
25852
336e2d9924e6
patch 8.2.3460: some type casts are not needed
Bram Moolenaar <Bram@vim.org>
parents:
25790
diff
changeset
|
406 for (event = (event_T)0; (int)event < NUM_EVENTS; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
407 event = (event_T)((int)event + 1)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
408 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
409 // loop over all autocommand patterns |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
410 prev_ap = &(first_autopat[(int)event]); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
411 for (ap = *prev_ap; ap != NULL; ap = *prev_ap) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
412 { |
16221
331dc836f866
patch 8.1.1115: cannot build with older C compiler
Bram Moolenaar <Bram@vim.org>
parents:
16217
diff
changeset
|
413 int has_cmd = FALSE; |
331dc836f866
patch 8.1.1115: cannot build with older C compiler
Bram Moolenaar <Bram@vim.org>
parents:
16217
diff
changeset
|
414 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
415 // loop over all commands for this pattern |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
416 prev_ac = &(ap->cmds); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
417 for (ac = *prev_ac; ac != NULL; ac = *prev_ac) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
418 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
419 // remove the command if the pattern is to be deleted or when |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
420 // the command has been marked for deletion |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
421 if (ap->pat == NULL || ac->cmd == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
422 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
423 *prev_ac = ac->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
424 vim_free(ac->cmd); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
425 vim_free(ac); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
426 } |
16221
331dc836f866
patch 8.1.1115: cannot build with older C compiler
Bram Moolenaar <Bram@vim.org>
parents:
16217
diff
changeset
|
427 else |
331dc836f866
patch 8.1.1115: cannot build with older C compiler
Bram Moolenaar <Bram@vim.org>
parents:
16217
diff
changeset
|
428 { |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
429 has_cmd = TRUE; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 prev_ac = &(ac->next); |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
431 } |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
432 } |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
433 |
16221
331dc836f866
patch 8.1.1115: cannot build with older C compiler
Bram Moolenaar <Bram@vim.org>
parents:
16217
diff
changeset
|
434 if (ap->pat != NULL && !has_cmd) |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
435 // Pattern was not marked for deletion, but all of its |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
436 // commands were. So mark the pattern for deletion. |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
437 au_remove_pat(ap); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
438 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
439 // remove the pattern if it has been marked for deletion |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 if (ap->pat == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
441 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
442 if (ap->next == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 if (prev_ap == &(first_autopat[(int)event])) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 last_autopat[(int)event] = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
446 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 // this depends on the "next" field being the first in |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 // the struct |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
449 last_autopat[(int)event] = (AutoPat *)prev_ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
451 *prev_ap = ap->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
452 vim_regfree(ap->reg_prog); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
453 vim_free(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
454 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
455 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 prev_ap = &(ap->next); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
457 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
459 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
460 au_need_clean = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
461 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
462 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
463 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 * Called when buffer is freed, to remove/invalidate related buffer-local |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
465 * autocmds. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
466 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
467 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 aubuflocal_remove(buf_T *buf) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 { |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
470 AutoPat *ap; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
471 event_T event; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
472 AutoPatCmd_T *apc; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
473 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
474 // invalidate currently executing autocommands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
475 for (apc = active_apc_list; apc; apc = apc->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
476 if (buf->b_fnum == apc->arg_bufnr) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 apc->arg_bufnr = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
479 // invalidate buflocals looping through events |
25852
336e2d9924e6
patch 8.2.3460: some type casts are not needed
Bram Moolenaar <Bram@vim.org>
parents:
25790
diff
changeset
|
480 for (event = (event_T)0; (int)event < NUM_EVENTS; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
481 event = (event_T)((int)event + 1)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
482 // loop over all autocommand patterns |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
483 FOR_ALL_AUTOCMD_PATTERNS(event, ap) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
484 if (ap->buflocal_nr == buf->b_fnum) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
485 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
486 au_remove_pat(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 if (p_verbose >= 6) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
488 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
489 verbose_enter(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
490 smsg(_("auto-removing autocommand: %s <buffer=%d>"), |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
491 event_nr2name(event), buf->b_fnum); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
492 verbose_leave(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
493 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
495 au_cleanup(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
496 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
497 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
498 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
499 * Add an autocmd group name. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
500 * Return its ID. Returns AUGROUP_ERROR (< 0) for error. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
501 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
502 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
503 au_new_group(char_u *name) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
504 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
505 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
506 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
507 i = au_find_group(name); |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
508 if (i != AUGROUP_ERROR) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
509 return i; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
510 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
511 // the group doesn't exist yet, add it. First try using a free entry. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
512 for (i = 0; i < augroups.ga_len; ++i) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
513 if (AUGROUP_NAME(i) == NULL) |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
514 break; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
515 if (i == augroups.ga_len && ga_grow(&augroups, 1) == FAIL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
516 return AUGROUP_ERROR; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
517 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
518 AUGROUP_NAME(i) = vim_strsave(name); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
519 if (AUGROUP_NAME(i) == NULL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
520 return AUGROUP_ERROR; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
521 if (i == augroups.ga_len) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
522 ++augroups.ga_len; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
523 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
524 return i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
525 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
526 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
527 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
528 au_del_group(char_u *name) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
529 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
530 int i; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
531 event_T event; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
532 AutoPat *ap; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
533 int in_use = FALSE; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
534 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
535 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
536 i = au_find_group(name); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
537 if (i == AUGROUP_ERROR) // the group doesn't exist |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
538 { |
26863
6ee19c6ae8a2
patch 8.2.3960: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26861
diff
changeset
|
539 semsg(_(e_no_such_group_str), name); |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
540 return; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
541 } |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
542 if (i == current_augroup) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
543 { |
26863
6ee19c6ae8a2
patch 8.2.3960: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26861
diff
changeset
|
544 emsg(_(e_cannot_delete_current_group)); |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
545 return; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
546 } |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
547 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
548 for (event = (event_T)0; (int)event < NUM_EVENTS; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
549 event = (event_T)((int)event + 1)) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
550 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
551 FOR_ALL_AUTOCMD_PATTERNS(event, ap) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
552 if (ap->group == i && ap->pat != NULL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
553 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
554 give_warning((char_u *)_("W19: Deleting augroup that is still in use"), TRUE); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
555 in_use = TRUE; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
556 event = NUM_EVENTS; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
557 break; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
558 } |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
559 } |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
560 vim_free(AUGROUP_NAME(i)); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
561 if (in_use) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
562 AUGROUP_NAME(i) = get_deleted_augroup(); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
563 else |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
564 AUGROUP_NAME(i) = NULL; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
565 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
566 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
567 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
568 * Find the ID of an autocmd group name. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
569 * Return its ID. Returns AUGROUP_ERROR (< 0) for error. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
570 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
571 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 au_find_group(char_u *name) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
573 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
576 for (i = 0; i < augroups.ga_len; ++i) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
577 if (AUGROUP_NAME(i) != NULL && AUGROUP_NAME(i) != get_deleted_augroup() |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
578 && STRCMP(AUGROUP_NAME(i), name) == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
579 return i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
580 return AUGROUP_ERROR; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
581 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 * Return TRUE if augroup "name" exists. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
586 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
587 au_has_group(char_u *name) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
588 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
589 return au_find_group(name) != AUGROUP_ERROR; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
591 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
592 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 * ":augroup {name}". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
595 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
596 do_augroup(char_u *arg, int del_group) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
597 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
598 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
599 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
600 if (del_group) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
601 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
602 if (*arg == NUL) |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26863
diff
changeset
|
603 emsg(_(e_argument_required)); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
604 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
605 au_del_group(arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
606 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
607 else if (STRICMP(arg, "end") == 0) // ":aug end": back to group 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
608 current_augroup = AUGROUP_DEFAULT; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
609 else if (*arg) // ":aug xxx": switch to group xxx |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
610 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
611 i = au_new_group(arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
612 if (i != AUGROUP_ERROR) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
613 current_augroup = i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 else // ":aug": list the group names |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
616 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 msg_start(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
618 for (i = 0; i < augroups.ga_len; ++i) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
619 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
620 if (AUGROUP_NAME(i) != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 msg_puts((char *)AUGROUP_NAME(i)); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 msg_puts(" "); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
625 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
626 msg_clr_eos(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
627 msg_end(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
628 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
629 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
630 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
631 #if defined(EXITFREE) || defined(PROTO) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
632 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 free_all_autocmds(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
636 char_u *s; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
637 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
638 for (current_augroup = -1; current_augroup < augroups.ga_len; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 ++current_augroup) |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
640 do_autocmd(NULL, (char_u *)"", TRUE); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
642 for (i = 0; i < augroups.ga_len; ++i) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
643 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 s = ((char_u **)(augroups.ga_data))[i]; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 if (s != get_deleted_augroup()) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 vim_free(s); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
647 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
648 ga_clear(&augroups); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
649 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
650 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
651 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
652 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 * Return the event number for event name "start". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
654 * Return NUM_EVENTS if the event name was not found. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
655 * Return a pointer to the next event name in "end". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
656 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
657 static event_T |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
658 event_name2nr(char_u *start, char_u **end) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
660 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
661 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
662 int len; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
664 // the event name ends with end of line, '|', a blank or a comma |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 for (p = start; *p && !VIM_ISWHITE(*p) && *p != ',' && *p != '|'; ++p) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 ; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
667 for (i = 0; event_names[i].name != NULL; ++i) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
669 len = (int)STRLEN(event_names[i].name); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 if (len == p - start && STRNICMP(event_names[i].name, start, len) == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
671 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 if (*p == ',') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
674 ++p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
675 *end = p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 if (event_names[i].name == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
677 return NUM_EVENTS; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 return event_names[i].event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
679 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
680 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
681 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 * Return the name for event "event". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
683 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
684 static char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
685 event_nr2name(event_T event) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
686 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
687 int i; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
688 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
689 for (i = 0; event_names[i].name != NULL; ++i) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
690 if (event_names[i].event == event) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
691 return (char_u *)event_names[i].name; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
692 return (char_u *)"Unknown"; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
693 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
694 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
696 * Scan over the events. "*" stands for all events. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
697 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
698 static char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
699 find_end_event( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
700 char_u *arg, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
701 int have_group) // TRUE when group name was found |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
702 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
703 char_u *pat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
704 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
705 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
706 if (*arg == '*') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
707 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
708 if (arg[1] && !VIM_ISWHITE(arg[1])) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
709 { |
26861
df2de1e63de0
patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26715
diff
changeset
|
710 semsg(_(e_illegal_character_after_star_str), arg); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
711 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
712 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
713 pat = arg + 1; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
714 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
715 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
716 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
717 for (pat = arg; *pat && *pat != '|' && !VIM_ISWHITE(*pat); pat = p) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 { |
25852
336e2d9924e6
patch 8.2.3460: some type casts are not needed
Bram Moolenaar <Bram@vim.org>
parents:
25790
diff
changeset
|
719 if ((int)event_name2nr(pat, &p) >= NUM_EVENTS) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
720 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
721 if (have_group) |
26861
df2de1e63de0
patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26715
diff
changeset
|
722 semsg(_(e_no_such_event_str), pat); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 else |
26861
df2de1e63de0
patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26715
diff
changeset
|
724 semsg(_(e_no_such_group_or_event_str), pat); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
725 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
726 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
727 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
728 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
729 return pat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
730 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
731 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
732 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 * Return TRUE if "event" is included in 'eventignore'. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
734 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
735 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
736 event_ignored(event_T event) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
737 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
738 char_u *p = p_ei; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
739 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
740 while (*p != NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
741 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
742 if (STRNICMP(p, "all", 3) == 0 && (p[3] == NUL || p[3] == ',')) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
743 return TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
744 if (event_name2nr(p, &p) == event) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
745 return TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
746 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
747 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
748 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
750 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
751 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
752 * Return OK when the contents of p_ei is valid, FAIL otherwise. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
753 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
754 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
755 check_ei(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
756 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
757 char_u *p = p_ei; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
758 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
759 while (*p) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
760 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
761 if (STRNICMP(p, "all", 3) == 0 && (p[3] == NUL || p[3] == ',')) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
762 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
763 p += 3; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
764 if (*p == ',') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
765 ++p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
766 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 else if (event_name2nr(p, &p) == NUM_EVENTS) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
768 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
769 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
770 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
771 return OK; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
772 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
773 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 # if defined(FEAT_SYN_HL) || defined(PROTO) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
776 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 * Add "what" to 'eventignore' to skip loading syntax highlighting for every |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
778 * buffer loaded into the window. "what" must start with a comma. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
779 * Returns the old value of 'eventignore' in allocated memory. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
780 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
781 char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 au_event_disable(char *what) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
784 char_u *new_ei; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 char_u *save_ei; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
787 save_ei = vim_strsave(p_ei); |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
788 if (save_ei == NULL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
789 return NULL; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
790 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
791 new_ei = vim_strnsave(p_ei, STRLEN(p_ei) + STRLEN(what)); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
792 if (new_ei == NULL) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
793 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
794 vim_free(save_ei); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
795 return NULL; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
796 } |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
797 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
798 if (*what == ',' && *p_ei == NUL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
799 STRCPY(new_ei, what + 1); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
800 else |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
801 STRCAT(new_ei, what); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
802 set_string_option_direct((char_u *)"ei", -1, new_ei, |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
803 OPT_FREE, SID_NONE); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
804 vim_free(new_ei); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
805 return save_ei; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
806 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
808 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
809 au_event_restore(char_u *old_ei) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
810 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
811 if (old_ei != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
812 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
813 set_string_option_direct((char_u *)"ei", -1, old_ei, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 OPT_FREE, SID_NONE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
815 vim_free(old_ei); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 } |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
818 # endif // FEAT_SYN_HL |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
819 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
820 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
821 * do_autocmd() -- implements the :autocmd command. Can be used in the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 * following ways: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
824 * :autocmd <event> <pat> <cmd> Add <cmd> to the list of commands that |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
825 * will be automatically executed for <event> |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
826 * when editing a file matching <pat>, in |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 * the current group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 * :autocmd <event> <pat> Show the autocommands associated with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 * <event> and <pat>. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
830 * :autocmd <event> Show the autocommands associated with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 * <event>. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
832 * :autocmd Show all autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
833 * :autocmd! <event> <pat> <cmd> Remove all autocommands associated with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
834 * <event> and <pat>, and add the command |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
835 * <cmd>, for the current group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
836 * :autocmd! <event> <pat> Remove all autocommands associated with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
837 * <event> and <pat> for the current group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
838 * :autocmd! <event> Remove all autocommands associated with |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
839 * <event> for the current group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
840 * :autocmd! Remove ALL autocommands for the current |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
841 * group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
842 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
843 * Multiple events and patterns may be given separated by commas. Here are |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
844 * some examples: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
845 * :autocmd bufread,bufenter *.c,*.h set tw=0 smartindent noic |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
846 * :autocmd bufleave * set tw=79 nosmartindent ic infercase |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
847 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
848 * :autocmd * *.c show all autocommands for *.c files. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
849 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
850 * Mostly a {group} argument can optionally appear before <event>. |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
851 * "eap" can be NULL. |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
852 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
853 void |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
854 do_autocmd(exarg_T *eap, char_u *arg_in, int forceit) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
855 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 char_u *arg = arg_in; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
857 char_u *pat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
858 char_u *envpat = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
859 char_u *cmd; |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
860 int cmd_need_free = FALSE; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
861 event_T event; |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
862 char_u *tofree = NULL; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
863 int nested = FALSE; |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
864 int once = FALSE; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
865 int group; |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
866 int i; |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
867 int flags = 0; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
868 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
869 if (*arg == '|') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
870 { |
26189
36a1a04fcd9f
patch 8.2.3626: "au! event" cannot be followed by another command
Bram Moolenaar <Bram@vim.org>
parents:
26117
diff
changeset
|
871 eap->nextcmd = arg + 1; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
872 arg = (char_u *)""; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
873 group = AUGROUP_ALL; // no argument, use all groups |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
874 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
875 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
876 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
877 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
878 * Check for a legal group name. If not, use AUGROUP_ALL. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
879 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
880 group = au_get_grouparg(&arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
881 if (arg == NULL) // out of memory |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
882 return; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
883 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
884 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
885 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 * Scan over the events. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
887 * If we find an illegal name, return here, don't do anything. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
888 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
889 pat = find_end_event(arg, group != AUGROUP_ALL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 if (pat == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
891 return; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
892 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 pat = skipwhite(pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
894 if (*pat == '|') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
895 { |
26189
36a1a04fcd9f
patch 8.2.3626: "au! event" cannot be followed by another command
Bram Moolenaar <Bram@vim.org>
parents:
26117
diff
changeset
|
896 eap->nextcmd = pat + 1; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
897 pat = (char_u *)""; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
898 cmd = (char_u *)""; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
899 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
900 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
902 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
903 * Scan over the pattern. Put a NUL at the end. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
904 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 cmd = pat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
906 while (*cmd && (!VIM_ISWHITE(*cmd) || cmd[-1] == '\\')) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
907 cmd++; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
908 if (*cmd) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
909 *cmd++ = NUL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
910 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
911 // Expand environment variables in the pattern. Set 'shellslash', we |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
912 // want forward slashes here. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
913 if (vim_strchr(pat, '$') != NULL || vim_strchr(pat, '~') != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
914 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
915 #ifdef BACKSLASH_IN_FILENAME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 int p_ssl_save = p_ssl; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
917 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
918 p_ssl = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
919 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 envpat = expand_env_save(pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
921 #ifdef BACKSLASH_IN_FILENAME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
922 p_ssl = p_ssl_save; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
923 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
924 if (envpat != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
925 pat = envpat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
926 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
927 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
928 cmd = skipwhite(cmd); |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
929 for (i = 0; i < 2; i++) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
930 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
931 if (*cmd == NUL) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
932 continue; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
933 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
934 // Check for "++once" flag. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
935 if (STRNCMP(cmd, "++once", 6) == 0 && VIM_ISWHITE(cmd[6])) |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
936 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
937 if (once) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
938 semsg(_(e_duplicate_argument_str), "++once"); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
939 once = TRUE; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
940 cmd = skipwhite(cmd + 6); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
941 } |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
942 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
943 // Check for "++nested" flag. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
944 if ((STRNCMP(cmd, "++nested", 8) == 0 && VIM_ISWHITE(cmd[8]))) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
945 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
946 if (nested) |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
947 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
948 semsg(_(e_duplicate_argument_str), "++nested"); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
949 return; |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
950 } |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
951 nested = TRUE; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
952 cmd = skipwhite(cmd + 8); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
953 } |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
954 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
955 // Check for the old "nested" flag in legacy script. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
956 if (STRNCMP(cmd, "nested", 6) == 0 && VIM_ISWHITE(cmd[6])) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
957 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
958 if (in_vim9script()) |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
959 { |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
960 // If there ever is a :nested command this error should |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
961 // be removed and "nested" accepted as the start of the |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
962 // command. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
963 emsg(_(e_invalid_command_nested_did_you_mean_plusplus_nested)); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
964 return; |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
965 } |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
966 if (nested) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
967 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
968 semsg(_(e_duplicate_argument_str), "nested"); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
969 return; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
970 } |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
971 nested = TRUE; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
972 cmd = skipwhite(cmd + 6); |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
973 } |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
974 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
975 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
976 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
977 * Find the start of the commands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 * Expand <sfile> in it. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
980 if (*cmd != NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
981 { |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
982 if (eap != NULL) |
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
983 // Read a {} block if it follows. |
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
984 cmd = may_get_cmd_block(eap, cmd, &tofree, &flags); |
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
985 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 cmd = expand_sfile(cmd); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
987 if (cmd == NULL) // some error |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 return; |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
989 cmd_need_free = TRUE; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
990 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
994 * Print header when showing autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
995 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
996 if (!forceit && *cmd == NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
997 // Highlight title |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
998 msg_puts_title(_("\n--- Autocommands ---")); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
999 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1001 * Loop over the events. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1002 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 last_event = (event_T)-1; // for listing the event name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1004 last_group = AUGROUP_ERROR; // for listing the group name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 if (*arg == '*' || *arg == NUL || *arg == '|') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1006 { |
26715
af919f98c7e1
patch 8.2.3886: can define autocmd for every event by using "au!"
Bram Moolenaar <Bram@vim.org>
parents:
26616
diff
changeset
|
1007 if (*cmd != NUL) |
23758
97296182d336
patch 8.2.2420: too many problems with using all autocommand events
Bram Moolenaar <Bram@vim.org>
parents:
23390
diff
changeset
|
1008 emsg(_(e_cannot_define_autocommands_for_all_events)); |
97296182d336
patch 8.2.2420: too many problems with using all autocommand events
Bram Moolenaar <Bram@vim.org>
parents:
23390
diff
changeset
|
1009 else |
25852
336e2d9924e6
patch 8.2.3460: some type casts are not needed
Bram Moolenaar <Bram@vim.org>
parents:
25790
diff
changeset
|
1010 for (event = (event_T)0; (int)event < NUM_EVENTS; |
23758
97296182d336
patch 8.2.2420: too many problems with using all autocommand events
Bram Moolenaar <Bram@vim.org>
parents:
23390
diff
changeset
|
1011 event = (event_T)((int)event + 1)) |
97296182d336
patch 8.2.2420: too many problems with using all autocommand events
Bram Moolenaar <Bram@vim.org>
parents:
23390
diff
changeset
|
1012 if (do_autocmd_event(event, pat, |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1013 once, nested, cmd, forceit, group, flags) == FAIL) |
23758
97296182d336
patch 8.2.2420: too many problems with using all autocommand events
Bram Moolenaar <Bram@vim.org>
parents:
23390
diff
changeset
|
1014 break; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 while (*arg && *arg != '|' && !VIM_ISWHITE(*arg)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 if (do_autocmd_event(event_name2nr(arg, &arg), pat, |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1020 once, nested, cmd, forceit, group, flags) == FAIL) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1024 if (cmd_need_free) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 vim_free(cmd); |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1026 vim_free(tofree); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 vim_free(envpat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 * Find the group ID in a ":autocmd" or ":doautocmd" argument. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 * The "argp" argument is advanced to the following argument. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1034 * Returns the group ID, AUGROUP_ERROR for error (out of memory). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1036 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 au_get_grouparg(char_u **argp) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 char_u *group_name; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 char_u *arg = *argp; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 int group = AUGROUP_ALL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 for (p = arg; *p && !VIM_ISWHITE(*p) && *p != '|'; ++p) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 ; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 if (p > arg) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 { |
20751
d9a2e5dcfd9f
patch 8.2.0928: many type casts are used for vim_strnsave()
Bram Moolenaar <Bram@vim.org>
parents:
19888
diff
changeset
|
1048 group_name = vim_strnsave(arg, p - arg); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 if (group_name == NULL) // out of memory |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 return AUGROUP_ERROR; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 group = au_find_group(group_name); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 if (group == AUGROUP_ERROR) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 group = AUGROUP_ALL; // no match, use all groups |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1054 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 *argp = skipwhite(p); // match, skip over group name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 vim_free(group_name); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 return group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1059 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 * do_autocmd() for one event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 * If *pat == NUL do for all patterns. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1064 * If *cmd == NUL show entries. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 * If forceit == TRUE delete entries. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 * If group is not AUGROUP_ALL, only use this group. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1068 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 do_autocmd_event( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 event_T event, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 char_u *pat, |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
1072 int once, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1073 int nested, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1074 char_u *cmd, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1075 int forceit, |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1076 int group, |
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1077 int flags) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1078 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1079 AutoPat *ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1080 AutoPat **prev_ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1081 AutoCmd *ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 AutoCmd **prev_ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1083 int brace_level; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1084 char_u *endpat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1085 int findgroup; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1086 int allgroups; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1087 int patlen; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1088 int is_buflocal; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1089 int buflocal_nr; |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
1090 char_u buflocal_pat[25]; // for "<buffer=X>" |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 if (group == AUGROUP_ALL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1093 findgroup = current_augroup; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1095 findgroup = group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 allgroups = (group == AUGROUP_ALL && !forceit && *cmd == NUL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1098 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 * Show or delete all patterns for an event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 if (*pat == NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1102 { |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
1103 FOR_ALL_AUTOCMD_PATTERNS(event, ap) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1105 if (forceit) // delete the AutoPat, if it's in the current group |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1106 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1107 if (ap->group == findgroup) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1108 au_remove_pat(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 else if (group == AUGROUP_ALL || ap->group == group) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1111 show_autocmd(ap, event); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1114 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1115 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1116 * Loop through all the specified patterns. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1117 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 for ( ; *pat; pat = (*endpat == ',' ? endpat + 1 : endpat)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1119 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1120 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 * Find end of the pattern. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1122 * Watch out for a comma in braces, like "*.\{obj,o\}". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1123 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1124 brace_level = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1125 for (endpat = pat; *endpat && (*endpat != ',' || brace_level |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1126 || (endpat > pat && endpat[-1] == '\\')); ++endpat) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1127 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1128 if (*endpat == '{') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 brace_level++; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1130 else if (*endpat == '}') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1131 brace_level--; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1132 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1133 if (pat == endpat) // ignore single comma |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1134 continue; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1135 patlen = (int)(endpat - pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1136 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1138 * detect special <buflocal[=X]> buffer-local patterns |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1140 is_buflocal = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 buflocal_nr = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1142 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1143 if (patlen >= 8 && STRNCMP(pat, "<buffer", 7) == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 && pat[patlen - 1] == '>') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 // "<buffer...>": Error will be printed only for addition. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 // printing and removing will proceed silently. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 is_buflocal = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 if (patlen == 8) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 // "<buffer>" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 buflocal_nr = curbuf->b_fnum; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 else if (patlen > 9 && pat[7] == '=') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 if (patlen == 13 && STRNICMP(pat, "<buffer=abuf>", 13) == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 // "<buffer=abuf>" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1156 buflocal_nr = autocmd_bufnr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 else if (skipdigits(pat + 8) == pat + patlen - 1) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 // "<buffer=123>" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 buflocal_nr = atoi((char *)pat + 8); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 if (is_buflocal) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 // normalize pat into standard "<buffer>#N" form |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1166 sprintf((char *)buflocal_pat, "<buffer=%d>", buflocal_nr); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1167 pat = buflocal_pat; // can modify pat and patlen |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1168 patlen = (int)STRLEN(buflocal_pat); // but not endpat |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1171 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1172 * Find AutoPat entries with this pattern. When adding a command it |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 * always goes at or after the last one, so start at the end. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1175 if (!forceit && *cmd != NUL && last_autopat[(int)event] != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1176 prev_ap = &last_autopat[(int)event]; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 prev_ap = &first_autopat[(int)event]; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 while ((ap = *prev_ap) != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 if (ap->pat != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1182 { |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
1183 /* |
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
1184 * Accept a pattern when: |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 * - a group was specified and it's that group, or a group was |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 * not specified and it's the current group, or a group was |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 * not specified and we are listing |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 * - the length of the pattern matches |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1189 * - the pattern matches. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 * For <buffer[=X]>, this condition works because we normalize |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 * all buffer-local patterns. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 if ((allgroups || ap->group == findgroup) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 && ap->patlen == patlen |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 && STRNCMP(pat, ap->pat, patlen) == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1198 * Remove existing autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 * If adding any new autocmd's for this AutoPat, don't |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1200 * delete the pattern from the autopat list, append to |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 * this list. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1202 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 if (forceit) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 if (*cmd != NUL && ap->next == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1206 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1207 au_remove_cmds(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1208 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1209 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1210 au_remove_pat(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1211 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1213 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 * Show autocmd's for this autopat, or buflocals <buffer=X> |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1215 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1216 else if (*cmd == NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1217 show_autocmd(ap, event); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1220 * Add autocmd to this autopat, if it's the last one. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1221 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1222 else if (ap->next == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1223 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1224 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 prev_ap = &ap->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1227 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 * Add a new command. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 if (*cmd != NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1234 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 * If the pattern we want to add a command to does appear at the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1236 * end of the list (or not is not in the list at all), add the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 * pattern at the end of the list. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1238 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1239 if (ap == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 { |
18757
c469e1930456
patch 8.1.2368: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18498
diff
changeset
|
1241 // refuse to add buffer-local ap if buffer number is invalid |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 if (is_buflocal && (buflocal_nr == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 || buflist_findnr(buflocal_nr) == NULL)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 { |
26863
6ee19c6ae8a2
patch 8.2.3960: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26861
diff
changeset
|
1245 semsg(_(e_buffer_nr_invalid_buffer_number), buflocal_nr); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1246 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1248 |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16778
diff
changeset
|
1249 ap = ALLOC_ONE(AutoPat); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 if (ap == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1252 ap->pat = vim_strnsave(pat, patlen); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 ap->patlen = patlen; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1254 if (ap->pat == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 vim_free(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 |
26042
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1260 #ifdef FEAT_EVAL |
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1261 // need to initialize last_mode for the first ModeChanged |
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1262 // autocmd |
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1263 if (event == EVENT_MODECHANGED && !has_modechanged()) |
28397
d1702731786c
patch 8.2.4723: the ModeChanged autocmd event is inefficient
Bram Moolenaar <Bram@vim.org>
parents:
28375
diff
changeset
|
1264 get_mode(last_mode); |
26042
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1265 #endif |
28375
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1266 // Initialize the fields checked by the WinScrolled trigger to |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1267 // stop it from firing right after the first autocmd is defined. |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1268 if (event == EVENT_WINSCROLLED && !has_winscrolled()) |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1269 { |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1270 curwin->w_last_topline = curwin->w_topline; |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1271 curwin->w_last_leftcol = curwin->w_leftcol; |
29932
27cb0eed6aef
patch 9.0.0304: WinScrolled is not triggered when only skipcol changes
Bram Moolenaar <Bram@vim.org>
parents:
29442
diff
changeset
|
1272 curwin->w_last_skipcol = curwin->w_skipcol; |
28375
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1273 curwin->w_last_width = curwin->w_width; |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1274 curwin->w_last_height = curwin->w_height; |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1275 } |
26042
6b39ab99e367
patch 8.2.3555: ModeChanged is not triggered on every mode change
Bram Moolenaar <Bram@vim.org>
parents:
25852
diff
changeset
|
1276 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 if (is_buflocal) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 ap->buflocal_nr = buflocal_nr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 ap->reg_prog = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 char_u *reg_pat; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 ap->buflocal_nr = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1287 reg_pat = file_pat_to_reg_pat(pat, endpat, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 &ap->allow_dirs, TRUE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 if (reg_pat != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1290 ap->reg_prog = vim_regcomp(reg_pat, RE_MAGIC); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 vim_free(reg_pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 if (reg_pat == NULL || ap->reg_prog == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 vim_free(ap->pat); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1295 vim_free(ap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1299 ap->cmds = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1300 *prev_ap = ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 last_autopat[(int)event] = ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 ap->next = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1303 if (group == AUGROUP_ALL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 ap->group = current_augroup; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 ap->group = group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1307 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1310 * Add the autocmd at the end of the AutoCmd list. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 prev_ac = &(ap->cmds); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 while ((ac = *prev_ac) != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 prev_ac = &ac->next; |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16778
diff
changeset
|
1315 ac = ALLOC_ONE(AutoCmd); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 if (ac == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1318 ac->cmd = vim_strsave(cmd); |
23390
9a5f12b36273
patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
23165
diff
changeset
|
1319 ac->script_ctx = current_sctx; |
25463
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1320 if (flags & UC_VIM9) |
05f9e8f2016c
patch 8.2.3268: cannot use a block with :autocmd like with :command
Bram Moolenaar <Bram@vim.org>
parents:
24309
diff
changeset
|
1321 ac->script_ctx.sc_version = SCRIPT_VERSION_VIM9; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 #ifdef FEAT_EVAL |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
1323 ac->script_ctx.sc_lnum += SOURCING_LNUM; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 if (ac->cmd == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 vim_free(ac); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 ac->next = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 *prev_ac = ac; |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
1332 ac->once = once; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 ac->nested = nested; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1334 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 au_cleanup(); // may really delete removed patterns/commands now |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 return OK; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1342 * Implementation of ":doautocmd [group] event [fname]". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1343 * Return OK for success, FAIL for failure; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1346 do_doautocmd( |
25539
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1347 char_u *arg_start, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1348 int do_msg, // give message for no matching autocmds? |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 int *did_something) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 { |
25539
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1351 char_u *arg = arg_start; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 char_u *fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 int nothing_done = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 int group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 if (did_something != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 *did_something = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 * Check for a legal group name. If not, use AUGROUP_ALL. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1361 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 group = au_get_grouparg(&arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 if (arg == NULL) // out of memory |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 if (*arg == '*') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 { |
26861
df2de1e63de0
patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26715
diff
changeset
|
1368 emsg(_(e_cant_execute_autocommands_for_all_events)); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 * Scan over the events. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 * If we find an illegal name, return here, don't do anything. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1375 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 fname = find_end_event(arg, group != AUGROUP_ALL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 if (fname == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 return FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1379 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 fname = skipwhite(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1382 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 * Loop over the events. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 while (*arg && !ends_excmd(*arg) && !VIM_ISWHITE(*arg)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 if (apply_autocmds_group(event_name2nr(arg, &arg), |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 fname, NULL, TRUE, group, curbuf, NULL)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 nothing_done = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 |
25539
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1390 if (nothing_done && do_msg |
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1391 #ifdef FEAT_EVAL |
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1392 && !aborting() |
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1393 #endif |
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1394 ) |
ddc223a7f5f5
patch 8.2.3306: unexpected "No matching autocommands"
Bram Moolenaar <Bram@vim.org>
parents:
25463
diff
changeset
|
1395 smsg(_("No matching autocommands: %s"), arg_start); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 if (did_something != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 *did_something = !nothing_done; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 return aborting() ? FAIL : OK; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 #else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 return OK; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1406 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 * ":doautoall": execute autocommands for each loaded buffer. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1408 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 ex_doautoall(exarg_T *eap) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 { |
24110
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1412 int retval = OK; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 aco_save_T aco; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 buf_T *buf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 bufref_T bufref; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 char_u *arg = eap->arg; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1417 int call_do_modelines = check_nomodeline(&arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 int did_aucmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 * This is a bit tricky: For some commands curwin->w_buffer needs to be |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1422 * equal to curbuf, but for some buffers there may not be a window. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 * So we change the buffer for the current window for a moment. This |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 * gives problems when the autocommands make changes to the list of |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 * buffers or windows... |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 FOR_ALL_BUFFERS(buf) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1428 { |
24110
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1429 // Only do loaded buffers and skip the current buffer, it's done last. |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1430 if (buf->b_ml.ml_mfp == NULL || buf == curbuf) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1431 continue; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1432 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1433 // find a window for this buffer and save some values |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1434 aucmd_prepbuf(&aco, buf); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1435 set_bufref(&bufref, buf); |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1436 |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1437 // execute the autocommands for this buffer |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1438 retval = do_doautocmd(arg, FALSE, &did_aucmd); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1440 if (call_do_modelines && did_aucmd) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1441 // Execute the modeline settings, but don't set window-local |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1442 // options if we are using the current window for another |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1443 // buffer. |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1444 do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1446 // restore the current window |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1447 aucmd_restbuf(&aco); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 |
30465
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1449 // stop if there is some error or buffer was deleted |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1450 if (retval == FAIL || !bufref_valid(&bufref)) |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1451 { |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1452 retval = FAIL; |
b3367a7a3914
patch 9.0.0568: autocmd code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
29932
diff
changeset
|
1453 break; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1456 |
24110
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1457 // Execute autocommands for the current buffer last. |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1458 if (retval == OK) |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1459 { |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1460 do_doautocmd(arg, FALSE, &did_aucmd); |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1461 if (call_do_modelines && did_aucmd) |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1462 do_modelines(0); |
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
1463 } |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1464 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1465 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1466 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1467 * Check *argp for <nomodeline>. When it is present return FALSE, otherwise |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 * return TRUE and advance *argp to after it. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1469 * Thus return TRUE when do_modelines() should be called. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1470 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1471 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1472 check_nomodeline(char_u **argp) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1473 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1474 if (STRNCMP(*argp, "<nomodeline>", 12) == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1475 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1476 *argp = skipwhite(*argp + 12); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1477 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 return TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1480 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1481 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1482 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1483 * Prepare for executing autocommands for (hidden) buffer "buf". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1484 * Search for a visible window containing the current buffer. If there isn't |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1485 * one then use "aucmd_win". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 * Set "curbuf" and "curwin" to match "buf". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1487 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1488 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1489 aucmd_prepbuf( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 aco_save_T *aco, // structure to save values in |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 buf_T *buf) // new curbuf |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1493 win_T *win; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 int save_ea; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1495 #ifdef FEAT_AUTOCHDIR |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 int save_acd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 // Find a window that is for the new buffer |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1500 if (buf == curbuf) // be quick when buf is curbuf |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 win = curwin; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1502 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1503 FOR_ALL_WINDOWS(win) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 if (win->w_buffer == buf) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1505 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1507 // Allocate "aucmd_win" when needed. If this fails (out of memory) fall |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1508 // back to using the current window. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 if (win == NULL && aucmd_win == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1510 { |
16778
eda4d65f232c
patch 8.1.1391: no popup window support
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
1511 aucmd_win = win_alloc_popup_win(); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1512 if (aucmd_win == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1513 win = curwin; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1514 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 if (win == NULL && aucmd_win_used) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 // Strange recursive autocommand, fall back to using the current |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1517 // window. Expect a few side effects... |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 win = curwin; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1519 |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1520 aco->save_curwin_id = curwin->w_id; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1521 aco->save_curbuf = curbuf; |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1522 aco->save_prevwin_id = prevwin == NULL ? 0 : prevwin->w_id; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1523 if (win != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1524 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1525 // There is a window for "buf" in the current tab page, make it the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1526 // curwin. This is preferred, it has the least side effects (esp. if |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1527 // "buf" is curbuf). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1528 aco->use_aucmd_win = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1529 curwin = win; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1530 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1531 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1532 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1533 // There is no window for "buf", use "aucmd_win". To minimize the side |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1534 // effects, insert it in the current tab page. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1535 // Anything related to a window (e.g., setting folds) may have |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1536 // unexpected results. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1537 aco->use_aucmd_win = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1538 aucmd_win_used = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1539 |
16778
eda4d65f232c
patch 8.1.1391: no popup window support
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
1540 win_init_popup_win(aucmd_win, buf); |
eda4d65f232c
patch 8.1.1391: no popup window support
Bram Moolenaar <Bram@vim.org>
parents:
16764
diff
changeset
|
1541 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1542 aco->globaldir = globaldir; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1543 globaldir = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1544 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1545 // Split the current window, put the aucmd_win in the upper half. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1546 // We don't want the BufEnter or WinEnter autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1547 block_autocmds(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1548 make_snapshot(SNAP_AUCMD_IDX); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1549 save_ea = p_ea; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1550 p_ea = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1551 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1552 #ifdef FEAT_AUTOCHDIR |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1553 // Prevent chdir() call in win_enter_ext(), through do_autochdir(). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1554 save_acd = p_acd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1555 p_acd = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1556 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1557 |
27360
dfaba853a792
patch 8.2.4208: using setbufvar() may change the window title
Bram Moolenaar <Bram@vim.org>
parents:
26998
diff
changeset
|
1558 // no redrawing and don't set the window title |
dfaba853a792
patch 8.2.4208: using setbufvar() may change the window title
Bram Moolenaar <Bram@vim.org>
parents:
26998
diff
changeset
|
1559 ++RedrawingDisabled; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1560 (void)win_split_ins(0, WSP_TOP, aucmd_win, 0); |
27360
dfaba853a792
patch 8.2.4208: using setbufvar() may change the window title
Bram Moolenaar <Bram@vim.org>
parents:
26998
diff
changeset
|
1561 --RedrawingDisabled; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1562 (void)win_comp_pos(); // recompute window positions |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1563 p_ea = save_ea; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1564 #ifdef FEAT_AUTOCHDIR |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1565 p_acd = save_acd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1566 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1567 unblock_autocmds(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1568 curwin = aucmd_win; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1569 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1570 curbuf = buf; |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1571 aco->new_curwin_id = curwin->w_id; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1572 set_bufref(&aco->new_curbuf, curbuf); |
26998
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1573 |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1574 // disable the Visual area, the position may be invalid in another buffer |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1575 aco->save_VIsual_active = VIsual_active; |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1576 VIsual_active = FALSE; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1577 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1578 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1579 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1580 * Cleanup after executing autocommands for a (hidden) buffer. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1581 * Restore the window as it was (if possible). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1582 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1583 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1584 aucmd_restbuf( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1585 aco_save_T *aco) // structure holding saved values |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1586 { |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1587 int dummy; |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1588 win_T *save_curwin; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1589 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1590 if (aco->use_aucmd_win) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1591 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1592 --curbuf->b_nwindows; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1593 // Find "aucmd_win", it can't be closed, but it may be in another tab |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1594 // page. Do not trigger autocommands here. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1595 block_autocmds(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1596 if (curwin != aucmd_win) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1597 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1598 tabpage_T *tp; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1599 win_T *wp; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1600 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1601 FOR_ALL_TAB_WINDOWS(tp, wp) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1602 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1603 if (wp == aucmd_win) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1604 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1605 if (tp != curtab) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1606 goto_tabpage_tp(tp, TRUE, TRUE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1607 win_goto(aucmd_win); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1608 goto win_found; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1609 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1610 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1611 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1612 win_found: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1613 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1614 // Remove the window and frame from the tree of frames. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1615 (void)winframe_remove(curwin, &dummy, NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1616 win_remove(curwin, NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1617 aucmd_win_used = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1618 last_status(FALSE); // may need to remove last status line |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1619 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1620 if (!valid_tabpage_win(curtab)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1621 // no valid window in current tabpage |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1622 close_tabpage(curtab); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1623 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1624 restore_snapshot(SNAP_AUCMD_IDX, FALSE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1625 (void)win_comp_pos(); // recompute window positions |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1626 unblock_autocmds(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1627 |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1628 save_curwin = win_find_by_id(aco->save_curwin_id); |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1629 if (save_curwin != NULL) |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1630 curwin = save_curwin; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1631 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1632 // Hmm, original window disappeared. Just use the first one. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1633 curwin = firstwin; |
22470
f7471450243c
patch 8.2.1783: try-catch test fails
Bram Moolenaar <Bram@vim.org>
parents:
22466
diff
changeset
|
1634 curbuf = curwin->w_buffer; |
f7471450243c
patch 8.2.1783: try-catch test fails
Bram Moolenaar <Bram@vim.org>
parents:
22466
diff
changeset
|
1635 #ifdef FEAT_JOB_CHANNEL |
f7471450243c
patch 8.2.1783: try-catch test fails
Bram Moolenaar <Bram@vim.org>
parents:
22466
diff
changeset
|
1636 // May need to restore insert mode for a prompt buffer. |
f7471450243c
patch 8.2.1783: try-catch test fails
Bram Moolenaar <Bram@vim.org>
parents:
22466
diff
changeset
|
1637 entering_window(curwin); |
f7471450243c
patch 8.2.1783: try-catch test fails
Bram Moolenaar <Bram@vim.org>
parents:
22466
diff
changeset
|
1638 #endif |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1639 prevwin = win_find_by_id(aco->save_prevwin_id); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1640 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1641 vars_clear(&aucmd_win->w_vars->dv_hashtab); // free all w: variables |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1642 hash_init(&aucmd_win->w_vars->dv_hashtab); // re-use the hashtab |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1643 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1644 vim_free(globaldir); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1645 globaldir = aco->globaldir; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1646 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1647 // the buffer contents may have changed |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1648 check_cursor(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1649 if (curwin->w_topline > curbuf->b_ml.ml_line_count) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1650 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1651 curwin->w_topline = curbuf->b_ml.ml_line_count; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1652 #ifdef FEAT_DIFF |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1653 curwin->w_topfill = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1654 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1655 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1656 #if defined(FEAT_GUI) |
26616
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1657 if (gui.in_use) |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1658 { |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1659 // Hide the scrollbars from the aucmd_win and update. |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1660 gui_mch_enable_scrollbar( |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1661 &aucmd_win->w_scrollbars[SBAR_LEFT], FALSE); |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1662 gui_mch_enable_scrollbar( |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1663 &aucmd_win->w_scrollbars[SBAR_RIGHT], FALSE); |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1664 gui_may_update_scrollbars(); |
d1a60043826c
patch 8.2.3837: QNX: crash when compiled with GUI but using terminal
Bram Moolenaar <Bram@vim.org>
parents:
26608
diff
changeset
|
1665 } |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1666 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1667 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1668 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1669 { |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1670 // Restore curwin. Use the window ID, a window may have been closed |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1671 // and the memory re-used for another one. |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1672 save_curwin = win_find_by_id(aco->save_curwin_id); |
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1673 if (save_curwin != NULL) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1674 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1675 // Restore the buffer which was previously edited by curwin, if |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1676 // it was changed, we are still the same window and the buffer is |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1677 // valid. |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1678 if (curwin->w_id == aco->new_curwin_id |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1679 && curbuf != aco->new_curbuf.br_buf |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1680 && bufref_valid(&aco->new_curbuf) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1681 && aco->new_curbuf.br_buf->b_ml.ml_mfp != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1682 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1683 # if defined(FEAT_SYN_HL) || defined(FEAT_SPELL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1684 if (curwin->w_s == &curbuf->b_s) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1685 curwin->w_s = &aco->new_curbuf.br_buf->b_s; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1686 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1687 --curbuf->b_nwindows; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1688 curbuf = aco->new_curbuf.br_buf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1689 curwin->w_buffer = curbuf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1690 ++curbuf->b_nwindows; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1691 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1692 |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1693 curwin = save_curwin; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1694 curbuf = curwin->w_buffer; |
22838
80bd5de5dcab
patch 8.2.1966: popup becomes current window after closing a terminal window
Bram Moolenaar <Bram@vim.org>
parents:
22651
diff
changeset
|
1695 prevwin = win_find_by_id(aco->save_prevwin_id); |
18498
9e6d5a4abb1c
patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents:
18450
diff
changeset
|
1696 // In case the autocommand moves the cursor to a position that |
9e6d5a4abb1c
patch 8.1.2243: typos in comments
Bram Moolenaar <Bram@vim.org>
parents:
18450
diff
changeset
|
1697 // does not exist in curbuf. |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1698 check_cursor(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1699 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1700 } |
26998
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1701 |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1702 check_cursor(); // just in case lines got deleted |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1703 VIsual_active = aco->save_VIsual_active; |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1704 if (VIsual_active) |
b0ef52086d57
patch 8.2.4028: ml_get error with :doautoall and Visual area
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
1705 check_pos(curbuf, &VIsual); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1706 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1707 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1708 static int autocmd_nested = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1709 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1710 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1711 * Execute autocommands for "event" and file name "fname". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1712 * Return TRUE if some commands were executed. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1713 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1714 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1715 apply_autocmds( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1716 event_T event, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1717 char_u *fname, // NULL or empty means use actual file name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1718 char_u *fname_io, // fname to use for <afile> on cmdline |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1719 int force, // when TRUE, ignore autocmd_busy |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1720 buf_T *buf) // buffer for <abuf> |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1721 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1722 return apply_autocmds_group(event, fname, fname_io, force, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1723 AUGROUP_ALL, buf, NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1724 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1725 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1726 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1727 * Like apply_autocmds(), but with extra "eap" argument. This takes care of |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1728 * setting v:filearg. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1729 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1730 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1731 apply_autocmds_exarg( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1732 event_T event, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1733 char_u *fname, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1734 char_u *fname_io, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1735 int force, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1736 buf_T *buf, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1737 exarg_T *eap) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1738 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1739 return apply_autocmds_group(event, fname, fname_io, force, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1740 AUGROUP_ALL, buf, eap); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1741 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1742 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1743 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1744 * Like apply_autocmds(), but handles the caller's retval. If the script |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1745 * processing is being aborted or if retval is FAIL when inside a try |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1746 * conditional, no autocommands are executed. If otherwise the autocommands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1747 * cause the script to be aborted, retval is set to FAIL. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1748 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1749 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1750 apply_autocmds_retval( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1751 event_T event, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1752 char_u *fname, // NULL or empty means use actual file name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1753 char_u *fname_io, // fname to use for <afile> on cmdline |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1754 int force, // when TRUE, ignore autocmd_busy |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1755 buf_T *buf, // buffer for <abuf> |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1756 int *retval) // pointer to caller's retval |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1757 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1758 int did_cmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1759 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1760 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1761 if (should_abort(*retval)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1762 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1763 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1764 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1765 did_cmd = apply_autocmds_group(event, fname, fname_io, force, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1766 AUGROUP_ALL, buf, NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1767 if (did_cmd |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1768 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1769 && aborting() |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1770 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1771 ) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1772 *retval = FAIL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1773 return did_cmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1774 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1775 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1776 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1777 * Return TRUE when there is a CursorHold autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1778 */ |
17789
0f7ae8010787
patch 8.1.1891: functions used in one file are global
Bram Moolenaar <Bram@vim.org>
parents:
17781
diff
changeset
|
1779 static int |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1780 has_cursorhold(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1781 { |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28449
diff
changeset
|
1782 return (first_autopat[(int)(get_real_state() == MODE_NORMAL_BUSY |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1783 ? EVENT_CURSORHOLD : EVENT_CURSORHOLDI)] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1784 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1785 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1786 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1787 * Return TRUE if the CursorHold event can be triggered. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1788 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1789 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1790 trigger_cursorhold(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1791 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1792 int state; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1793 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1794 if (!did_cursorhold |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1795 && has_cursorhold() |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1796 && reg_recording == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1797 && typebuf.tb_len == 0 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17789
diff
changeset
|
1798 && !ins_compl_active()) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1799 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1800 state = get_real_state(); |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28449
diff
changeset
|
1801 if (state == MODE_NORMAL_BUSY || (state & MODE_INSERT) != 0) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1802 return TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1803 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1804 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1805 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1806 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1807 /* |
28375
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1808 * Return TRUE when there is a WinScrolled autocommand defined. |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1809 */ |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1810 int |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1811 has_winscrolled(void) |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1812 { |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1813 return (first_autopat[(int)EVENT_WINSCROLLED] != NULL); |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1814 } |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1815 |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
1816 /* |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1817 * Return TRUE when there is a CursorMoved autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1818 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1819 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1820 has_cursormoved(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1821 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1822 return (first_autopat[(int)EVENT_CURSORMOVED] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1823 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1824 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1825 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1826 * Return TRUE when there is a CursorMovedI autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1827 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1828 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1829 has_cursormovedI(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1830 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1831 return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1832 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1833 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1834 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1835 * Return TRUE when there is a TextChanged autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1836 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1837 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1838 has_textchanged(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1839 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1840 return (first_autopat[(int)EVENT_TEXTCHANGED] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1841 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1842 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1843 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1844 * Return TRUE when there is a TextChangedI autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1845 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1846 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1847 has_textchangedI(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1848 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1849 return (first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1850 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1851 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1852 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1853 * Return TRUE when there is a TextChangedP autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1854 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1855 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1856 has_textchangedP(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1857 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1858 return (first_autopat[(int)EVENT_TEXTCHANGEDP] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1859 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1860 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1861 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1862 * Return TRUE when there is an InsertCharPre autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1863 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1864 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1865 has_insertcharpre(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1866 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1867 return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1868 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1869 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1870 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1871 * Return TRUE when there is an CmdUndefined autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1872 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1873 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1874 has_cmdundefined(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1875 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1876 return (first_autopat[(int)EVENT_CMDUNDEFINED] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1877 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1878 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1879 #if defined(FEAT_EVAL) || defined(PROTO) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1880 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1881 * Return TRUE when there is a TextYankPost autocommand defined. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1882 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1883 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1884 has_textyankpost(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1885 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1886 return (first_autopat[(int)EVENT_TEXTYANKPOST] != NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1887 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1888 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1889 |
16268
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1890 #if defined(FEAT_EVAL) || defined(PROTO) |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1891 /* |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1892 * Return TRUE when there is a CompleteChanged autocommand defined. |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1893 */ |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1894 int |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1895 has_completechanged(void) |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1896 { |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1897 return (first_autopat[(int)EVENT_COMPLETECHANGED] != NULL); |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1898 } |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1899 #endif |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
16221
diff
changeset
|
1900 |
25790
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1901 #if defined(FEAT_EVAL) || defined(PROTO) |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1902 /* |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1903 * Return TRUE when there is a ModeChanged autocommand defined. |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1904 */ |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1905 int |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1906 has_modechanged(void) |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1907 { |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1908 return (first_autopat[(int)EVENT_MODECHANGED] != NULL); |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1909 } |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1910 #endif |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
1911 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1912 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1913 * Execute autocommands for "event" and file name "fname". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1914 * Return TRUE if some commands were executed. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1915 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1916 static int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1917 apply_autocmds_group( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1918 event_T event, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1919 char_u *fname, // NULL or empty means use actual file name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1920 char_u *fname_io, // fname to use for <afile> on cmdline, NULL means |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1921 // use fname |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1922 int force, // when TRUE, ignore autocmd_busy |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1923 int group, // group ID, or AUGROUP_ALL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1924 buf_T *buf, // buffer for <abuf> |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1925 exarg_T *eap UNUSED) // command arguments |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1926 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1927 char_u *sfname = NULL; // short file name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1928 char_u *tail; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1929 int save_changed; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1930 buf_T *old_curbuf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1931 int retval = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1932 char_u *save_autocmd_fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1933 int save_autocmd_fname_full; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1934 int save_autocmd_bufnr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1935 char_u *save_autocmd_match; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1936 int save_autocmd_busy; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1937 int save_autocmd_nested; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1938 static int nesting = 0; |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
1939 AutoPatCmd_T patcmd; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1940 AutoPat *ap; |
23390
9a5f12b36273
patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
23165
diff
changeset
|
1941 sctx_T save_current_sctx; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1942 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1943 funccal_entry_T funccal_entry; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1944 char_u *save_cmdarg; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1945 long save_cmdbang; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1946 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1947 static int filechangeshell_busy = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1948 #ifdef FEAT_PROFILE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1949 proftime_T wait_time; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1950 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1951 int did_save_redobuff = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1952 save_redo_T save_redo; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1953 int save_KeyTyped = KeyTyped; |
26608
1eb62546e20c
patch 8.2.3833: error from term_start() not caught by try/catch
Bram Moolenaar <Bram@vim.org>
parents:
26336
diff
changeset
|
1954 int save_did_emsg; |
19075
af1eca322b9e
patch 8.2.0098: exe stack length can be wrong without being detected
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
1955 ESTACK_CHECK_DECLARATION |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1956 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1957 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1958 * Quickly return if there are no autocommands for this event or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1959 * autocommands are blocked. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1960 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1961 if (event == NUM_EVENTS || first_autopat[(int)event] == NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1962 || autocmd_blocked > 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1963 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1964 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1965 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1966 * When autocommands are busy, new autocommands are only executed when |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1967 * explicitly enabled with the "nested" flag. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1968 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1969 if (autocmd_busy && !(force || autocmd_nested)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1970 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1971 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1972 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1973 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1974 * Quickly return when immediately aborting on error, or when an interrupt |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1975 * occurred or an exception was thrown but not caught. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1976 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1977 if (aborting()) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1978 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1979 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1980 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1981 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1982 * FileChangedShell never nests, because it can create an endless loop. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1983 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1984 if (filechangeshell_busy && (event == EVENT_FILECHANGEDSHELL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1985 || event == EVENT_FILECHANGEDSHELLPOST)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1986 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1987 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1988 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1989 * Ignore events in 'eventignore'. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1990 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1991 if (event_ignored(event)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1992 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1993 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1994 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1995 * Allow nesting of autocommands, but restrict the depth, because it's |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1996 * possible to create an endless loop. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1997 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1998 if (nesting == 10) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1999 { |
26861
df2de1e63de0
patch 8.2.3959: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26715
diff
changeset
|
2000 emsg(_(e_autocommand_nesting_too_deep)); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2001 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2002 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2003 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2004 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2005 * Check if these autocommands are disabled. Used when doing ":all" or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2006 * ":ball". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2007 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2008 if ( (autocmd_no_enter |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2009 && (event == EVENT_WINENTER || event == EVENT_BUFENTER)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2010 || (autocmd_no_leave |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2011 && (event == EVENT_WINLEAVE || event == EVENT_BUFLEAVE))) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2012 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2013 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2014 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2015 * Save the autocmd_* variables and info about the current buffer. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2016 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2017 save_autocmd_fname = autocmd_fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2018 save_autocmd_fname_full = autocmd_fname_full; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2019 save_autocmd_bufnr = autocmd_bufnr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2020 save_autocmd_match = autocmd_match; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2021 save_autocmd_busy = autocmd_busy; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2022 save_autocmd_nested = autocmd_nested; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2023 save_changed = curbuf->b_changed; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2024 old_curbuf = curbuf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2025 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2026 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2027 * Set the file name to be used for <afile>. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2028 * Make a copy to avoid that changing a buffer name or directory makes it |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2029 * invalid. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2030 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2031 if (fname_io == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2032 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2033 if (event == EVENT_COLORSCHEME || event == EVENT_COLORSCHEMEPRE |
25790
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
2034 || event == EVENT_OPTIONSET |
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
2035 || event == EVENT_MODECHANGED) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2036 autocmd_fname = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2037 else if (fname != NULL && !ends_excmd(*fname)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2038 autocmd_fname = fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2039 else if (buf != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2040 autocmd_fname = buf->b_ffname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2041 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2042 autocmd_fname = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2043 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2044 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2045 autocmd_fname = fname_io; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2046 if (autocmd_fname != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2047 autocmd_fname = vim_strsave(autocmd_fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2048 autocmd_fname_full = FALSE; // call FullName_save() later |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2049 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2050 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2051 * Set the buffer number to be used for <abuf>. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2052 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2053 if (buf == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2054 autocmd_bufnr = 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2055 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2056 autocmd_bufnr = buf->b_fnum; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2057 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2058 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2059 * When the file name is NULL or empty, use the file name of buffer "buf". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2060 * Always use the full path of the file name to match with, in case |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2061 * "allow_dirs" is set. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2062 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2063 if (fname == NULL || *fname == NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2064 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2065 if (buf == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2066 fname = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2067 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2068 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2069 #ifdef FEAT_SYN_HL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2070 if (event == EVENT_SYNTAX) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2071 fname = buf->b_p_syn; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2072 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2073 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2074 if (event == EVENT_FILETYPE) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2075 fname = buf->b_p_ft; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2076 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2077 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2078 if (buf->b_sfname != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2079 sfname = vim_strsave(buf->b_sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2080 fname = buf->b_ffname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2081 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2082 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2083 if (fname == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2084 fname = (char_u *)""; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2085 fname = vim_strsave(fname); // make a copy, so we can change it |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2086 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2087 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2088 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2089 sfname = vim_strsave(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2090 // Don't try expanding FileType, Syntax, FuncUndefined, WindowID, |
27639
8736d8b0a0bc
patch 8.2.4345: <amatch> is expanded like a file name for DirChangedPre
Bram Moolenaar <Bram@vim.org>
parents:
27617
diff
changeset
|
2091 // ColorScheme, QuickFixCmd*, DirChanged and similar. |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2092 if (event == EVENT_FILETYPE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2093 || event == EVENT_SYNTAX |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2094 || event == EVENT_CMDLINECHANGED |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2095 || event == EVENT_CMDLINEENTER |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2096 || event == EVENT_CMDLINELEAVE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2097 || event == EVENT_CMDWINENTER |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2098 || event == EVENT_CMDWINLEAVE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2099 || event == EVENT_CMDUNDEFINED |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2100 || event == EVENT_FUNCUNDEFINED |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2101 || event == EVENT_REMOTEREPLY |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2102 || event == EVENT_SPELLFILEMISSING |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2103 || event == EVENT_QUICKFIXCMDPRE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2104 || event == EVENT_COLORSCHEME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2105 || event == EVENT_COLORSCHEMEPRE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2106 || event == EVENT_OPTIONSET |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2107 || event == EVENT_QUICKFIXCMDPOST |
25790
16a7d1154be8
patch 8.2.3430: no generic way to trigger an autocommand on mode change
Bram Moolenaar <Bram@vim.org>
parents:
25539
diff
changeset
|
2108 || event == EVENT_DIRCHANGED |
27639
8736d8b0a0bc
patch 8.2.4345: <amatch> is expanded like a file name for DirChangedPre
Bram Moolenaar <Bram@vim.org>
parents:
27617
diff
changeset
|
2109 || event == EVENT_DIRCHANGEDPRE |
26117
d4d9c7c55a5f
patch 8.2.3591: no event is triggered when closing a window
Bram Moolenaar <Bram@vim.org>
parents:
26042
diff
changeset
|
2110 || event == EVENT_MODECHANGED |
30757
74043ee52030
patch 9.0.0713: <amatch> of MenuPopup event is expanded like a file name
Bram Moolenaar <Bram@vim.org>
parents:
30465
diff
changeset
|
2111 || event == EVENT_MENUPOPUP |
27639
8736d8b0a0bc
patch 8.2.4345: <amatch> is expanded like a file name for DirChangedPre
Bram Moolenaar <Bram@vim.org>
parents:
27617
diff
changeset
|
2112 || event == EVENT_USER |
28375
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
2113 || event == EVENT_WINCLOSED |
e466fdbe0699
patch 8.2.4713: plugins cannot track text scrolling
Bram Moolenaar <Bram@vim.org>
parents:
27960
diff
changeset
|
2114 || event == EVENT_WINSCROLLED) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2115 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2116 fname = vim_strsave(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2117 autocmd_fname_full = TRUE; // don't expand it later |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2118 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2119 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2120 fname = FullName_save(fname, FALSE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2121 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2122 if (fname == NULL) // out of memory |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2123 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2124 vim_free(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2125 retval = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2126 goto BYPASS_AU; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2127 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2128 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2129 #ifdef BACKSLASH_IN_FILENAME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2130 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2131 * Replace all backslashes with forward slashes. This makes the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2132 * autocommand patterns portable between Unix and MS-DOS. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2133 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2134 if (sfname != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2135 forward_slash(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2136 forward_slash(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2137 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2138 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2139 #ifdef VMS |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2140 // remove version for correct match |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2141 if (sfname != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2142 vms_remove_version(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2143 vms_remove_version(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2144 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2145 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2146 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2147 * Set the name to be used for <amatch>. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2148 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2149 autocmd_match = fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2150 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2151 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2152 // Don't redraw while doing autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2153 ++RedrawingDisabled; |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
2154 |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
2155 // name and lnum are filled in later |
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
2156 estack_push(ETYPE_AUCMD, NULL, 0); |
19075
af1eca322b9e
patch 8.2.0098: exe stack length can be wrong without being detected
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
2157 ESTACK_CHECK_SETUP |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2158 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2159 save_current_sctx = current_sctx; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2160 |
23390
9a5f12b36273
patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
23165
diff
changeset
|
2161 #ifdef FEAT_EVAL |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2162 # ifdef FEAT_PROFILE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2163 if (do_profiling == PROF_YES) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2164 prof_child_enter(&wait_time); // doesn't count for the caller itself |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2165 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2166 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2167 // Don't use local function variables, if called from a function. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2168 save_funccal(&funccal_entry); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2169 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2170 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2171 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2172 * When starting to execute autocommands, save the search patterns. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2173 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2174 if (!autocmd_busy) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2175 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2176 save_search_patterns(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2177 if (!ins_compl_active()) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2178 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2179 saveRedobuff(&save_redo); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2180 did_save_redobuff = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2181 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2182 did_filetype = keep_filetype; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2183 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2184 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2185 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2186 * Note that we are applying autocmds. Some commands need to know. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2187 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2188 autocmd_busy = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2189 filechangeshell_busy = (event == EVENT_FILECHANGEDSHELL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2190 ++nesting; // see matching decrement below |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2191 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2192 // Remember that FileType was triggered. Used for did_filetype(). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2193 if (event == EVENT_FILETYPE) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2194 did_filetype = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2195 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2196 tail = gettail(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2197 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2198 // Find first autocommand that matches |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2199 CLEAR_FIELD(patcmd); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2200 patcmd.curpat = first_autopat[(int)event]; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2201 patcmd.group = group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2202 patcmd.fname = fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2203 patcmd.sfname = sfname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2204 patcmd.tail = tail; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2205 patcmd.event = event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2206 patcmd.arg_bufnr = autocmd_bufnr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2207 auto_next_pat(&patcmd, FALSE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2208 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2209 // found one, start executing the autocommands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2210 if (patcmd.curpat != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2211 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2212 // add to active_apc_list |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2213 patcmd.next = active_apc_list; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2214 active_apc_list = &patcmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2215 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2216 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2217 // set v:cmdarg (only when there is a matching pattern) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2218 save_cmdbang = (long)get_vim_var_nr(VV_CMDBANG); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2219 if (eap != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2220 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2221 save_cmdarg = set_cmdarg(eap, NULL); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2222 set_vim_var_nr(VV_CMDBANG, (long)eap->forceit); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2223 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2224 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2225 save_cmdarg = NULL; // avoid gcc warning |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2226 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2227 retval = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2228 // mark the last pattern, to avoid an endless loop when more patterns |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2229 // are added when executing autocommands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2230 for (ap = patcmd.curpat; ap->next != NULL; ap = ap->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2231 ap->last = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2232 ap->last = TRUE; |
16401
3b2db762a509
patch 8.1.1205: a BufReadPre autocommand may cause the cursor to move
Bram Moolenaar <Bram@vim.org>
parents:
16268
diff
changeset
|
2233 |
29438
87da4bab5aaa
patch 9.0.0061: ml_get error with nested autocommand
Bram Moolenaar <Bram@vim.org>
parents:
29138
diff
changeset
|
2234 // Make sure cursor and topline are valid. The first time the current |
87da4bab5aaa
patch 9.0.0061: ml_get error with nested autocommand
Bram Moolenaar <Bram@vim.org>
parents:
29138
diff
changeset
|
2235 // values are saved, restored by reset_lnums(). When nested only the |
87da4bab5aaa
patch 9.0.0061: ml_get error with nested autocommand
Bram Moolenaar <Bram@vim.org>
parents:
29138
diff
changeset
|
2236 // values are corrected when needed. |
24309
f8619a303e9d
patch 8.2.2695: cursor position reset with nested autocommands
Bram Moolenaar <Bram@vim.org>
parents:
24110
diff
changeset
|
2237 if (nesting == 1) |
f8619a303e9d
patch 8.2.2695: cursor position reset with nested autocommands
Bram Moolenaar <Bram@vim.org>
parents:
24110
diff
changeset
|
2238 check_lnums(TRUE); |
29438
87da4bab5aaa
patch 9.0.0061: ml_get error with nested autocommand
Bram Moolenaar <Bram@vim.org>
parents:
29138
diff
changeset
|
2239 else |
87da4bab5aaa
patch 9.0.0061: ml_get error with nested autocommand
Bram Moolenaar <Bram@vim.org>
parents:
29138
diff
changeset
|
2240 check_lnums_nested(TRUE); |
16401
3b2db762a509
patch 8.1.1205: a BufReadPre autocommand may cause the cursor to move
Bram Moolenaar <Bram@vim.org>
parents:
16268
diff
changeset
|
2241 |
26608
1eb62546e20c
patch 8.2.3833: error from term_start() not caught by try/catch
Bram Moolenaar <Bram@vim.org>
parents:
26336
diff
changeset
|
2242 save_did_emsg = did_emsg; |
1eb62546e20c
patch 8.2.3833: error from term_start() not caught by try/catch
Bram Moolenaar <Bram@vim.org>
parents:
26336
diff
changeset
|
2243 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2244 do_cmdline(NULL, getnextac, (void *)&patcmd, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2245 DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); |
16401
3b2db762a509
patch 8.1.1205: a BufReadPre autocommand may cause the cursor to move
Bram Moolenaar <Bram@vim.org>
parents:
16268
diff
changeset
|
2246 |
26608
1eb62546e20c
patch 8.2.3833: error from term_start() not caught by try/catch
Bram Moolenaar <Bram@vim.org>
parents:
26336
diff
changeset
|
2247 did_emsg += save_did_emsg; |
1eb62546e20c
patch 8.2.3833: error from term_start() not caught by try/catch
Bram Moolenaar <Bram@vim.org>
parents:
26336
diff
changeset
|
2248 |
24309
f8619a303e9d
patch 8.2.2695: cursor position reset with nested autocommands
Bram Moolenaar <Bram@vim.org>
parents:
24110
diff
changeset
|
2249 if (nesting == 1) |
f8619a303e9d
patch 8.2.2695: cursor position reset with nested autocommands
Bram Moolenaar <Bram@vim.org>
parents:
24110
diff
changeset
|
2250 // restore cursor and topline, unless they were changed |
f8619a303e9d
patch 8.2.2695: cursor position reset with nested autocommands
Bram Moolenaar <Bram@vim.org>
parents:
24110
diff
changeset
|
2251 reset_lnums(); |
16401
3b2db762a509
patch 8.1.1205: a BufReadPre autocommand may cause the cursor to move
Bram Moolenaar <Bram@vim.org>
parents:
16268
diff
changeset
|
2252 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2253 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2254 if (eap != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2255 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2256 (void)set_cmdarg(NULL, save_cmdarg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2257 set_vim_var_nr(VV_CMDBANG, save_cmdbang); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2258 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2259 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2260 // delete from active_apc_list |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2261 if (active_apc_list == &patcmd) // just in case |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2262 active_apc_list = patcmd.next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2263 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2264 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2265 --RedrawingDisabled; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2266 autocmd_busy = save_autocmd_busy; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2267 filechangeshell_busy = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2268 autocmd_nested = save_autocmd_nested; |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
2269 vim_free(SOURCING_NAME); |
19075
af1eca322b9e
patch 8.2.0098: exe stack length can be wrong without being detected
Bram Moolenaar <Bram@vim.org>
parents:
18991
diff
changeset
|
2270 ESTACK_CHECK_NOW |
18991
847cc7932c42
patch 8.2.0056: execution stack is incomplete and inefficient
Bram Moolenaar <Bram@vim.org>
parents:
18757
diff
changeset
|
2271 estack_pop(); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2272 vim_free(autocmd_fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2273 autocmd_fname = save_autocmd_fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2274 autocmd_fname_full = save_autocmd_fname_full; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2275 autocmd_bufnr = save_autocmd_bufnr; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2276 autocmd_match = save_autocmd_match; |
23390
9a5f12b36273
patch 8.2.2238: Vim9: cannot load a Vim9 script without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
23165
diff
changeset
|
2277 current_sctx = save_current_sctx; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2278 #ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2279 restore_funccal(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2280 # ifdef FEAT_PROFILE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2281 if (do_profiling == PROF_YES) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2282 prof_child_exit(&wait_time); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2283 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2284 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2285 KeyTyped = save_KeyTyped; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2286 vim_free(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2287 vim_free(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2288 --nesting; // see matching increment above |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2289 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2290 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2291 * When stopping to execute autocommands, restore the search patterns and |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2292 * the redo buffer. Free any buffers in the au_pending_free_buf list and |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2293 * free any windows in the au_pending_free_win list. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2294 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2295 if (!autocmd_busy) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2296 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2297 restore_search_patterns(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2298 if (did_save_redobuff) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2299 restoreRedobuff(&save_redo); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2300 did_filetype = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2301 while (au_pending_free_buf != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2302 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2303 buf_T *b = au_pending_free_buf->b_next; |
24110
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
2304 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2305 vim_free(au_pending_free_buf); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2306 au_pending_free_buf = b; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2307 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2308 while (au_pending_free_win != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2309 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2310 win_T *w = au_pending_free_win->w_next; |
24110
03438d77d8ab
patch 8.2.2596: :doautocmd may confuse scripts listening to WinEnter
Bram Moolenaar <Bram@vim.org>
parents:
23758
diff
changeset
|
2311 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2312 vim_free(au_pending_free_win); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2313 au_pending_free_win = w; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2314 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2315 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2316 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2317 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2318 * Some events don't set or reset the Changed flag. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2319 * Check if still in the same buffer! |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2320 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2321 if (curbuf == old_curbuf |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2322 && (event == EVENT_BUFREADPOST |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2323 || event == EVENT_BUFWRITEPOST |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2324 || event == EVENT_FILEAPPENDPOST |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2325 || event == EVENT_VIMLEAVE |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2326 || event == EVENT_VIMLEAVEPRE)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2327 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2328 if (curbuf->b_changed != save_changed) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2329 need_maketitle = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2330 curbuf->b_changed = save_changed; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2331 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2332 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2333 au_cleanup(); // may really delete removed patterns/commands now |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2334 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2335 BYPASS_AU: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2336 // When wiping out a buffer make sure all its buffer-local autocommands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2337 // are deleted. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2338 if (event == EVENT_BUFWIPEOUT && buf != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2339 aubuflocal_remove(buf); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2340 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2341 if (retval == OK && event == EVENT_FILETYPE) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2342 au_did_filetype = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2343 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2344 return retval; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2345 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2346 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2347 # ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2348 static char_u *old_termresponse = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2349 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2350 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2351 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2352 * Block triggering autocommands until unblock_autocmd() is called. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2353 * Can be used recursively, so long as it's symmetric. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2354 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2355 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2356 block_autocmds(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2357 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2358 # ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2359 // Remember the value of v:termresponse. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2360 if (autocmd_blocked == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2361 old_termresponse = get_vim_var_str(VV_TERMRESPONSE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2362 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2363 ++autocmd_blocked; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2364 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2365 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2366 void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2367 unblock_autocmds(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2368 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2369 --autocmd_blocked; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2370 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2371 # ifdef FEAT_EVAL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2372 // When v:termresponse was set while autocommands were blocked, trigger |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2373 // the autocommands now. Esp. useful when executing a shell command |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2374 // during startup (vimdiff). |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2375 if (autocmd_blocked == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2376 && get_vim_var_str(VV_TERMRESPONSE) != old_termresponse) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2377 apply_autocmds(EVENT_TERMRESPONSE, NULL, NULL, FALSE, curbuf); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2378 # endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2379 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2380 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2381 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2382 is_autocmd_blocked(void) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2383 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2384 return autocmd_blocked != 0; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2385 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2386 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2387 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2388 * Find next autocommand pattern that matches. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2389 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2390 static void |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2391 auto_next_pat( |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2392 AutoPatCmd_T *apc, |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2393 int stop_at_last) // stop when 'last' flag is set |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2394 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2395 AutoPat *ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2396 AutoCmd *cp; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2397 char_u *name; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2398 char *s; |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2399 estack_T *entry; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2400 char_u *namep; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2401 |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2402 entry = ((estack_T *)exestack.ga_data) + exestack.ga_len - 1; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2403 |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2404 // Clear the exestack entry for this ETYPE_AUCMD entry. |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2405 VIM_CLEAR(entry->es_name); |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2406 entry->es_info.aucmd = NULL; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2407 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2408 for (ap = apc->curpat; ap != NULL && !got_int; ap = ap->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2409 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2410 apc->curpat = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2411 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2412 // Only use a pattern when it has not been removed, has commands and |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2413 // the group matches. For buffer-local autocommands only check the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2414 // buffer number. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2415 if (ap->pat != NULL && ap->cmds != NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2416 && (apc->group == AUGROUP_ALL || apc->group == ap->group)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2417 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2418 // execution-condition |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2419 if (ap->buflocal_nr == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2420 ? (match_file_pat(NULL, &ap->reg_prog, apc->fname, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2421 apc->sfname, apc->tail, ap->allow_dirs)) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2422 : ap->buflocal_nr == apc->arg_bufnr) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2423 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2424 name = event_nr2name(apc->event); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2425 s = _("%s Autocommands for \"%s\""); |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2426 namep = alloc(STRLEN(s) + STRLEN(name) + ap->patlen + 1); |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2427 if (namep != NULL) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2428 { |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2429 sprintf((char *)namep, s, (char *)name, (char *)ap->pat); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2430 if (p_verbose >= 8) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2431 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2432 verbose_enter(); |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2433 smsg(_("Executing %s"), namep); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2434 verbose_leave(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2435 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2436 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2437 |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2438 // Update the exestack entry for this autocmd. |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2439 entry->es_name = namep; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2440 entry->es_info.aucmd = apc; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2441 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2442 apc->curpat = ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2443 apc->nextcmd = ap->cmds; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2444 // mark last command |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2445 for (cp = ap->cmds; cp->next != NULL; cp = cp->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2446 cp->last = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2447 cp->last = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2448 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2449 line_breakcheck(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2450 if (apc->curpat != NULL) // found a match |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2451 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2452 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2453 if (stop_at_last && ap->last) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2454 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2455 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2456 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2457 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2458 /* |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2459 * Get the script context where autocommand "acp" is defined. |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2460 */ |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2461 sctx_T * |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2462 acp_script_ctx(AutoPatCmd_T *acp) |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2463 { |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2464 return &acp->script_ctx; |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2465 } |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2466 |
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2467 /* |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2468 * Get next autocommand command. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2469 * Called by do_cmdline() to get the next line for ":if". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2470 * Returns allocated string, or NULL for end of autocommands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2471 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2472 char_u * |
21883
a427f5f26419
patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents:
20826
diff
changeset
|
2473 getnextac( |
a427f5f26419
patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents:
20826
diff
changeset
|
2474 int c UNUSED, |
a427f5f26419
patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents:
20826
diff
changeset
|
2475 void *cookie, |
a427f5f26419
patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents:
20826
diff
changeset
|
2476 int indent UNUSED, |
a427f5f26419
patch 8.2.1491: Vim9: crash when compiling heredoc lines start with comment
Bram Moolenaar <Bram@vim.org>
parents:
20826
diff
changeset
|
2477 getline_opt_T options UNUSED) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2478 { |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2479 AutoPatCmd_T *acp = (AutoPatCmd_T *)cookie; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2480 char_u *retval; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2481 AutoCmd *ac; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2482 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2483 // Can be called again after returning the last line. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2484 if (acp->curpat == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2485 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2486 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2487 // repeat until we find an autocommand to execute |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2488 for (;;) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2489 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2490 // skip removed commands |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2491 while (acp->nextcmd != NULL && acp->nextcmd->cmd == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2492 if (acp->nextcmd->last) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2493 acp->nextcmd = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2494 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2495 acp->nextcmd = acp->nextcmd->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2496 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2497 if (acp->nextcmd != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2498 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2499 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2500 // at end of commands, find next pattern that matches |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2501 if (acp->curpat->last) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2502 acp->curpat = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2503 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2504 acp->curpat = acp->curpat->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2505 if (acp->curpat != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2506 auto_next_pat(acp, TRUE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2507 if (acp->curpat == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2508 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2509 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2510 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2511 ac = acp->nextcmd; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2512 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2513 if (p_verbose >= 9) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2514 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2515 verbose_enter_scroll(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2516 smsg(_("autocommand %s"), ac->cmd); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2517 msg_puts("\n"); // don't overwrite this either |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2518 verbose_leave_scroll(); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2519 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2520 retval = vim_strsave(ac->cmd); |
16217
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
2521 // Remove one-shot ("once") autocmd in anticipation of its execution. |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
2522 if (ac->once) |
81e6940504e8
patch 8.1.1113: making an autocommand trigger once is not so easy
Bram Moolenaar <Bram@vim.org>
parents:
16162
diff
changeset
|
2523 au_del_cmd(ac); |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2524 autocmd_nested = ac->nested; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2525 current_sctx = ac->script_ctx; |
28449
80ed5ad30d28
patch 8.2.4749: <script> is not expanded in autocmd context
Bram Moolenaar <Bram@vim.org>
parents:
28397
diff
changeset
|
2526 acp->script_ctx = current_sctx; |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2527 if (ac->last) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2528 acp->nextcmd = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2529 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2530 acp->nextcmd = ac->next; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2531 return retval; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2532 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2533 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2534 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2535 * Return TRUE if there is a matching autocommand for "fname". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2536 * To account for buffer-local autocommands, function needs to know |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2537 * in which buffer the file will be opened. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2538 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2539 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2540 has_autocmd(event_T event, char_u *sfname, buf_T *buf) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2541 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2542 AutoPat *ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2543 char_u *fname; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2544 char_u *tail = gettail(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2545 int retval = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2546 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2547 fname = FullName_save(sfname, FALSE); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2548 if (fname == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2549 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2550 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2551 #ifdef BACKSLASH_IN_FILENAME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2552 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2553 * Replace all backslashes with forward slashes. This makes the |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2554 * autocommand patterns portable between Unix and MS-DOS. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2555 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2556 sfname = vim_strsave(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2557 if (sfname != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2558 forward_slash(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2559 forward_slash(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2560 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2561 |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19199
diff
changeset
|
2562 FOR_ALL_AUTOCMD_PATTERNS(event, ap) |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2563 if (ap->pat != NULL && ap->cmds != NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2564 && (ap->buflocal_nr == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2565 ? match_file_pat(NULL, &ap->reg_prog, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2566 fname, sfname, tail, ap->allow_dirs) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2567 : buf != NULL && ap->buflocal_nr == buf->b_fnum |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2568 )) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2569 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2570 retval = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2571 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2572 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2573 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2574 vim_free(fname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2575 #ifdef BACKSLASH_IN_FILENAME |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2576 vim_free(sfname); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2577 #endif |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2578 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2579 return retval; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2580 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2581 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2582 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2583 * Function given to ExpandGeneric() to obtain the list of autocommand group |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2584 * names. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2585 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2586 char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2587 get_augroup_name(expand_T *xp UNUSED, int idx) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2588 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2589 if (idx == augroups.ga_len) // add "END" add the end |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2590 return (char_u *)"END"; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2591 if (idx < 0 || idx >= augroups.ga_len) // end of list |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2592 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2593 if (AUGROUP_NAME(idx) == NULL || AUGROUP_NAME(idx) == get_deleted_augroup()) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2594 // skip deleted entries |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2595 return (char_u *)""; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2596 return AUGROUP_NAME(idx); // return a name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2597 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2598 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2599 static int include_groups = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2600 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2601 char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2602 set_context_in_autocmd( |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2603 expand_T *xp, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2604 char_u *arg, |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2605 int doautocmd) // TRUE for :doauto*, FALSE for :autocmd |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2606 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2607 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2608 int group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2609 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2610 // check for a group name, skip it if present |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2611 include_groups = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2612 p = arg; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2613 group = au_get_grouparg(&arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2614 if (group == AUGROUP_ERROR) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2615 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2616 // If there only is a group name that's what we expand. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2617 if (*arg == NUL && group != AUGROUP_ALL && !VIM_ISWHITE(arg[-1])) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2618 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2619 arg = p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2620 group = AUGROUP_ALL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2621 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2622 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2623 // skip over event name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2624 for (p = arg; *p != NUL && !VIM_ISWHITE(*p); ++p) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2625 if (*p == ',') |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2626 arg = p + 1; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2627 if (*p == NUL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2628 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2629 if (group == AUGROUP_ALL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2630 include_groups = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2631 xp->xp_context = EXPAND_EVENTS; // expand event name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2632 xp->xp_pattern = arg; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2633 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2634 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2635 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2636 // skip over pattern |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2637 arg = skipwhite(p); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2638 while (*arg && (!VIM_ISWHITE(*arg) || arg[-1] == '\\')) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2639 arg++; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2640 if (*arg) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2641 return arg; // expand (next) command |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2642 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2643 if (doautocmd) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2644 xp->xp_context = EXPAND_FILES; // expand file names |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2645 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2646 xp->xp_context = EXPAND_NOTHING; // pattern is not expanded |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2647 return NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2648 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2649 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2650 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2651 * Function given to ExpandGeneric() to obtain the list of event names. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2652 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2653 char_u * |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2654 get_event_name(expand_T *xp UNUSED, int idx) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2655 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2656 if (idx < augroups.ga_len) // First list group names, if wanted |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2657 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2658 if (!include_groups || AUGROUP_NAME(idx) == NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2659 || AUGROUP_NAME(idx) == get_deleted_augroup()) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2660 return (char_u *)""; // skip deleted entries |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2661 return AUGROUP_NAME(idx); // return a name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2662 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2663 return (char_u *)event_names[idx - augroups.ga_len].name; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2664 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2665 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2666 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2667 #if defined(FEAT_EVAL) || defined(PROTO) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2668 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2669 * Return TRUE if autocmd is supported. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2670 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2671 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2672 autocmd_supported(char_u *name) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2673 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2674 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2675 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2676 return (event_name2nr(name, &p) != NUM_EVENTS); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2677 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2678 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2679 /* |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2680 * Return TRUE if an autocommand is defined for a group, event and |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2681 * pattern: The group can be omitted to accept any group. "event" and "pattern" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2682 * can be NULL to accept any event and pattern. "pattern" can be NULL to accept |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2683 * any pattern. Buffer-local patterns <buffer> or <buffer=N> are accepted. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2684 * Used for: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2685 * exists("#Group") or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2686 * exists("#Group#Event") or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2687 * exists("#Group#Event#pat") or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2688 * exists("#Event") or |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2689 * exists("#Event#pat") |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2690 */ |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2691 int |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2692 au_exists(char_u *arg) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2693 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2694 char_u *arg_save; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2695 char_u *pattern = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2696 char_u *event_name; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2697 char_u *p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2698 event_T event; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2699 AutoPat *ap; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2700 buf_T *buflocal_buf = NULL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2701 int group; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2702 int retval = FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2703 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2704 // Make a copy so that we can change the '#' chars to a NUL. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2705 arg_save = vim_strsave(arg); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2706 if (arg_save == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2707 return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2708 p = vim_strchr(arg_save, '#'); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2709 if (p != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2710 *p++ = NUL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2711 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2712 // First, look for an autocmd group name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2713 group = au_find_group(arg_save); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2714 if (group == AUGROUP_ERROR) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2715 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2716 // Didn't match a group name, assume the first argument is an event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2717 group = AUGROUP_ALL; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2718 event_name = arg_save; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2719 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2720 else |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2721 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2722 if (p == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2723 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2724 // "Group": group name is present and it's recognized |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2725 retval = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2726 goto theend; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2727 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2728 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2729 // Must be "Group#Event" or "Group#Event#pat". |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2730 event_name = p; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2731 p = vim_strchr(event_name, '#'); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2732 if (p != NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2733 *p++ = NUL; // "Group#Event#pat" |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2734 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2735 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2736 pattern = p; // "pattern" is NULL when there is no pattern |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2737 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2738 // find the index (enum) for the event name |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2739 event = event_name2nr(event_name, &p); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2740 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2741 // return FALSE if the event name is not recognized |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2742 if (event == NUM_EVENTS) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2743 goto theend; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2744 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2745 // Find the first autocommand for this event. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2746 // If there isn't any, return FALSE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2747 // If there is one and no pattern given, return TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2748 ap = first_autopat[(int)event]; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2749 if (ap == NULL) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2750 goto theend; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2751 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2752 // if pattern is "<buffer>", special handling is needed which uses curbuf |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2753 // for pattern "<buffer=N>, fnamecmp() will work fine |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2754 if (pattern != NULL && STRICMP(pattern, "<buffer>") == 0) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2755 buflocal_buf = curbuf; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2756 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2757 // Check if there is an autocommand with the given pattern. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2758 for ( ; ap != NULL; ap = ap->next) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2759 // only use a pattern when it has not been removed and has commands. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2760 // For buffer-local autocommands, fnamecmp() works fine. |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2761 if (ap->pat != NULL && ap->cmds != NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2762 && (group == AUGROUP_ALL || ap->group == group) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2763 && (pattern == NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2764 || (buflocal_buf == NULL |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2765 ? fnamecmp(ap->pat, pattern) == 0 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2766 : ap->buflocal_nr == buflocal_buf->b_fnum))) |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2767 { |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2768 retval = TRUE; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2769 break; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2770 } |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2771 |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2772 theend: |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2773 vim_free(arg_save); |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2774 return retval; |
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2775 } |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2776 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2777 /* |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2778 * autocmd_add() and autocmd_delete() functions |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2779 */ |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2780 static void |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2781 autocmd_add_or_delete(typval_T *argvars, typval_T *rettv, int delete) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2782 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2783 list_T *aucmd_list; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2784 listitem_T *li; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2785 dict_T *event_dict; |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2786 dictitem_T *di; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2787 char_u *event_name = NULL; |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2788 list_T *event_list; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2789 listitem_T *eli; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2790 event_T event; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2791 char_u *group_name = NULL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2792 int group; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2793 char_u *pat = NULL; |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2794 list_T *pat_list; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2795 listitem_T *pli; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2796 char_u *cmd = NULL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2797 char_u *end; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2798 int once; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2799 int nested; |
28978
3c3bdb8069f5
patch 8.2.5011: Replacing an autocommand requires several lines
Bram Moolenaar <Bram@vim.org>
parents:
28917
diff
changeset
|
2800 int replace; // replace the cmd for a group/event |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2801 int retval = VVAL_TRUE; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2802 int save_augroup = current_augroup; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2803 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2804 rettv->v_type = VAR_BOOL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2805 rettv->vval.v_number = VVAL_FALSE; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2806 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2807 if (check_for_list_arg(argvars, 0) == FAIL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2808 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2809 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2810 aucmd_list = argvars[0].vval.v_list; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2811 if (aucmd_list == NULL) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2812 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2813 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2814 FOR_ALL_LIST_ITEMS(aucmd_list, li) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2815 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2816 VIM_CLEAR(group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2817 VIM_CLEAR(cmd); |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2818 event_name = NULL; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2819 event_list = NULL; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2820 pat = NULL; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2821 pat_list = NULL; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2822 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2823 if (li->li_tv.v_type != VAR_DICT) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2824 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2825 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2826 event_dict = li->li_tv.vval.v_dict; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2827 if (event_dict == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2828 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2829 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2830 di = dict_find(event_dict, (char_u *)"event", -1); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2831 if (di != NULL) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2832 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2833 if (di->di_tv.v_type == VAR_STRING) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2834 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2835 event_name = di->di_tv.vval.v_string; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2836 if (event_name == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2837 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2838 emsg(_(e_string_required)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2839 continue; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2840 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2841 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2842 else if (di->di_tv.v_type == VAR_LIST) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2843 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2844 event_list = di->di_tv.vval.v_list; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2845 if (event_list == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2846 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2847 emsg(_(e_list_required)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2848 continue; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2849 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2850 } |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2851 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2852 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2853 emsg(_(e_string_or_list_expected)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2854 continue; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2855 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2856 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2857 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2858 group_name = dict_get_string(event_dict, "group", TRUE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2859 if (group_name == NULL || *group_name == NUL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2860 // if the autocmd group name is not specified, then use the current |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2861 // autocmd group |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2862 group = current_augroup; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2863 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2864 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2865 group = au_find_group(group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2866 if (group == AUGROUP_ERROR) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2867 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2868 if (delete) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2869 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2870 semsg(_(e_no_such_group_str), group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2871 retval = VVAL_FALSE; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2872 break; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2873 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2874 // group is not found, create it now |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2875 group = au_new_group(group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2876 if (group == AUGROUP_ERROR) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2877 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2878 semsg(_(e_no_such_group_str), group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2879 retval = VVAL_FALSE; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2880 break; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2881 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2882 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2883 current_augroup = group; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2884 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2885 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2886 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2887 // if a buffer number is specified, then generate a pattern of the form |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2888 // "<buffer=n>. Otherwise, use the pattern supplied by the user. |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2889 if (dict_has_key(event_dict, "bufnr")) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2890 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2891 varnumber_T bnum; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2892 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2893 bnum = dict_get_number_def(event_dict, "bufnr", -1); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2894 if (bnum == -1) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2895 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2896 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2897 vim_snprintf((char *)IObuff, IOSIZE, "<buffer=%d>", (int)bnum); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2898 pat = IObuff; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2899 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2900 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2901 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2902 di = dict_find(event_dict, (char_u *)"pattern", -1); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2903 if (di != NULL) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2904 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2905 if (di->di_tv.v_type == VAR_STRING) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2906 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2907 pat = di->di_tv.vval.v_string; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2908 if (pat == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2909 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2910 emsg(_(e_string_required)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2911 continue; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2912 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2913 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2914 else if (di->di_tv.v_type == VAR_LIST) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2915 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2916 pat_list = di->di_tv.vval.v_list; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2917 if (pat_list == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2918 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2919 emsg(_(e_list_required)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2920 continue; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2921 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2922 } |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2923 else |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2924 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2925 emsg(_(e_string_or_list_expected)); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2926 continue; |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2927 } |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2928 } |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2929 else if (delete) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2930 pat = (char_u *)""; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2931 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2932 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2933 once = dict_get_bool(event_dict, "once", FALSE); |
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2934 nested = dict_get_bool(event_dict, "nested", FALSE); |
28978
3c3bdb8069f5
patch 8.2.5011: Replacing an autocommand requires several lines
Bram Moolenaar <Bram@vim.org>
parents:
28917
diff
changeset
|
2935 // if 'replace' is true, then remove all the commands associated with |
3c3bdb8069f5
patch 8.2.5011: Replacing an autocommand requires several lines
Bram Moolenaar <Bram@vim.org>
parents:
28917
diff
changeset
|
2936 // this autocmd event/group and add the new command. |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2937 replace = dict_get_bool(event_dict, "replace", FALSE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2938 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
2939 cmd = dict_get_string(event_dict, "cmd", TRUE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2940 if (cmd == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2941 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2942 if (delete) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2943 cmd = vim_strsave((char_u *)""); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2944 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2945 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2946 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2947 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2948 if (delete && (event_name == NULL |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2949 || (event_name[0] == '*' && event_name[1] == NUL))) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2950 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2951 // if the event name is not specified or '*', delete all the events |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2952 for (event = (event_T)0; (int)event < NUM_EVENTS; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2953 event = (event_T)((int)event + 1)) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2954 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2955 if (do_autocmd_event(event, pat, once, nested, cmd, delete, |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2956 group, 0) == FAIL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2957 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2958 retval = VVAL_FALSE; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2959 break; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2960 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2961 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2962 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2963 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2964 { |
29022
e79bfdc53aee
patch 8.2.5033: build error with +eval but without +quickfix
Bram Moolenaar <Bram@vim.org>
parents:
29016
diff
changeset
|
2965 char_u *p = NULL; |
e79bfdc53aee
patch 8.2.5033: build error with +eval but without +quickfix
Bram Moolenaar <Bram@vim.org>
parents:
29016
diff
changeset
|
2966 |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2967 eli = NULL; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2968 end = NULL; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2969 while (TRUE) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
2970 { |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2971 if (event_list != NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2972 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2973 if (eli == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2974 eli = event_list->lv_first; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2975 else |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2976 eli = eli->li_next; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2977 if (eli == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2978 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2979 if (eli->li_tv.v_type != VAR_STRING |
29058
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2980 || (p = eli->li_tv.vval.v_string) == NULL) |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2981 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2982 emsg(_(e_string_required)); |
29058
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2983 break; |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2984 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2985 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2986 else |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2987 { |
29058
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2988 if (p == NULL) |
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2989 p = event_name; |
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2990 if (p == NULL || *p == NUL) |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2991 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2992 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2993 |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2994 event = event_name2nr(p, &end); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2995 if (event == NUM_EVENTS || *end != NUL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2996 { |
29058
eee580a4c402
patch 8.2.5051: check for autocmd_add() event argument is confusing
Bram Moolenaar <Bram@vim.org>
parents:
29054
diff
changeset
|
2997 // this also catches something following a valid event name |
29016
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2998 semsg(_(e_no_such_event_str), p); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
2999 retval = VVAL_FALSE; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3000 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3001 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3002 if (pat != NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3003 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3004 if (do_autocmd_event(event, pat, once, nested, cmd, |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3005 delete | replace, group, 0) == FAIL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3006 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3007 retval = VVAL_FALSE; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3008 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3009 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3010 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3011 else if (pat_list != NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3012 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3013 FOR_ALL_LIST_ITEMS(pat_list, pli) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3014 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3015 if (pli->li_tv.v_type != VAR_STRING |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3016 || pli->li_tv.vval.v_string == NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3017 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3018 emsg(_(e_string_required)); |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3019 continue; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3020 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3021 if (do_autocmd_event(event, |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3022 pli->li_tv.vval.v_string, once, nested, |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3023 cmd, delete | replace, group, 0) == |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3024 FAIL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3025 { |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3026 retval = VVAL_FALSE; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3027 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3028 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3029 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3030 if (retval == VVAL_FALSE) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3031 break; |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3032 } |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3033 if (event_name != NULL) |
aadeddf38d9b
patch 8.2.5030: autocmd_add() can only handle one event and pattern
Bram Moolenaar <Bram@vim.org>
parents:
28978
diff
changeset
|
3034 p = end; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3035 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3036 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3037 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3038 // if only the autocmd group name is specified for delete and the |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3039 // autocmd event, pattern and cmd are not specified, then delete the |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3040 // autocmd group. |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3041 if (delete && group_name != NULL && |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3042 (event_name == NULL || event_name[0] == NUL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3043 && (pat == NULL || pat[0] == NUL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3044 && (cmd == NULL || cmd[0] == NUL)) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3045 au_del_group(group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3046 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3047 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3048 VIM_CLEAR(group_name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3049 VIM_CLEAR(cmd); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3050 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3051 current_augroup = save_augroup; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3052 rettv->vval.v_number = retval; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3053 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3054 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3055 /* |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3056 * autocmd_add() function |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3057 */ |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3058 void |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3059 f_autocmd_add(typval_T *argvars, typval_T *rettv) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3060 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3061 autocmd_add_or_delete(argvars, rettv, FALSE); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3062 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3063 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3064 /* |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3065 * autocmd_delete() function |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3066 */ |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3067 void |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3068 f_autocmd_delete(typval_T *argvars, typval_T *rettv) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3069 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3070 autocmd_add_or_delete(argvars, rettv, TRUE); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3071 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3072 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3073 /* |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3074 * autocmd_get() function |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3075 * Returns a List of autocmds. |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3076 */ |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3077 void |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3078 f_autocmd_get(typval_T *argvars, typval_T *rettv) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3079 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3080 event_T event_arg = NUM_EVENTS; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3081 event_T event; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3082 AutoPat *ap; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3083 AutoCmd *ac; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3084 list_T *event_list; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3085 dict_T *event_dict; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3086 char_u *event_name = NULL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3087 char_u *pat = NULL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3088 char_u *name = NULL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3089 int group = AUGROUP_ALL; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3090 |
29138
175eacde28b8
patch 8.2.5089: some functions return a different value on failure
Bram Moolenaar <Bram@vim.org>
parents:
29058
diff
changeset
|
3091 if (rettv_list_alloc(rettv) == FAIL) |
175eacde28b8
patch 8.2.5089: some functions return a different value on failure
Bram Moolenaar <Bram@vim.org>
parents:
29058
diff
changeset
|
3092 return; |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3093 if (check_for_opt_dict_arg(argvars, 0) == FAIL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3094 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3095 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3096 if (argvars[0].v_type == VAR_DICT) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3097 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3098 // return only the autocmds in the specified group |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3099 if (dict_has_key(argvars[0].vval.v_dict, "group")) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3100 { |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
3101 name = dict_get_string(argvars[0].vval.v_dict, "group", TRUE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3102 if (name == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3103 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3104 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3105 if (*name == NUL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3106 group = AUGROUP_DEFAULT; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3107 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3108 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3109 group = au_find_group(name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3110 if (group == AUGROUP_ERROR) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3111 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3112 semsg(_(e_no_such_group_str), name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3113 vim_free(name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3114 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3115 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3116 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3117 vim_free(name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3118 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3119 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3120 // return only the autocmds for the specified event |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3121 if (dict_has_key(argvars[0].vval.v_dict, "event")) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3122 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3123 int i; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3124 |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
3125 name = dict_get_string(argvars[0].vval.v_dict, "event", TRUE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3126 if (name == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3127 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3128 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3129 if (name[0] == '*' && name[1] == NUL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3130 event_arg = NUM_EVENTS; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3131 else |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3132 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3133 for (i = 0; event_names[i].name != NULL; i++) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3134 if (STRICMP(event_names[i].name, name) == 0) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3135 break; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3136 if (event_names[i].name == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3137 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3138 semsg(_(e_no_such_event_str), name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3139 vim_free(name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3140 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3141 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3142 event_arg = event_names[i].event; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3143 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3144 vim_free(name); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3145 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3146 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3147 // return only the autocmds for the specified pattern |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3148 if (dict_has_key(argvars[0].vval.v_dict, "pattern")) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3149 { |
29442
827d9f2b7a71
patch 9.0.0063: too many type casts for dict_get functions
Bram Moolenaar <Bram@vim.org>
parents:
29438
diff
changeset
|
3150 pat = dict_get_string(argvars[0].vval.v_dict, "pattern", TRUE); |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3151 if (pat == NULL) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3152 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3153 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3154 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3155 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3156 event_list = rettv->vval.v_list; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3157 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3158 // iterate through all the autocmd events |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3159 for (event = (event_T)0; (int)event < NUM_EVENTS; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3160 event = (event_T)((int)event + 1)) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3161 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3162 if (event_arg != NUM_EVENTS && event != event_arg) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3163 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3164 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3165 event_name = event_nr2name(event); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3166 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3167 // iterate through all the patterns for this autocmd event |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3168 FOR_ALL_AUTOCMD_PATTERNS(event, ap) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3169 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3170 char_u *group_name; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3171 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3172 if (group != AUGROUP_ALL && group != ap->group) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3173 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3174 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3175 if (pat != NULL && STRCMP(pat, ap->pat) != 0) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3176 continue; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3177 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3178 group_name = get_augroup_name(NULL, ap->group); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3179 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3180 // iterate through all the commands for this pattern and add one |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3181 // item for each cmd. |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3182 for (ac = ap->cmds; ac != NULL; ac = ac->next) |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3183 { |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3184 event_dict = dict_alloc(); |
29054
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3185 if (event_dict == NULL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3186 || list_append_dict(event_list, event_dict) == FAIL) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3187 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3188 |
29054
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3189 if (dict_add_string(event_dict, "event", event_name) == FAIL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3190 || dict_add_string(event_dict, "group", |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3191 group_name == NULL ? (char_u *)"" |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3192 : group_name) == FAIL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3193 || (ap->buflocal_nr != 0 |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3194 && (dict_add_number(event_dict, "bufnr", |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3195 ap->buflocal_nr) == FAIL)) |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3196 || dict_add_string(event_dict, "pattern", |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3197 ap->pat) == FAIL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3198 || dict_add_string(event_dict, "cmd", ac->cmd) == FAIL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3199 || dict_add_bool(event_dict, "once", ac->once) == FAIL |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3200 || dict_add_bool(event_dict, "nested", |
e7bd4c788053
patch 8.2.5049: insufficient tests for autocommands
Bram Moolenaar <Bram@vim.org>
parents:
29022
diff
changeset
|
3201 ac->nested) == FAIL) |
28917
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3202 return; |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3203 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3204 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3205 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3206 |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3207 vim_free(pat); |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3208 } |
c5862dfaf0bd
patch 8.2.4981: it is not possible to manipulate autocommands
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
3209 |
15634
746b95fd25ad
patch 8.1.0825: code for autocommands is mixed with file I/O code
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3210 #endif |