From 05e823c77bd775a30478498fb83b287f9be6865f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Sun, 3 May 2020 08:38:32 -0300 Subject: Add modality --- jet.c | 102 ++++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 59 insertions(+), 43 deletions(-) diff --git a/jet.c b/jet.c index 3146221..5f7e5b1 100644 --- a/jet.c +++ b/jet.c @@ -8,6 +8,9 @@ #include "page.c" #include "point.c" +#define NORMAL_MODE 0 +#define INSERT_MODE 1 + int main(int argc, char *argv[]) { initscr(); cbreak(); @@ -32,6 +35,8 @@ int main(int argc, char *argv[]) { int window_height, window_width; getmaxyx(stdscr, window_height, window_width); + int mode = NORMAL_MODE; + while (1) { clear(); @@ -50,51 +55,62 @@ int main(int argc, char *argv[]) { int input = getch(); - switch (input) { - case KEY_UP: - prev_line(&window_start, window_width); - prev_line(&cursor, window_width); - break; - case KEY_DOWN: - if (element(&window_end)) { - next_line(&window_start, window_width); - } - next_line(&cursor, window_width); - if (same_point(&cursor, &window_end)) { - move_point_backward(&cursor); - } - break; - case KEY_LEFT: - if (same_point(&cursor, &window_start)) { + if (mode == NORMAL_MODE) { + switch (input) { + case 'i': + mode = INSERT_MODE; + break; + case 'k': prev_line(&window_start, window_width); - } - move_point_backward(&cursor); - break; - case KEY_RIGHT: - if (same_point(&cursor, &window_end)) { - next_line(&window_start, window_width); - } - move_point_forward(&cursor); - if (same_point(&cursor, &window_end)) { + prev_line(&cursor, window_width); + break; + case 'j': + if (element(&window_end)) { + next_line(&window_start, window_width); + } + next_line(&cursor, window_width); + if (same_point(&cursor, &window_end)) { + move_point_backward(&cursor); + } + break; + case 'h': + if (same_point(&cursor, &window_start)) { + prev_line(&window_start, window_width); + } move_point_backward(&cursor); - } - break; - case KEY_BACKSPACE: - if (same_point(&cursor, &window_start)) { - prev_line(&window_start, window_width); - } - delete_at_point(&cursor); - break; - default: - if (same_point(&cursor, &window_end)) { - next_line(&window_start, window_width); - } - insert_at_point(&cursor, input); - move_point_backward(&cursor); - if (element(&cursor) == '\n') { - next_line(&window_start, window_width); - } - move_point_forward(&cursor); + break; + case 'l': + if (same_point(&cursor, &window_end)) { + next_line(&window_start, window_width); + } + move_point_forward(&cursor); + if (same_point(&cursor, &window_end)) { + move_point_backward(&cursor); + } + break; + } + } else { + switch (input) { + case '': + mode = NORMAL_MODE; + break; + case KEY_BACKSPACE: + if (same_point(&cursor, &window_start)) { + prev_line(&window_start, window_width); + } + delete_at_point(&cursor); + break; + default: + if (same_point(&cursor, &window_end)) { + next_line(&window_start, window_width); + } + insert_at_point(&cursor, input); + move_point_backward(&cursor); + if (element(&cursor) == '\n') { + next_line(&window_start, window_width); + } + move_point_forward(&cursor); + } } } -- cgit v1.2.3