diff options
author | zeertzjq <zeertzjq@outlook.com> | 2025-03-10 08:27:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-10 00:27:30 +0000 |
commit | c53e00889d38d19ec5e40f97e77280c8d4e33802 (patch) | |
tree | 8fe0677788952c210020fcc436b6f53467ffcd79 | |
parent | b90f649ca2e240c1bfb22fe91247bc90314af1e1 (diff) | |
download | rneovim-c53e00889d38d19ec5e40f97e77280c8d4e33802.tar.gz rneovim-c53e00889d38d19ec5e40f97e77280c8d4e33802.tar.bz2 rneovim-c53e00889d38d19ec5e40f97e77280c8d4e33802.zip |
refactor(gen_events): sort enums case-insensitively (#32811)
This actually only affects the order in which Cmdline* and Cmdwin*
autocommands are listed, and it appears that the names of Cmdwin* were
changed to CmdWin* in 8ed2dbf6e2802516501c11e72e5d6d977e6a07f3 without
explanation.
Also, remove the final NULL element from the names table.
-rw-r--r-- | src/gen/gen_events.lua | 9 | ||||
-rw-r--r-- | src/nvim/autocmd.c | 13 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/gen/gen_events.lua b/src/gen/gen_events.lua index 23ca81b684..c6d97405af 100644 --- a/src/gen/gen_events.lua +++ b/src/gen/gen_events.lua @@ -8,7 +8,9 @@ local aliases = auevents.aliases --- @type string[] local names = vim.tbl_keys(vim.tbl_extend('error', events, aliases)) -table.sort(names) +table.sort(names, function(a, b) + return a:lower() < b:lower() +end) local enum_tgt = assert(io.open(fileio_enum_file, 'w')) local names_tgt = assert(io.open(names_file, 'w')) @@ -22,7 +24,7 @@ static const struct event_name { size_t len; char *name; int event; -} event_names[] = {]]) +} event_names[NUM_EVENTS] = {]]) for i, name in ipairs(names) do enum_tgt:write(('\n EVENT_%s = %u,'):format(name:upper(), i - 1)) @@ -45,11 +47,10 @@ enum_tgt:write(('\n NUM_EVENTS = %u,'):format(#names)) enum_tgt:write('\n} event_T;\n') enum_tgt:close() -names_tgt:write('\n [NUM_EVENTS] = {0, NULL, (event_T)0},\n};\n') +names_tgt:write('\n};\n') names_tgt:write('\nstatic AutoCmdVec autocmds[NUM_EVENTS] = { 0 };\n') local hashorder = vim.tbl_map(string.lower, names) -table.sort(hashorder) local hashfun hashorder, hashfun = hashy.hashy_hash('event_name2nr', hashorder, function(idx) return 'event_names[event_hash[' .. idx .. ']].name' diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index 28c3906ce3..c00a5814b1 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -2267,7 +2267,7 @@ char *set_context_in_autocmd(expand_T *xp, char *arg, bool doautocmd) return NULL; } -// Function given to ExpandGeneric() to obtain the list of event names. +/// Function given to ExpandGeneric() to obtain the list of event names. char *expand_get_event_name(expand_T *xp, int idx) { (void)xp; // xp is a required parameter to be used with ExpandGeneric @@ -2283,14 +2283,23 @@ char *expand_get_event_name(expand_T *xp, int idx) return name; } + int i = idx - next_augroup_id; + if (i < 0 || i >= NUM_EVENTS) { + return NULL; + } + // List event names - return event_names[idx - next_augroup_id].name; + return event_names[i].name; } /// Function given to ExpandGeneric() to obtain the list of event names. Don't /// include groups. char *get_event_name_no_group(expand_T *xp FUNC_ATTR_UNUSED, int idx, bool win) { + if (idx < 0 || idx >= NUM_EVENTS) { + return NULL; + } + if (!win) { return event_names[idx].name; } |