diff options
| author | David Moc <personal@cdatgoose.org> | 2026-06-02 13:50:21 +0200 |
|---|---|---|
| committer | David Moc <personal@cdatgoose.org> | 2026-06-02 13:50:21 +0200 |
| commit | a15cb041654ae307add0b998b526c87c3f42bf5f (patch) | |
| tree | 225bb4b70e9fa05aa5f4d2722a1a9cf5fc6fca7f /include/types.h | |
| parent | 6aeaa171dc1ca43392f53cbd02097f76e1b1c5a0 (diff) | |
Add plugin hooks and mode plugins
Diffstat (limited to 'include/types.h')
| -rw-r--r-- | include/types.h | 138 |
1 files changed, 93 insertions, 45 deletions
diff --git a/include/types.h b/include/types.h index 800c3d6..2b63ad3 100644 --- a/include/types.h +++ b/include/types.h @@ -7,6 +7,7 @@ typedef struct ecex ecex_t; typedef struct buffer buffer_t; typedef struct ecex_window ecex_window_t; typedef struct ecex_draw_context ecex_draw_context_t; +typedef struct ecex_plugin_runtime ecex_plugin_runtime_t; typedef int (*ecex_command_fn)(ecex_t *ed); typedef int (*ecex_interactive_line_fn)(ecex_t *ed, buffer_t *buffer, size_t line, const char *payload, void *userdata); @@ -18,6 +19,37 @@ typedef int (*ecex_buffer_tick_ms_fn)(ecex_t *ed, buffer_t *buffer, int now_ms, typedef int (*ecex_buffer_mouse_fn)(ecex_t *ed, buffer_t *buffer, int event, int x, int y, int button, void *userdata); typedef int (*ecex_file_handler_fn)(ecex_t *ed, buffer_t *buffer); typedef void (*ecex_buffer_userdata_free_fn)(void *userdata); +typedef void (*ecex_hook_free_fn)(void *userdata); +typedef void (*ecex_command_hook_fn)(ecex_t *ed, const char *command, int event, int result, void *userdata); +typedef void (*ecex_prefix_hook_fn)(ecex_t *ed, const char *prefix, int event, void *userdata); +typedef void (*ecex_buffer_hook_fn)(ecex_t *ed, buffer_t *buffer, int event, void *userdata); +typedef int (*ecex_completion_provider_fn)(ecex_t *ed, + buffer_t *buffer, + const char *prefix, + char *out, + size_t out_size, + void *userdata); + +typedef enum ecex_command_hook_event { + ECEX_COMMAND_HOOK_BEFORE = 1, + ECEX_COMMAND_HOOK_AFTER = 2, +} ecex_command_hook_event_t; + +typedef enum ecex_prefix_hook_event { + ECEX_PREFIX_HOOK_BEGIN = 1, + ECEX_PREFIX_HOOK_UPDATE = 2, + ECEX_PREFIX_HOOK_CANCEL = 3, + ECEX_PREFIX_HOOK_FINISH = 4, + ECEX_PREFIX_HOOK_UNDEFINED = 5, +} ecex_prefix_hook_event_t; + +typedef enum ecex_buffer_hook_event { + ECEX_BUFFER_HOOK_CREATE = 1, + ECEX_BUFFER_HOOK_SWITCH = 2, + ECEX_BUFFER_HOOK_SAVE = 3, + ECEX_BUFFER_HOOK_KILL = 4, + ECEX_BUFFER_HOOK_MODE_CHANGE = 5, +} ecex_buffer_hook_event_t; typedef enum ecex_prompt_request { ECEX_PROMPT_NONE = 0, @@ -154,6 +186,7 @@ struct buffer { void *media_pipe; double media_last_frame_time; int media_playing; + int media_audio_pid; char media_status[256]; ecex_buffer_render_fn render_fn; @@ -198,42 +231,43 @@ typedef struct ecex_mode_keybind { char *command; } ecex_mode_keybind_t; -typedef struct ecex_major_mode { - int id; +typedef struct ecex_command_hook { char *name; -} ecex_major_mode_t; + ecex_command_hook_fn fn; + void *userdata; + ecex_hook_free_fn free_fn; +} ecex_command_hook_t; -typedef enum ecex_var_kind { - ECEX_VAR_BYTES = 0, - ECEX_VAR_I32 = 1, -} ecex_var_kind_t; +typedef struct ecex_prefix_hook { + char *name; + ecex_prefix_hook_fn fn; + void *userdata; + ecex_hook_free_fn free_fn; +} ecex_prefix_hook_t; -typedef struct ecex_var_entry { - void *owner; +typedef struct ecex_buffer_hook { char *name; - void *data; - size_t elem_size; - size_t count; - int kind; - int dynamic; -} ecex_var_entry_t; - -typedef struct ecex_text_entry { - void *owner; - int id; - char *text; - size_t len; -} ecex_text_entry_t; + ecex_buffer_hook_fn fn; + void *userdata; + ecex_hook_free_fn free_fn; +} ecex_buffer_hook_t; -typedef struct ecex_file_handler { - char *extension; - ecex_file_handler_fn fn; -} ecex_file_handler_t; +typedef struct ecex_completion_provider { + char *name; + int mode; + ecex_completion_provider_fn fn; + void *userdata; + ecex_hook_free_fn free_fn; + char *detail; + char **words; + size_t word_count; + int flags; +} ecex_completion_provider_t; -typedef struct ecex_object_entry { - void *ptr; - size_t size; -} ecex_object_entry_t; +typedef struct ecex_major_mode { + int id; + char *name; +} ecex_major_mode_t; struct ecex_window { buffer_t *buffer; @@ -273,26 +307,34 @@ struct ecex { size_t mode_keybind_cap; size_t mode_keybind_count; + ecex_command_hook_t *command_hooks; + size_t command_hook_cap; + size_t command_hook_count; + + ecex_prefix_hook_t *prefix_hooks; + size_t prefix_hook_cap; + size_t prefix_hook_count; + + ecex_buffer_hook_t *buffer_hooks; + size_t buffer_hook_cap; + size_t buffer_hook_count; + + ecex_completion_provider_t *completion_providers; + size_t completion_provider_cap; + size_t completion_provider_count; + int completion_cycle_active; + buffer_t *completion_cycle_buffer; + size_t completion_cycle_start; + size_t completion_cycle_index; + char completion_cycle_prefix[256]; + char completion_cycle_current[256]; + ecex_major_mode_t *major_modes; size_t major_mode_cap; size_t major_mode_count; int next_major_mode_id; - ecex_var_entry_t *vars; - size_t var_cap; - size_t var_count; - - ecex_text_entry_t *texts; - size_t text_cap; - size_t text_count; - - ecex_file_handler_t *file_handlers; - size_t file_handler_cap; - size_t file_handler_count; - - ecex_object_entry_t *objects; - size_t object_cap; - size_t object_count; + ecex_plugin_runtime_t *plugins; char *last_eval_source; char *last_eval_filename; @@ -305,13 +347,19 @@ struct ecex { char prompt_message[128]; char *config_path; + char message[1024]; + unsigned long message_revision; ecex_clipboard_get_fn clipboard_get; ecex_clipboard_set_fn clipboard_set; void *clipboard_userdata; + char *clipboard_text; int should_quit; + unsigned long ui_revision; + unsigned long font_revision; + ecex_theme_t theme; }; |
