aboutsummaryrefslogtreecommitdiff
path: root/config/ecexrc.c
diff options
context:
space:
mode:
Diffstat (limited to 'config/ecexrc.c')
-rw-r--r--config/ecexrc.c142
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;
+}