diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
commit | 1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch) | |
tree | cd08258054db80bb9a11b1061bb091c70b76926a /src/nvim/autocmd_defs.h | |
parent | eaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff) | |
parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
download | rneovim-aucmd_textputpost.tar.gz rneovim-aucmd_textputpost.tar.bz2 rneovim-aucmd_textputpost.zip |
Merge remote-tracking branch 'upstream/master' into aucmd_textputpostaucmd_textputpost
Diffstat (limited to 'src/nvim/autocmd_defs.h')
-rw-r--r-- | src/nvim/autocmd_defs.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/nvim/autocmd_defs.h b/src/nvim/autocmd_defs.h new file mode 100644 index 0000000000..4639ec2731 --- /dev/null +++ b/src/nvim/autocmd_defs.h @@ -0,0 +1,71 @@ +#pragma once + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +#include "klib/kvec.h" +#include "nvim/api/private/defs.h" +#include "nvim/buffer_defs.h" +#include "nvim/eval/typval_defs.h" +#include "nvim/ex_cmds_defs.h" +#include "nvim/regexp_defs.h" +#include "nvim/types_defs.h" + +// event_T definition +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "auevents_enum.generated.h" +#endif + +/// Struct to save values in before executing autocommands for a buffer that is +/// not the current buffer. +typedef struct { + buf_T *save_curbuf; ///< saved curbuf + int use_aucmd_win_idx; ///< index in aucmd_win[] if >= 0 + handle_T save_curwin_handle; ///< ID of saved curwin + handle_T new_curwin_handle; ///< ID of new curwin + handle_T save_prevwin_handle; ///< ID of saved prevwin + bufref_T new_curbuf; ///< new curbuf + char *globaldir; ///< saved value of globaldir + bool save_VIsual_active; ///< saved VIsual_active + int save_State; ///< saved State +} aco_save_T; + +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 { + 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 *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; |