diff options
Diffstat (limited to 'config/ecex_api_completion_plugin.c')
| -rw-r--r-- | config/ecex_api_completion_plugin.c | 806 |
1 files changed, 806 insertions, 0 deletions
diff --git a/config/ecex_api_completion_plugin.c b/config/ecex_api_completion_plugin.c new file mode 100644 index 0000000..dae5745 --- /dev/null +++ b/config/ecex_api_completion_plugin.c @@ -0,0 +1,806 @@ +#include "ecex.h" + +#include <string.h> + +#define ECEX_API_PLUGIN_ID "ecex-mode" +#define ECEX_API_SYMBOLS_PROVIDER "ecex-mode-symbols" +#define ECEX_API_ED_FIELDS_PROVIDER "ecex-mode-ed-fields" +#define ECEX_API_SLOT_ENABLED "enabled" +#if defined(__GNUC__) || defined(__clang__) +#define ECEX_API_UNUSED __attribute__((unused)) +#else +#define ECEX_API_UNUSED +#endif +#define ECEX_API_SYMBOL_WORDS \ + "ecex_t\n" \ + "buffer_t\n" \ + "ecex_window_t\n" \ + "ecex_draw_context_t\n" \ + "ecex_plugin_t\n" \ + "ecex_plugin_runtime_t\n" \ + "ecex_command_fn\n" \ + "ecex_completion_provider_fn\n" \ + "ecex_file_handler_fn\n" \ + "ECEX_CONFIG_BEGIN\n" \ + "ECEX_CONFIG_END\n" \ + "ECEX_PLUGIN_BEGIN\n" \ + "ECEX_PLUGIN_END\n" \ + "ECEX_CONFIG_TRY\n" \ + "ECEX_CONFIG_COMMAND\n" \ + "ECEX_CONFIG_BIND\n" \ + "ECEX_CONFIG_MODE\n" \ + "ECEX_CONFIG_MODE_BIND\n" \ + "ECEX_CONFIG_INCLUDE\n" \ + "ECEX_RGB8\n" \ + "ECEX_ARRAY_COUNT\n" \ + "ecex_new\n" \ + "ecex_free\n" \ + "ecex_config_alloc\n" \ + "ecex_config_calloc\n" \ + "ecex_config_free\n" \ + "ecex_time_seconds\n" \ + "ecex_log\n" \ + "ecex_logf\n" \ + "ecex_log_group_begin\n" \ + "ecex_log_group_end\n" \ + "ecex_log_int\n" \ + "ecex_log_double\n" \ + "ecex_log_ptr\n" \ + "ecex_log_flush\n" \ + "ecex_mem_zero\n" \ + "ecex_i32_get\n" \ + "ecex_i32_set\n" \ + "ecex_prng_next_bounded\n" \ + "ecex_random_bounded\n" \ + "ecex_plugin_register\n" \ + "ecex_plugin_require\n" \ + "ecex_plugin_find\n" \ + "ecex_plugin_id\n" \ + "ecex_plugin_slot_alloc\n" \ + "ecex_plugin_slot_get\n" \ + "ecex_plugin_slot_free\n" \ + "ecex_plugin_slot_set_export_flags\n" \ + "ecex_plugin_slot_read_exported\n" \ + "ecex_plugin_slot_i32_get_scalar\n" \ + "ecex_plugin_slot_i32_get\n" \ + "ecex_plugin_slot_i32_set\n" \ + "ecex_plugin_slot_i32_get_2d\n" \ + "ecex_plugin_slot_i32_set_2d\n" \ + "ecex_plugin_slot_i32_set_scalar\n" \ + "ecex_plugin_object_alloc\n" \ + "ecex_plugin_object_calloc\n" \ + "ecex_plugin_object_free\n" \ + "ecex_plugin_object_valid\n" \ + "ecex_plugin_object_i32_get\n" \ + "ecex_plugin_object_i32_set\n" \ + "ecex_plugin_object_ptr_get\n" \ + "ecex_plugin_object_ptr_set\n" \ + "ecex_plugin_text_set\n" \ + "ecex_plugin_text_set_from_buffer_title\n" \ + "ecex_plugin_text_free\n" \ + "ecex_plugin_text_free_all\n" \ + "ecex_plugin_text_get_drawable\n" \ + "ecex_plugin_file_handler_register\n" \ + "ecex_plugin_file_handlers_run\n" \ + "ecex_buffer_text_len\n" \ + "ecex_buffer_scroll_line_index\n" \ + "ecex_buffer_line_count_int\n" \ + "ecex_buffer_line_copy_text\n" \ + "ecex_run_plugin_file_handlers\n" \ + "ecex_reserve_buffers\n" \ + "ecex_add_buffer\n" \ + "ecex_create_buffer\n" \ + "ecex_find_buffer\n" \ + "ecex_switch_buffer\n" \ + "ecex_current_buffer\n" \ + "ecex_other_buffer\n" \ + "ecex_current_window\n" \ + "ecex_window_count\n" \ + "ecex_sync_current_buffer\n" \ + "ecex_split_window_vertically\n" \ + "ecex_split_window_horizontally\n" \ + "ecex_other_window\n" \ + "ecex_previous_window\n" \ + "ecex_delete_window\n" \ + "ecex_delete_other_windows\n" \ + "ecex_balance_windows\n" \ + "ecex_next_buffer\n" \ + "ecex_previous_buffer\n" \ + "ecex_kill_buffer\n" \ + "ecex_kill_buffer_force\n" \ + "ecex_has_modified_buffers\n" \ + "ecex_validate_bindings\n" \ + "ecex_keep_jit_module\n" \ + "ecex_set_config_path\n" \ + "ecex_config_path\n" \ + "ecex_reload_config\n" \ + "ecex_config_register_commands\n" \ + "ecex_config_bind_keys\n" \ + "ecex_config_bind_mode_keys\n" \ + "ecex_config_define_modes\n" \ + "ecex_apply_theme\n" \ + "ecex_register_command\n" \ + "ecex_execute_command\n" \ + "ecex_add_command_hook\n" \ + "ecex_remove_command_hook\n" \ + "ecex_add_prefix_hook\n" \ + "ecex_remove_prefix_hook\n" \ + "ecex_notify_prefix_hooks\n" \ + "ecex_add_buffer_hook\n" \ + "ecex_remove_buffer_hook\n" \ + "ecex_notify_buffer_hooks\n" \ + "ecex_message\n" \ + "ecex_dependency_available\n" \ + "ecex_plugin_require_dependency\n" \ + "ecex_add_completion_provider\n" \ + "ecex_add_word_completion_provider\n" \ + "ecex_define_word_completion_provider\n" \ + "ecex_completion_provider_add_word\n" \ + "ecex_completion_provider_add_words\n" \ + "ecex_completion_provider_set_detail\n" \ + "ecex_add_clangd_completion_provider\n" \ + "ecex_remove_completion_provider\n" \ + "ecex_buffer_identifier_prefix\n" \ + "ecex_complete_at_point\n" \ + "ecex_set_clipboard_callbacks\n" \ + "ecex_clipboard_get\n" \ + "ecex_clipboard_set\n" \ + "ecex_bind_key\n" \ + "ecex_lookup_key\n" \ + "ecex_define_major_mode\n" \ + "ecex_major_mode_by_name\n" \ + "ecex_major_mode_name\n" \ + "ecex_buffer_set_major_mode\n" \ + "ecex_buffer_set_major_mode_by_name\n" \ + "ecex_buffer_major_mode_name\n" \ + "ecex_bind_mode_key\n" \ + "ecex_lookup_key_for_buffer\n" \ + "ecex_key_sequence_has_prefix_for_buffer\n" \ + "ecex_describe_key_prefix\n" \ + "ecex_auto_set_major_mode\n" \ + "ecex_list_commands\n" \ + "ecex_list_buffers\n" \ + "ecex_create_interactive_buffer\n" \ + "ecex_interactive_append_line\n" \ + "ecex_interactive_activate_current_line\n" \ + "ecex_buffer_set_renderer\n" \ + "ecex_buffer_clear_renderer\n" \ + "ecex_buffer_has_renderer\n" \ + "ecex_buffer_renderer_userdata\n" \ + "ecex_buffer_set_mouse_handler\n" \ + "ecex_buffer_clear_mouse_handler\n" \ + "ecex_buffer_has_mouse_handler\n" \ + "ecex_buffer_mouse_userdata\n" \ + "ecex_buffer_set_animation\n" \ + "ecex_buffer_set_animation_ms\n" \ + "ecex_buffer_clear_animation\n" \ + "ecex_buffer_is_animating\n" \ + "ecex_buffer_animation_userdata\n" \ + "ecex_tick_animations\n" \ + "ecex_buffer_replace_text\n" \ + "ecex_buffer_set_modified\n" \ + "ecex_draw_set_color\n" \ + "ecex_draw_rect\n" \ + "ecex_draw_rect_outline\n" \ + "ecex_draw_line\n" \ + "ecex_draw_text\n" \ + "ecex_draw_text_aligned\n" \ + "ecex_draw_text_width\n" \ + "ecex_draw_rgba\n" \ + "ecex_draw_color_rgba8_i\n" \ + "ecex_draw_rect_i\n" \ + "ecex_draw_rect_outline_i\n" \ + "ecex_draw_line_i\n" \ + "ecex_draw_text_i\n" \ + "ecex_draw_plugin_text_i\n" \ + "ecex_draw_plugin_text_rect_i\n" \ + "ecex_draw_markdown_canvas_i\n" \ + "ecex_draw_markdown_text_i\n" \ + "ecex_draw_markdown_canvas_auto_i\n" \ + "ecex_draw_markdown_line_auto_i\n" \ + "ecex_draw_label_i\n" \ + "ecex_draw_stat_i\n" \ + "ecex_draw_tetris_preview_i\n" \ + "ecex_find_file\n" \ + "ecex_save_current_buffer\n" \ + "ecex_write_current_buffer\n" \ + "ecex_compile\n" \ + "ecex_grep\n" \ + "ecex_rerun_compile\n" \ + "ecex_rerun_grep\n" \ + "ecex_next_interactive_action\n" \ + "ecex_previous_interactive_action\n" \ + "ecex_indent_line_to\n" \ + "ecex_comment_region\n" \ + "ecex_uncomment_region\n" \ + "ecex_request_prompt\n" \ + "ecex_clear_prompt_request\n" \ + "ecex_complete_command\n" \ + "ecex_set_font\n" \ + "ecex_get_font_size\n" \ + "ecex_set_font_size\n" \ + "ecex_adjust_font_size\n" \ + "ecex_set_bg_color\n" \ + "ecex_set_fg_color\n" \ + "ecex_set_status_bg_color\n" \ + "ecex_set_status_fg_color\n" \ + "ecex_set_status_border_color\n" \ + "ecex_set_cursor_color\n" \ + "ecex_set_region_bg_color\n" \ + "ecex_set_minibuffer_bg_color\n" \ + "ecex_set_minibuffer_fg_color\n" \ + "ecex_set_completion_fg_color\n" \ + "ecex_set_completion_enabled\n" \ + "ecex_set_interactive_highlight_bg_color\n" \ + "ecex_set_interactive_highlight_fg_color\n" \ + "ecex_set_current_line_bg_color\n" \ + "ecex_set_search_bg_color\n" \ + "ecex_set_line_numbers_enabled\n" \ + "ecex_set_current_line_enabled\n" \ + "buffer_new\n" \ + "buffer_free\n" \ + "buffer_reserve\n" \ + "buffer_clear\n" \ + "buffer_set_text\n" \ + "buffer_insert\n" \ + "buffer_append\n" \ + "buffer_prepend\n" \ + "buffer_insert_at\n" \ + "buffer_insert_char\n" \ + "buffer_delete_range\n" \ + "buffer_delete_selection\n" \ + "buffer_replace_selection\n" \ + "buffer_backspace\n" \ + "buffer_delete_forward\n" \ + "buffer_kill_line\n" \ + "buffer_undo\n" \ + "buffer_redo\n" \ + "buffer_clear_undo\n" \ + "buffer_set_point\n" \ + "buffer_move_left\n" \ + "buffer_move_right\n" \ + "buffer_move_up\n" \ + "buffer_move_down\n" \ + "buffer_move_word_left\n" \ + "buffer_move_word_right\n" \ + "buffer_move_beginning_of_line\n" \ + "buffer_move_end_of_line\n" \ + "buffer_move_beginning_of_buffer\n" \ + "buffer_move_end_of_buffer\n" \ + "buffer_search_forward\n" \ + "buffer_search_backward\n" \ + "buffer_set_mark\n" \ + "buffer_clear_mark\n" \ + "buffer_has_selection\n" \ + "buffer_selection_range\n" \ + "buffer_line_start_at\n" \ + "buffer_line_end_at\n" \ + "buffer_current_line_start\n" \ + "buffer_current_line_end\n" \ + "buffer_current_column\n" \ + "buffer_current_line_number\n" \ + "buffer_line_count\n" \ + "buffer_substring\n" \ + "buffer_current_line_copy\n" \ + "buffer_load_file\n" \ + "buffer_save\n" \ + "buffer_save_as\n" \ + "buffer_set_interactive\n" \ + "buffer_is_interactive\n" \ + "buffer_clear_interactive_actions\n" \ + "buffer_add_interactive_action\n" \ + "buffer_interactive_action_at_line\n" \ + "ecex_path_copy\n" \ + "ecex_path_expand_user\n" \ + "ecex_path_join\n" \ + "ecex_path_dirname\n" \ + "ecex_path_basename_dup\n" \ + "ecex_path_normalize\n" \ + "ecex_path_is_dir\n" \ + "ecex_path_is_file\n" \ + "ecex_path_exists\n" \ + "ecex_path_file_size\n" \ + "ecex_path_is_image\n" \ + "ecex_path_is_previewable_image\n" \ + "ecex_path_is_video\n" \ + "ecex_path_is_media\n" \ + "ecex_path_cwd\n" \ + "ecex_media_open\n" \ + "ecex_media_toggle_playback\n" +#define ECEX_API_ED_FIELD_WORDS \ + "buffers\n" \ + "buffer_cap\n" \ + "buffer_count\n" \ + "current_buffer_index\n" \ + "current_buffer\n" \ + "previous_buffer\n" \ + "windows\n" \ + "window_cap\n" \ + "window_count\n" \ + "current_window_index\n" \ + "jit_modules\n" \ + "jit_module_cap\n" \ + "jit_module_count\n" \ + "commands\n" \ + "command_cap\n" \ + "command_count\n" \ + "keybinds\n" \ + "keybind_cap\n" \ + "keybind_count\n" \ + "mode_keybinds\n" \ + "mode_keybind_cap\n" \ + "mode_keybind_count\n" \ + "command_hooks\n" \ + "command_hook_cap\n" \ + "command_hook_count\n" \ + "prefix_hooks\n" \ + "prefix_hook_cap\n" \ + "prefix_hook_count\n" \ + "buffer_hooks\n" \ + "buffer_hook_cap\n" \ + "buffer_hook_count\n" \ + "completion_providers\n" \ + "completion_provider_cap\n" \ + "completion_provider_count\n" \ + "major_modes\n" \ + "major_mode_cap\n" \ + "major_mode_count\n" \ + "next_major_mode_id\n" \ + "plugins\n" \ + "last_eval_source\n" \ + "last_eval_filename\n" \ + "last_compile_command\n" \ + "last_grep_command\n" \ + "prompt_request\n" \ + "prompt_message\n" \ + "config_path\n" \ + "message\n" \ + "message_revision\n" \ + "clipboard_get\n" \ + "clipboard_set\n" \ + "clipboard_userdata\n" \ + "clipboard_text\n" \ + "should_quit\n" \ + "ui_revision\n" \ + "font_revision\n" \ + "theme\n" + +static const char *ecex_api_symbols[] ECEX_API_UNUSED = { + "ecex_t", + "buffer_t", + "ecex_window_t", + "ecex_draw_context_t", + "ecex_plugin_t", + "ecex_plugin_runtime_t", + "ecex_command_fn", + "ecex_completion_provider_fn", + "ecex_file_handler_fn", + "ECEX_CONFIG_BEGIN", + "ECEX_CONFIG_END", + "ECEX_PLUGIN_BEGIN", + "ECEX_PLUGIN_END", + "ECEX_CONFIG_TRY", + "ECEX_CONFIG_COMMAND", + "ECEX_CONFIG_BIND", + "ECEX_CONFIG_MODE", + "ECEX_CONFIG_MODE_BIND", + "ECEX_CONFIG_INCLUDE", + "ECEX_RGB8", + "ECEX_ARRAY_COUNT", + "ecex_new", + "ecex_free", + "ecex_config_alloc", + "ecex_config_calloc", + "ecex_config_free", + "ecex_time_seconds", + "ecex_log", + "ecex_logf", + "ecex_log_group_begin", + "ecex_log_group_end", + "ecex_log_int", + "ecex_log_double", + "ecex_log_ptr", + "ecex_log_flush", + "ecex_mem_zero", + "ecex_i32_get", + "ecex_i32_set", + "ecex_prng_next_bounded", + "ecex_random_bounded", + "ecex_plugin_register", + "ecex_plugin_require", + "ecex_plugin_find", + "ecex_plugin_id", + "ecex_plugin_slot_alloc", + "ecex_plugin_slot_get", + "ecex_plugin_slot_free", + "ecex_plugin_slot_set_export_flags", + "ecex_plugin_slot_read_exported", + "ecex_plugin_slot_i32_get_scalar", + "ecex_plugin_slot_i32_get", + "ecex_plugin_slot_i32_set", + "ecex_plugin_slot_i32_get_2d", + "ecex_plugin_slot_i32_set_2d", + "ecex_plugin_slot_i32_set_scalar", + "ecex_plugin_object_alloc", + "ecex_plugin_object_calloc", + "ecex_plugin_object_free", + "ecex_plugin_object_valid", + "ecex_plugin_object_i32_get", + "ecex_plugin_object_i32_set", + "ecex_plugin_object_ptr_get", + "ecex_plugin_object_ptr_set", + "ecex_plugin_text_set", + "ecex_plugin_text_set_from_buffer_title", + "ecex_plugin_text_free", + "ecex_plugin_text_free_all", + "ecex_plugin_text_get_drawable", + "ecex_plugin_file_handler_register", + "ecex_plugin_file_handlers_run", + "ecex_buffer_text_len", + "ecex_buffer_scroll_line_index", + "ecex_buffer_line_count_int", + "ecex_buffer_line_copy_text", + "ecex_run_plugin_file_handlers", + "ecex_reserve_buffers", + "ecex_add_buffer", + "ecex_create_buffer", + "ecex_find_buffer", + "ecex_switch_buffer", + "ecex_current_buffer", + "ecex_other_buffer", + "ecex_current_window", + "ecex_window_count", + "ecex_sync_current_buffer", + "ecex_split_window_vertically", + "ecex_split_window_horizontally", + "ecex_other_window", + "ecex_previous_window", + "ecex_delete_window", + "ecex_delete_other_windows", + "ecex_balance_windows", + "ecex_next_buffer", + "ecex_previous_buffer", + "ecex_kill_buffer", + "ecex_kill_buffer_force", + "ecex_has_modified_buffers", + "ecex_validate_bindings", + "ecex_keep_jit_module", + "ecex_set_config_path", + "ecex_config_path", + "ecex_reload_config", + "ecex_config_register_commands", + "ecex_config_bind_keys", + "ecex_config_bind_mode_keys", + "ecex_config_define_modes", + "ecex_apply_theme", + "ecex_register_command", + "ecex_execute_command", + "ecex_add_command_hook", + "ecex_remove_command_hook", + "ecex_add_prefix_hook", + "ecex_remove_prefix_hook", + "ecex_notify_prefix_hooks", + "ecex_message", + "ecex_add_completion_provider", + "ecex_remove_completion_provider", + "ecex_add_clangd_completion_provider", + "ecex_buffer_identifier_prefix", + "ecex_complete_at_point", + "ecex_set_clipboard_callbacks", + "ecex_clipboard_get", + "ecex_clipboard_set", + "ecex_bind_key", + "ecex_lookup_key", + "ecex_define_major_mode", + "ecex_major_mode_by_name", + "ecex_major_mode_name", + "ecex_buffer_set_major_mode", + "ecex_buffer_set_major_mode_by_name", + "ecex_buffer_major_mode_name", + "ecex_bind_mode_key", + "ecex_lookup_key_for_buffer", + "ecex_key_sequence_has_prefix_for_buffer", + "ecex_describe_key_prefix", + "ecex_auto_set_major_mode", + "ecex_list_commands", + "ecex_list_buffers", + "ecex_create_interactive_buffer", + "ecex_interactive_append_line", + "ecex_interactive_activate_current_line", + "ecex_buffer_set_renderer", + "ecex_buffer_clear_renderer", + "ecex_buffer_has_renderer", + "ecex_buffer_renderer_userdata", + "ecex_buffer_set_mouse_handler", + "ecex_buffer_clear_mouse_handler", + "ecex_buffer_has_mouse_handler", + "ecex_buffer_mouse_userdata", + "ecex_buffer_set_animation", + "ecex_buffer_set_animation_ms", + "ecex_buffer_clear_animation", + "ecex_buffer_is_animating", + "ecex_buffer_animation_userdata", + "ecex_tick_animations", + "ecex_buffer_replace_text", + "ecex_buffer_set_modified", + "ecex_draw_set_color", + "ecex_draw_rect", + "ecex_draw_rect_outline", + "ecex_draw_line", + "ecex_draw_text", + "ecex_draw_text_aligned", + "ecex_draw_text_width", + "ecex_draw_rgba", + "ecex_draw_color_rgba8_i", + "ecex_draw_rect_i", + "ecex_draw_rect_outline_i", + "ecex_draw_line_i", + "ecex_draw_text_i", + "ecex_draw_plugin_text_i", + "ecex_draw_plugin_text_rect_i", + "ecex_draw_markdown_canvas_i", + "ecex_draw_markdown_text_i", + "ecex_draw_markdown_canvas_auto_i", + "ecex_draw_markdown_line_auto_i", + "ecex_draw_label_i", + "ecex_draw_stat_i", + "ecex_draw_tetris_preview_i", + "ecex_find_file", + "ecex_save_current_buffer", + "ecex_write_current_buffer", + "ecex_compile", + "ecex_grep", + "ecex_rerun_compile", + "ecex_rerun_grep", + "ecex_next_interactive_action", + "ecex_previous_interactive_action", + "ecex_comment_region", + "ecex_uncomment_region", + "ecex_request_prompt", + "ecex_clear_prompt_request", + "ecex_complete_command", + "ecex_set_font", + "ecex_get_font_size", + "ecex_set_font_size", + "ecex_adjust_font_size", + "ecex_set_bg_color", + "ecex_set_fg_color", + "ecex_set_status_bg_color", + "ecex_set_status_fg_color", + "ecex_set_status_border_color", + "ecex_set_cursor_color", + "ecex_set_region_bg_color", + "ecex_set_minibuffer_bg_color", + "ecex_set_minibuffer_fg_color", + "ecex_set_completion_fg_color", + "ecex_set_completion_enabled", + "ecex_set_interactive_highlight_bg_color", + "ecex_set_interactive_highlight_fg_color", + "ecex_set_current_line_bg_color", + "ecex_set_search_bg_color", + "ecex_set_line_numbers_enabled", + "ecex_set_current_line_enabled", + "buffer_new", + "buffer_free", + "buffer_reserve", + "buffer_clear", + "buffer_set_text", + "buffer_insert", + "buffer_append", + "buffer_prepend", + "buffer_insert_at", + "buffer_insert_char", + "buffer_delete_range", + "buffer_delete_selection", + "buffer_replace_selection", + "buffer_backspace", + "buffer_delete_forward", + "buffer_kill_line", + "buffer_undo", + "buffer_redo", + "buffer_clear_undo", + "buffer_set_point", + "buffer_move_left", + "buffer_move_right", + "buffer_move_up", + "buffer_move_down", + "buffer_move_word_left", + "buffer_move_word_right", + "buffer_move_beginning_of_line", + "buffer_move_end_of_line", + "buffer_move_beginning_of_buffer", + "buffer_move_end_of_buffer", + "buffer_search_forward", + "buffer_search_backward", + "buffer_set_mark", + "buffer_clear_mark", + "buffer_has_selection", + "buffer_selection_range", + "buffer_line_start_at", + "buffer_line_end_at", + "buffer_current_line_start", + "buffer_current_line_end", + "buffer_current_column", + "buffer_current_line_number", + "buffer_line_count", + "buffer_substring", + "buffer_current_line_copy", + "buffer_load_file", + "buffer_save", + "buffer_save_as", + "buffer_set_interactive", + "buffer_is_interactive", + "buffer_clear_interactive_actions", + "buffer_add_interactive_action", + "buffer_interactive_action_at_line", + "ecex_path_copy", + "ecex_path_expand_user", + "ecex_path_join", + "ecex_path_dirname", + "ecex_path_basename_dup", + "ecex_path_normalize", + "ecex_path_is_dir", + "ecex_path_is_file", + "ecex_path_exists", + "ecex_path_file_size", + "ecex_path_is_image", + "ecex_path_is_previewable_image", + "ecex_path_is_video", + "ecex_path_is_media", + "ecex_path_cwd", + "ecex_media_open", + "ecex_media_toggle_playback" +}; + +static const char *ecex_ed_fields[] ECEX_API_UNUSED = { + "buffers", + "buffer_cap", + "buffer_count", + "current_buffer_index", + "current_buffer", + "previous_buffer", + "windows", + "window_cap", + "window_count", + "current_window_index", + "jit_modules", + "jit_module_cap", + "jit_module_count", + "commands", + "command_cap", + "command_count", + "keybinds", + "keybind_cap", + "keybind_count", + "mode_keybinds", + "mode_keybind_cap", + "mode_keybind_count", + "command_hooks", + "command_hook_cap", + "command_hook_count", + "prefix_hooks", + "prefix_hook_cap", + "prefix_hook_count", + "completion_providers", + "completion_provider_cap", + "completion_provider_count", + "major_modes", + "major_mode_cap", + "major_mode_count", + "next_major_mode_id", + "plugins", + "last_eval_source", + "last_eval_filename", + "last_compile_command", + "last_grep_command", + "prompt_request", + "prompt_message", + "config_path", + "message", + "message_revision", + "clipboard_get", + "clipboard_set", + "clipboard_userdata", + "clipboard_text", + "should_quit", + "ui_revision", + "font_revision", + "theme" +}; + +static int ecex_api_enabled(ecex_plugin_t *plugin) { + return ecex_plugin_slot_i32_get_scalar(plugin, ECEX_API_SLOT_ENABLED, 1) != 0; +} + +static int ecex_api_register_providers(ecex_t *ed) { + if (ecex_define_word_completion_provider(ed, + ECEX_API_SYMBOLS_PROVIDER, + 0, + ECEX_COMPLETION_DEFAULT) != 0) { + return -1; + } + + if (ecex_completion_provider_add_words(ed, ECEX_API_SYMBOLS_PROVIDER, ECEX_API_SYMBOL_WORDS) != 0) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + return -1; + } + if (ecex_completion_provider_set_detail(ed, ECEX_API_SYMBOLS_PROVIDER, "ecex API symbol") != 0) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + return -1; + } + + if (ecex_define_word_completion_provider(ed, + ECEX_API_ED_FIELDS_PROVIDER, + 0, + ECEX_COMPLETION_ED_ARROW) != 0) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + return -1; + } + + if (ecex_completion_provider_add_words(ed, ECEX_API_ED_FIELDS_PROVIDER, ECEX_API_ED_FIELD_WORDS) != 0) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + ecex_remove_completion_provider(ed, ECEX_API_ED_FIELDS_PROVIDER); + return -1; + } + if (ecex_completion_provider_set_detail(ed, ECEX_API_ED_FIELDS_PROVIDER, "ecex_t field") != 0) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + ecex_remove_completion_provider(ed, ECEX_API_ED_FIELDS_PROVIDER); + return -1; + } + + return 0; +} + +static void ecex_api_remove_providers(ecex_t *ed) { + ecex_remove_completion_provider(ed, ECEX_API_SYMBOLS_PROVIDER); + ecex_remove_completion_provider(ed, ECEX_API_ED_FIELDS_PROVIDER); +} + +static int cmd_ecex_api_complete(ecex_t *ed) { + return ecex_complete_at_point(ed); +} + +static int cmd_ecex_mode(ecex_t *ed) { + buffer_t *buffer = ecex_current_buffer(ed); + if (!buffer) return -1; + return ecex_buffer_set_major_mode_by_name(ed, buffer, "ecex-mode"); +} + +static int cmd_ecex_api_completion_mode(ecex_t *ed) { + ecex_plugin_t *plugin = ecex_plugin_find(ed, ECEX_API_PLUGIN_ID); + if (!plugin) return -1; + + int enabled = !ecex_api_enabled(plugin); + ecex_plugin_slot_i32_set_scalar(plugin, ECEX_API_SLOT_ENABLED, enabled); + if (enabled) { + if (ecex_api_register_providers(ed) != 0) return -1; + } else { + ecex_api_remove_providers(ed); + } + ecex_message(ed, enabled ? "ecex API completion enabled" : "ecex API completion disabled"); + return 0; +} + +ECEX_PLUGIN_BEGIN(ecex_api_completion_plugin, ECEX_API_PLUGIN_ID) + if (!ecex_define_major_mode(ed, "ecex-mode")) return -1; + + if (ecex_plugin_slot_i32_get_scalar(plugin, ECEX_API_SLOT_ENABLED, -1) < 0) { + ecex_plugin_slot_i32_set_scalar(plugin, ECEX_API_SLOT_ENABLED, 1); + } + + ECEX_CONFIG_COMMAND("ecex-mode", cmd_ecex_mode); + ECEX_CONFIG_COMMAND("ecex-mode-complete", cmd_ecex_api_complete); + ECEX_CONFIG_COMMAND("ecex-mode-completion-mode", cmd_ecex_api_completion_mode); + ECEX_CONFIG_COMMAND("ecex-api-complete", cmd_ecex_api_complete); + ECEX_CONFIG_COMMAND("ecex-api-completion-mode", cmd_ecex_api_completion_mode); + if (ecex_api_enabled(plugin)) { + ECEX_CONFIG_TRY(ecex_api_register_providers(ed)); + } + return 0; +ECEX_PLUGIN_END + +#ifndef ECEX_NO_STANDALONE_CONFIG +ECEX_CONFIG_BEGIN + ECEX_CONFIG_INCLUDE(ecex_api_completion_plugin); +ECEX_CONFIG_END +#endif |
