From 757efb85045408e2601da0f53547941a40d2e960 Mon Sep 17 00:00:00 2001 From: cflip Date: Tue, 31 Jan 2023 10:46:21 -0700 Subject: Start implementing editor commands This first step allows you to press the semicolon key to enter command mode, where you can type into a command line. Currently, pressing enter when in command mode will clear the command line but since there are no commands implemented it doesn't matter what you type in there. --- editor.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'editor.c') diff --git a/editor.c b/editor.c index d7d92a1..bba0ab9 100644 --- a/editor.c +++ b/editor.c @@ -34,6 +34,7 @@ void init_editor(struct editor_state* editor) editor->status_message_time = 0; editor->syntax = NULL; editor->mode = EDITOR_MODE_NORMAL; + editor->cmdline = textbuf_init(); editor_update_screen_size(editor); window_set_filename("[New]"); @@ -58,6 +59,13 @@ char* editor_prompt(struct editor_state* editor, char* prompt, void (*callback)( return NULL; } +void editor_run_command(struct editor_state *editor) +{ + /* TODO: Do something here */ + editor->mode = EDITOR_MODE_NORMAL; + textbuf_clear(&editor->cmdline); +} + void editor_try_quit(struct editor_state *editor) { if (editor->dirty && quit_message_time == 0) { @@ -308,6 +316,11 @@ void editor_draw_message_bar(struct editor_state* editor, struct textbuf *buffer return; } + if (editor->mode == EDITOR_MODE_COMMAND) { + textbuf_append(buffer, editor->cmdline.buffer, editor->cmdline.length); + return; + } + int message_length = strlen(editor->status_message); if (message_length > editor->screen_cols) @@ -326,4 +339,5 @@ void editor_destroy(struct editor_state *editor) for (int i = 0; i < editor->num_lines; i++) free_line(&editor->lines[i]); free(editor->lines); + textbuf_free(&editor->cmdline); } -- cgit v1.2.3