diff options
-rw-r--r-- | jet.c | 102 |
1 files changed, 59 insertions, 43 deletions
@@ -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); + } } } |