diff options
author | glepnir <glephunter@gmail.com> | 2025-01-27 07:28:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-26 15:28:33 -0800 |
commit | d84a95da7e11555376a0ce60a0d4b5fbe15892d3 (patch) | |
tree | 6cb18bc5dc232bafd0f6f932a8ac4f1f2d6d698d /src | |
parent | b8e947ed4ed04f9aeef471f579451bbf2bb2993d (diff) | |
download | rneovim-d84a95da7e11555376a0ce60a0d4b5fbe15892d3.tar.gz rneovim-d84a95da7e11555376a0ce60a0d4b5fbe15892d3.tar.bz2 rneovim-d84a95da7e11555376a0ce60a0d4b5fbe15892d3.zip |
feat(api): nvim_get_autocmds filter by id#31549
Problem:
nvim_get_autocmds cannot filter by id.
Solution:
Support it.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/autocmd.c | 41 | ||||
-rw-r--r-- | src/nvim/api/keysets_defs.h | 1 |
2 files changed, 24 insertions, 18 deletions
diff --git a/src/nvim/api/autocmd.c b/src/nvim/api/autocmd.c index ae349fdb95..1e19e90151 100644 --- a/src/nvim/api/autocmd.c +++ b/src/nvim/api/autocmd.c @@ -68,32 +68,31 @@ static int64_t next_autocmd_id = 1; /// match any combination of them. /// /// @param opts Dict with at least one of the following: -/// - group (string|integer): the autocommand group name or id to match against. -/// - event (string|array): event or events to match against |autocmd-events|. -/// - pattern (string|array): pattern or patterns to match against |autocmd-pattern|. -/// Cannot be used with {buffer} -/// - buffer: Buffer number or list of buffer numbers for buffer local autocommands +/// - buffer: (integer) Buffer number or list of buffer numbers for buffer local autocommands /// |autocmd-buflocal|. Cannot be used with {pattern} +/// - event: (string|table) event or events to match against |autocmd-events|. +/// - id: (integer) Autocommand ID to match. +/// - group: (string|table) the autocommand group name or id to match against. +/// - pattern: (string|table) pattern or patterns to match against |autocmd-pattern|. +/// Cannot be used with {buffer} /// @return Array of autocommands matching the criteria, with each item /// containing the following fields: -/// - id (number): the autocommand id (only when defined with the API). -/// - group (integer): the autocommand group id. -/// - group_name (string): the autocommand group name. -/// - desc (string): the autocommand description. -/// - event (string): the autocommand event. -/// - command (string): the autocommand command. Note: this will be empty if a callback is set. -/// - callback (function|string|nil): Lua function or name of a Vim script function +/// - buffer: (integer) the buffer number. +/// - buflocal: (boolean) true if the autocommand is buffer local. +/// - command: (string) the autocommand command. Note: this will be empty if a callback is set. +/// - callback: (function|string|nil): Lua function or name of a Vim script function /// which is executed when this autocommand is triggered. -/// - once (boolean): whether the autocommand is only run once. -/// - pattern (string): the autocommand pattern. +/// - desc: (string) the autocommand description. +/// - event: (string) the autocommand event. +/// - id: (integer) the autocommand id (only when defined with the API). +/// - group: (integer) the autocommand group id. +/// - group_name: (string) the autocommand group name. +/// - once: (boolean) whether the autocommand is only run once. +/// - pattern: (string) the autocommand pattern. /// If the autocommand is buffer local |autocmd-buffer-local|: -/// - buflocal (boolean): true if the autocommand is buffer local. -/// - buffer (number): the buffer number. Array nvim_get_autocmds(Dict(get_autocmds) *opts, Arena *arena, Error *err) FUNC_API_SINCE(9) { - // TODO(tjdevries): Would be cool to add nvim_get_autocmds({ id = ... }) - ArrayBuilder autocmd_list = KV_INITIAL_VALUE; kvi_init(autocmd_list); char *pattern_filters[AUCMD_MAX_PATTERNS]; @@ -127,6 +126,8 @@ Array nvim_get_autocmds(Dict(get_autocmds) *opts, Arena *arena, Error *err) }); } + int id = (HAS_KEY(opts, get_autocmds, id)) ? (int)opts->id : -1; + if (HAS_KEY(opts, get_autocmds, event)) { check_event = true; @@ -237,6 +238,10 @@ Array nvim_get_autocmds(Dict(get_autocmds) *opts, Arena *arena, Error *err) continue; } + if (id != -1 && ac->id != id) { + continue; + } + // Skip autocmds from invalid groups if passed. if (group != 0 && ap->group != group) { continue; diff --git a/src/nvim/api/keysets_defs.h b/src/nvim/api/keysets_defs.h index 953e467f1e..6625908cda 100644 --- a/src/nvim/api/keysets_defs.h +++ b/src/nvim/api/keysets_defs.h @@ -263,6 +263,7 @@ typedef struct { Union(Integer, String) group; Union(String, ArrayOf(String)) pattern; Union(Integer, ArrayOf(Integer)) buffer; + Integer id; } Dict(get_autocmds); typedef struct { |