aboutsummaryrefslogtreecommitdiff
path: root/src/gen/gen_events.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/gen/gen_events.lua')
-rw-r--r--src/gen/gen_events.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/gen/gen_events.lua b/src/gen/gen_events.lua
new file mode 100644
index 0000000000..77f766bb28
--- /dev/null
+++ b/src/gen/gen_events.lua
@@ -0,0 +1,42 @@
+local fileio_enum_file = arg[1]
+local names_file = arg[2]
+
+local auevents = require('nvim.auevents')
+local events = auevents.events
+
+local enum_tgt = io.open(fileio_enum_file, 'w')
+local names_tgt = io.open(names_file, 'w')
+
+enum_tgt:write([[
+// IWYU pragma: private, include "nvim/autocmd_defs.h"
+
+typedef enum auto_event {]])
+names_tgt:write([[
+static const struct event_name {
+ size_t len;
+ char *name;
+ int event;
+} event_names[] = {]])
+
+local aliases = 0
+for i, event in ipairs(events) do
+ enum_tgt:write(('\n EVENT_%s = %u,'):format(event[1]:upper(), i + aliases - 1))
+ -- Events with positive keys aren't allowed in 'eventignorewin'.
+ local event_int = ('%sEVENT_%s'):format(event[3] and '-' or '', event[1]:upper())
+ names_tgt:write(('\n {%u, "%s", %s},'):format(#event[1], event[1], event_int))
+ for _, alias in ipairs(event[2]) do
+ aliases = aliases + 1
+ names_tgt:write(('\n {%u, "%s", %s},'):format(#alias, alias, event_int))
+ enum_tgt:write(('\n EVENT_%s = %u,'):format(alias:upper(), i + aliases - 1))
+ end
+ if i == #events then -- Last item.
+ enum_tgt:write(('\n NUM_EVENTS = %u,'):format(i + aliases))
+ end
+end
+
+names_tgt:write('\n {0, NULL, (event_T)0},\n};\n')
+names_tgt:write('\nstatic AutoCmdVec autocmds[NUM_EVENTS] = { 0 };\n')
+names_tgt:close()
+
+enum_tgt:write('\n} event_T;\n')
+enum_tgt:close()