Browse Source

ctrl makes cursor jump according to ruler spacing

master
Atte JEnsen 6 years ago
parent
commit
906b114c76
  1. 57
      tui_main.c

57
tui_main.c

@ -1248,7 +1248,7 @@ void ged_move_cursor_relative(Ged* a, Isz delta_y, Isz delta_x) {
a->is_draw_dirty = true; a->is_draw_dirty = true;
} }
Usz guarded_selection_axis_resize(Usz x, int delta) { Usz guarded_selection_axis_resize(Usz x, Isz delta) {
if (delta < 0) { if (delta < 0) {
if (delta > INT_MIN && (Usz)(-delta) < x) { if (delta > INT_MIN && (Usz)(-delta) < x) {
x -= (Usz)(-delta); x -= (Usz)(-delta);
@ -1259,7 +1259,7 @@ Usz guarded_selection_axis_resize(Usz x, int delta) {
return x; return x;
} }
void ged_modify_selection_size(Ged* a, int delta_y, int delta_x) { void ged_modify_selection_size(Ged* a, Isz delta_y, Isz delta_x) {
Usz cur_h = a->ged_cursor.h; Usz cur_h = a->ged_cursor.h;
Usz cur_w = a->ged_cursor.w; Usz cur_w = a->ged_cursor.w;
Usz new_h = guarded_selection_axis_resize(cur_h, delta_y); Usz new_h = guarded_selection_axis_resize(cur_h, delta_y);
@ -1278,39 +1278,40 @@ typedef enum {
Ged_dir_right, Ged_dir_right,
} Ged_dir; } Ged_dir;
void ged_dir_input(Ged* a, Ged_dir dir) { void ged_dir_input(Ged* a, Ged_dir dir, Isz step_length) {
switch (a->input_mode) { switch (a->input_mode) {
case Ged_input_mode_normal: case Ged_input_mode_normal:
case Ged_input_mode_append: case Ged_input_mode_append:
case Ged_input_mode_piano: case Ged_input_mode_piano:
switch (dir) { switch (dir) {
case Ged_dir_up: case Ged_dir_up:
ged_move_cursor_relative(a, -1, 0); ged_move_cursor_relative(a, -step_length, 0);
break; break;
case Ged_dir_down: case Ged_dir_down:
ged_move_cursor_relative(a, 1, 0); ged_move_cursor_relative(a, step_length, 0);
break; break;
case Ged_dir_left: case Ged_dir_left:
ged_move_cursor_relative(a, 0, -1); ged_move_cursor_relative(a, 0, -step_length);
break; break;
case Ged_dir_right: case Ged_dir_right:
ged_move_cursor_relative(a, 0, 1); ged_move_cursor_relative(a, 0, step_length);
break; break;
} }
break; break;
case Ged_input_mode_selresize: case Ged_input_mode_selresize:
// AtteJensen: This code is never reached, or?
switch (dir) { switch (dir) {
case Ged_dir_up: case Ged_dir_up:
ged_modify_selection_size(a, -1, 0); ged_modify_selection_size(a, -step_length, 0);
break; break;
case Ged_dir_down: case Ged_dir_down:
ged_modify_selection_size(a, 1, 0); ged_modify_selection_size(a, step_length, 0);
break; break;
case Ged_dir_left: case Ged_dir_left:
ged_modify_selection_size(a, 0, -1); ged_modify_selection_size(a, 0, -step_length);
break; break;
case Ged_dir_right: case Ged_dir_right:
ged_modify_selection_size(a, 0, 1); ged_modify_selection_size(a, 0, step_length);
break; break;
} }
} }
@ -2335,21 +2336,21 @@ int main(int argc, char** argv) {
switch (key) { switch (key) {
case KEY_UP: case KEY_UP:
case CTRL_PLUS('k'): case CTRL_PLUS('k'):
ged_dir_input(&ged_state, Ged_dir_up); ged_dir_input(&ged_state, Ged_dir_up, 1);
break; break;
case CTRL_PLUS('j'): case CTRL_PLUS('j'):
case KEY_DOWN: case KEY_DOWN:
ged_dir_input(&ged_state, Ged_dir_down); ged_dir_input(&ged_state, Ged_dir_down, 1);
break; break;
case 127: // backspace in terminal.app, apparently case 127: // backspace in terminal.app, apparently
case KEY_BACKSPACE: case KEY_BACKSPACE:
case CTRL_PLUS('h'): case CTRL_PLUS('h'):
case KEY_LEFT: case KEY_LEFT:
ged_dir_input(&ged_state, Ged_dir_left); ged_dir_input(&ged_state, Ged_dir_left, 1);
break; break;
case CTRL_PLUS('l'): case CTRL_PLUS('l'):
case KEY_RIGHT: case KEY_RIGHT:
ged_dir_input(&ged_state, Ged_dir_right); ged_dir_input(&ged_state, Ged_dir_right, 1);
break; break;
case CTRL_PLUS('z'): case CTRL_PLUS('z'):
case CTRL_PLUS('u'): case CTRL_PLUS('u'):
@ -2435,11 +2436,37 @@ int main(int argc, char** argv) {
case 402: // shift-right case 402: // shift-right
ged_modify_selection_size(&ged_state, 0, 1); ged_modify_selection_size(&ged_state, 0, 1);
break; break;
case 567: // shift-control-up
ged_modify_selection_size(&ged_state, -(Isz)ged_state.ruler_spacing_y, 0);
break;
case 526: // shift-control-down
ged_modify_selection_size(&ged_state, (Isz)ged_state.ruler_spacing_y, 0);
break;
case 546: // shift-control-left
ged_modify_selection_size(&ged_state, 0, -(Isz)ged_state.ruler_spacing_x);
break;
case 561: // shift-control-right
ged_modify_selection_size(&ged_state, 0, (Isz)ged_state.ruler_spacing_x);
break;
case 330: // delete? case 330: // delete?
ged_input_character(&ged_state, '.'); ged_input_character(&ged_state, '.');
break; break;
// Jump on control-arrow
case 566: //control-up
ged_dir_input(&ged_state, Ged_dir_up, (Isz)ged_state.ruler_spacing_y);
break;
case 525: //control-down
ged_dir_input(&ged_state, Ged_dir_down, (Isz)ged_state.ruler_spacing_y);
break;
case 545: //control-left
ged_dir_input(&ged_state, Ged_dir_left, (Isz)ged_state.ruler_spacing_x);
break;
case 560: //control-right
ged_dir_input(&ged_state, Ged_dir_right, (Isz)ged_state.ruler_spacing_x);
break;
case CTRL_PLUS('d'): case CTRL_PLUS('d'):
case KEY_F(1): case KEY_F(1):
push_main_menu(); push_main_menu();

Loading…
Cancel
Save