diff --git a/tui_main.c b/tui_main.c index ec304e5..37759ed 100644 --- a/tui_main.c +++ b/tui_main.c @@ -1022,6 +1022,30 @@ void app_move_cursor_relative(App_state* a, Isz delta_y, Isz delta_x) { a->is_draw_dirty = true; } +typedef enum { + App_dir_up, + App_dir_down, + App_dir_left, + App_dir_right, +} App_dir; + +void app_dir_input(App_state* a, App_dir dir) { + switch (dir) { + case App_dir_up: + app_move_cursor_relative(a, -1, 0); + break; + case App_dir_down: + app_move_cursor_relative(a, 1, 0); + break; + case App_dir_left: + app_move_cursor_relative(a, 0, -1); + break; + case App_dir_right: + app_move_cursor_relative(a, 0, 1); + break; + } +} + Usz view_to_scrolled_grid(Usz field_len, Usz visual_coord, int scroll_offset) { if (field_len == 0) return 0; @@ -1570,20 +1594,20 @@ int main(int argc, char** argv) { goto quit; case KEY_UP: case AND_CTRL('k'): - app_move_cursor_relative(&app_state, -1, 0); + app_dir_input(&app_state, App_dir_up); break; case AND_CTRL('j'): case KEY_DOWN: - app_move_cursor_relative(&app_state, 1, 0); + app_dir_input(&app_state, App_dir_down); break; case KEY_BACKSPACE: case AND_CTRL('h'): case KEY_LEFT: - app_move_cursor_relative(&app_state, 0, -1); + app_dir_input(&app_state, App_dir_left); break; case AND_CTRL('l'): case KEY_RIGHT: - app_move_cursor_relative(&app_state, 0, 1); + app_dir_input(&app_state, App_dir_right); break; case AND_CTRL('z'): case AND_CTRL('u'):