#include "ecex.h" #include #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