summaryrefslogtreecommitdiff
path: root/shed_edit.c
diff options
context:
space:
mode:
Diffstat (limited to 'shed_edit.c')
-rw-r--r--shed_edit.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/shed_edit.c b/shed_edit.c
new file mode 100644
index 0000000..44af225
--- /dev/null
+++ b/shed_edit.c
@@ -0,0 +1,97 @@
+#define _POSIX_C_SOURCE 200809L
+#include <ctype.h>
+#include <stdlib.h>
+#include "shed.h"
+
+int shed_handle_edit(struct shed *e, struct termios *t, char c)
+{
+ (void)t;
+ int r = -1;
+
+ switch (c) {
+ case '\n': r = shed_execute(e); break;
+ case CTRL_L: r = shed_redraw(e); break;
+ case '#': r = shed_comment(e); break;
+
+ case '=': // r = shed_complete_wordexp(e); break;
+ case '\\': // r = shed_complete_pathname(e); break;
+ case '*': // r = shed_complete_wildcard(e); break;
+
+ case '@': // r = shed_insert_alias(e); // read one letter
+
+ case '~': r = shed_convert_case(e); break;
+ case '.': // r = shed_repeat(e); break;
+ case 'v': // r = shed_invoke_vi(e); break;
+
+ case 'l': /* FALLTHROUGH */
+ case ' ': r = shed_move_forward(e); break;
+ case 'h': r = shed_move_backward(e); break;
+ case 'w': // r = shed_move_forword(e); break;
+ case 'W': // r = shed_move_forbigword(e); break;
+ case 'e': // r = shed_move_endword(e); break;
+ case 'E': // r = shed_move_endbigword(e); break;
+ case 'b': // r = shed_move_backword(e); break;
+ case 'B': // r = shed_move_backbigword(e); break;
+ case '^': r = shed_move_beginning(e); break;
+ case '$': r = shed_move_end(e); break;
+ case '0': r = shed_move_0(e); break;
+ case '|': r = shed_move_column(e); break;
+
+ case 'f': // r = shed_move_first(e); break;
+ case 'F': // r = shed_move_prev(e); break;
+ case 't': // r = shed_move_before(e); break;
+ case 'T': // r = shed_move_after(e); break;
+ case ';': // r = shed_repeat_fftt(e); break;
+ case ',': // r = shed_reverse_fftt(e); break;
+
+ case 'a': r = shed_append(e); break;
+ case 'A': r = shed_append_end(e); break;
+ case 'i': r = shed_insert(e); break;
+ case 'I': r = shed_insert_beginning(e); break;
+ case 'R': r = shed_replace(e); break;
+
+ case 'c': // r = shed_delete_to(e); break;
+ case 'C': r = shed_change(e); break;
+ case 'S': r = shed_start_over(e); break;
+
+ case 'r': // r = shed_replace(e); break;
+ case '_': // ???
+ case 'x': r = shed_delete(e); break;
+ case 'X': r = shed_backspace(e); break;
+ case 'd': // r = shed_delete_motion(e); break;
+ case 'D': r = shed_delete_toend(e); break;
+ case 'y': // r = shed_yank(e); break;
+ case 'Y': // r = shed_bigyank(e); break;
+ case 'p': // r = shed_paste(e); break;
+ case 'P': // r = shed_bigpaste(e); break;
+
+ case 'u': // r = shed_undo(e); break;
+ case 'U': // r = shed_bigundo(e); break;
+
+ case 'k': /* FALLTHROUGH */
+ case '-': // r = shed_history_back(e); break;
+
+ case 'j': /* FALLTHOUGH */
+ case '+': // r = shed_history_forward(e); break;
+
+ case 'G': // r = shed_history_first(e); break;
+ case '/': // r = shed_history_backsearch(e); break;
+ case '?': // r = shed_history_forwardsearch(e); break;
+ case 'n': // r = shed_history_repeat(e); break;
+ case 'N': // r = shed_history_reverse(e); break;
+
+ default:
+ break;
+ }
+
+ if (isdigit(c)) {
+ char digit[2] = { c, '\0' };
+ e->count = (e->count * 10) + atoi(digit);
+ }
+
+ if (r != -1) {
+ e->count = 0;
+ }
+
+ return r;
+}