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); +			}  		}  	} | 
