aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/autocmd.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/autocmd.h')
-rw-r--r--src/nvim/autocmd.h70
1 files changed, 32 insertions, 38 deletions
diff --git a/src/nvim/autocmd.h b/src/nvim/autocmd.h
index 6dbd18ba7c..9e6c534581 100644
--- a/src/nvim/autocmd.h
+++ b/src/nvim/autocmd.h
@@ -12,9 +12,7 @@
#include "nvim/regexp_defs.h"
#include "nvim/types.h"
-struct AutoCmd_S;
struct AutoPatCmd_S;
-struct AutoPat_S;
// event_T definition
#ifdef INCLUDE_GENERATED_DECLARATIONS
@@ -35,49 +33,45 @@ typedef struct {
int save_State; ///< saved State
} aco_save_T;
-typedef struct AutoCmd_S AutoCmd;
-struct AutoCmd_S {
- AucmdExecutable exec;
- bool once; // "One shot": removed after execution
- bool nested; // If autocommands nest here
- bool last; // last command in list
- int64_t id; // ID used for uniquely tracking an autocmd.
- sctx_T script_ctx; // script context where it is defined
- char *desc; // Description for the autocmd.
- AutoCmd *next; // Next AutoCmd in list
-};
+typedef struct {
+ size_t refcount; ///< Reference count (freed when reaches zero)
+ char *pat; ///< Pattern as typed
+ regprog_T *reg_prog; ///< Compiled regprog for pattern
+ int group; ///< Group ID
+ int patlen; ///< strlen() of pat
+ int buflocal_nr; ///< !=0 for buffer-local AutoPat
+ char allow_dirs; ///< Pattern may match whole path
+} AutoPat;
-typedef struct AutoPat_S AutoPat;
-struct AutoPat_S {
- AutoPat *next; // next AutoPat in AutoPat list; MUST
- // be the first entry
- char *pat; // pattern as typed (NULL when pattern
- // has been removed)
- regprog_T *reg_prog; // compiled regprog for pattern
- AutoCmd *cmds; // list of commands to do
- int group; // group ID
- int patlen; // strlen() of pat
- int buflocal_nr; // !=0 for buffer-local AutoPat
- char allow_dirs; // Pattern may match whole path
- char last; // last pattern for apply_autocmds()
-};
+typedef struct {
+ AucmdExecutable exec; ///< Command or callback function
+ AutoPat *pat; ///< Pattern reference (NULL when autocmd was removed)
+ int64_t id; ///< ID used for uniquely tracking an autocmd
+ char *desc; ///< Description for the autocmd
+ sctx_T script_ctx; ///< Script context where it is defined
+ bool once; ///< "One shot": removed after execution
+ bool nested; ///< If autocommands nest here
+} AutoCmd;
/// Struct used to keep status while executing autocommands for an event.
typedef struct AutoPatCmd_S AutoPatCmd;
struct AutoPatCmd_S {
- AutoPat *curpat; // next AutoPat to examine
- AutoCmd *nextcmd; // next AutoCmd to execute
- int group; // group being used
- char *fname; // fname to match with
- char *sfname; // sfname to match with
- char *tail; // tail of fname
- event_T event; // current event
- sctx_T script_ctx; // script context where it is defined
- int arg_bufnr; // initially equal to <abuf>, set to zero when buf is deleted
- Object *data; // arbitrary data
- AutoPatCmd *next; // chain of active apc-s for auto-invalidation
+ AutoPat *lastpat; ///< Last matched AutoPat
+ size_t auidx; ///< Current autocmd index to execute
+ size_t ausize; ///< Saved AutoCmd vector size
+ char *fname; ///< Fname to match with
+ char *sfname; ///< Sfname to match with
+ char *tail; ///< Tail of fname
+ int group; ///< Group being used
+ event_T event; ///< Current event
+ sctx_T script_ctx; ///< Script context where it is defined
+ int arg_bufnr; ///< Initially equal to <abuf>, set to zero when buf is deleted
+ Object *data; ///< Arbitrary data
+ AutoPatCmd *next; ///< Chain of active apc-s for auto-invalidation
};
+typedef kvec_t(AutoCmd) AutoCmdVec;
+
// Set by the apply_autocmds_group function if the given event is equal to
// EVENT_FILETYPE. Used by the readfile function in order to determine if
// EVENT_BUFREADPOST triggered the EVENT_FILETYPE.