summaryrefslogtreecommitdiff
path: root/jet.c
diff options
context:
space:
mode:
Diffstat (limited to 'jet.c')
-rw-r--r--jet.c102
1 files 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);
+ }
}
}