diff options
| author | David Moc <personal@cdatgoose.org> | 2026-05-30 21:53:05 +0200 |
|---|---|---|
| committer | David Moc <personal@cdatgoose.org> | 2026-05-30 21:53:05 +0200 |
| commit | e930cc6bdc7f62befac063d7d9d016ffb0a64f1a (patch) | |
| tree | 52118a1e990ae88f5f0410c8caea129609e22e19 /config | |
Added the old repo, refactored it, added the C jit.
Diffstat (limited to 'config')
| -rw-r--r-- | config/ecexrc.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/config/ecexrc.c b/config/ecexrc.c new file mode 100644 index 0000000..db4b6b9 --- /dev/null +++ b/config/ecexrc.c @@ -0,0 +1,142 @@ +#include "ecex.h" +#include "buffers.h" + +#define C(x) ((float)(x) / 255.0f) +#define RGB(r, g, b) C(r), C(g), C(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; +} + +int ecex_config_init(ecex_t *ed) { + 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_register_command(ed, "hello", hello_command); + ecex_register_command(ed, "make-notes", make_notes_command); + ecex_register_command(ed, "demo-interactive", demo_interactive_command); + + ecex_bind_key(ed, "C-h", "hello"); + ecex_bind_key(ed, "C-m", "make-notes"); + ecex_bind_key(ed, "F2", "list-commands"); + ecex_bind_key(ed, "F3", "list-buffers"); + ecex_bind_key(ed, "F4", "demo-interactive"); + ecex_bind_key(ed, "C-q", "quit"); + ecex_bind_key(ed, "C-x h", "beginning-of-buffer"); + + ecex_bind_key(ed, "C-x b n", "next-buffer"); + ecex_bind_key(ed, "C-x b p", "previous-buffer"); + + buffer_t *scratch = ecex_current_buffer(ed); + + buffer_insert(scratch, "ecex config loaded with Gruvbox colors!\n"); + buffer_insert(scratch, "Try F1 M-x, C-x C-f, C-x C-s, F2 commands, F3 buffers, F4 demo menu, C-x b n/p.\n"); + buffer_insert(scratch, "Eval live C snippets with C-x C-e (line), C-x e r (marked region), C-x e b (buffer), C-x e f (file).\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"); + + return 0; +} |
