#include "ecex.h" #include "buffers.h" #define ECEX_NO_STANDALONE_CONFIG #include "render_demo.c" #include "tetris.c" #include "markdown_plugin.c" #undef ECEX_NO_STANDALONE_CONFIG #define RGB(r, g, b) ECEX_RGB8(r, g, b) /* Gruvbox dark palette */ #define GB_DARK0_HARD RGB(0x1d, 0x20, 0x21) #define GB_DARK0 RGB(0x28, 0x28, 0x28) #define GB_DARK1 RGB(0x3c, 0x38, 0x36) #define GB_DARK2 RGB(0x50, 0x49, 0x45) #define GB_LIGHT0 RGB(0xfb, 0xf1, 0xc7) #define GB_LIGHT1 RGB(0xeb, 0xdb, 0xb2) #define GB_LIGHT2 RGB(0xd5, 0xc4, 0xa1) #define GB_RED RGB(0xfb, 0x49, 0x34) #define GB_GREEN RGB(0xb8, 0xbb, 0x26) #define GB_YELLOW RGB(0xfa, 0xbd, 0x2f) #define GB_BLUE RGB(0x83, 0xa5, 0x98) #define GB_PURPLE RGB(0xd3, 0x86, 0x9b) #define GB_AQUA RGB(0x8e, 0xc0, 0x7c) #define GB_ORANGE RGB(0xfe, 0x80, 0x19) static int hello_command(ecex_t *ed) { buffer_t *buf = ecex_current_buffer(ed); buffer_insert(buf, "Hello from Gruvbox ecex config!\n"); return 0; } static int make_notes_command(ecex_t *ed) { buffer_t *notes = ecex_find_buffer(ed, "*notes*"); if (!notes) { notes = ecex_create_buffer(ed, "*notes*", NULL, 0); } if (notes) { buffer_insert(notes, "Created or reused *notes* from command.\n"); ecex_switch_buffer(ed, "*notes*"); } return 0; } static int demo_line_action(ecex_t *ed, buffer_t *buffer, size_t line, const char *payload, void *userdata) { (void)buffer; (void)line; (void)userdata; buffer_t *notes = ecex_find_buffer(ed, "*notes*"); if (!notes) { notes = ecex_create_buffer(ed, "*notes*", NULL, 0); } if (!notes) return -1; ecex_switch_buffer(ed, "*notes*"); buffer_insert(notes, payload ? payload : "selected an interactive line\n"); return 0; } static int demo_interactive_command(ecex_t *ed) { buffer_t *menu = ecex_create_interactive_buffer(ed, "*demo-menu*"); if (!menu) return -1; buffer_clear(menu); buffer_set_interactive(menu, 1); buffer_append(menu, "Demo interactive buffer\n"); buffer_append(menu, "Move to a line and press ENTER.\n\n"); ecex_interactive_append_line(ed, menu, "Insert hello into *notes*", demo_line_action, "hello from an interactive config buffer!\n", NULL); ecex_interactive_append_line(ed, menu, "Insert gruvbox note into *notes*", demo_line_action, "gruvbox menu action selected\n", NULL); ecex_switch_buffer(ed, "*demo-menu*"); return 0; } static const ecex_config_command_t config_commands[] = { {"hello", hello_command}, {"make-notes", make_notes_command}, {"demo-interactive", demo_interactive_command}, }; static const ecex_config_keybind_t config_binds[] = { {"C-h", "hello"}, {"C-m", "make-notes"}, {"F2", "list-commands"}, {"F3", "list-buffers"}, {"F4", "demo-interactive"}, {"C-q", "quit"}, {"C-x h", "beginning-of-buffer"}, }; ECEX_CONFIG_BEGIN ecex_set_font_size(ed, 20.0f); ecex_set_bg_color(ed, GB_DARK0_HARD); ecex_set_fg_color(ed, GB_LIGHT1); ecex_set_status_bg_color(ed, GB_DARK0); ecex_set_status_fg_color(ed, GB_YELLOW); ecex_set_status_border_color(ed, GB_DARK1); ecex_set_minibuffer_bg_color(ed, GB_DARK1); ecex_set_minibuffer_fg_color(ed, GB_LIGHT0); ecex_set_completion_enabled(ed, 1); ecex_set_completion_fg_color(ed, GB_DARK2); ecex_set_interactive_highlight_bg_color(ed, GB_DARK1); ecex_set_interactive_highlight_fg_color(ed, GB_YELLOW); ecex_set_cursor_color(ed, GB_AQUA); ecex_set_region_bg_color(ed, GB_DARK2); ECEX_CONFIG_COMMANDS(config_commands); ECEX_CONFIG_BINDS(config_binds); ECEX_CONFIG_INCLUDE(ecex_render_demo_plugin); ECEX_CONFIG_INCLUDE(ecex_tetris_plugin); ECEX_CONFIG_INCLUDE(ecex_markdown_plugin); buffer_t *scratch = ecex_current_buffer(ed); buffer_insert(scratch, "ecex config loaded !\n"); buffer_insert(scratch, "Try F1, C-x C-f, C-x C-s, C-x d file browser, F2 commands, F3 buffers, F4 demo menu, C-x b.\n"); buffer_insert(scratch, "Run M-x render-demo for a custom renderer demo, or M-x tetris for Tetris.\n"); buffer_insert(scratch, "Example line to edit then C-x C-e: ecex_set_font_size(ed, 28.0f);\n"); buffer_insert(scratch, "Example relative change: ecex_adjust_font_size(ed, 2.0f);\n\n"); ECEX_CONFIG_END