diff options
Diffstat (limited to 'gramscii.c')
-rw-r--r-- | gramscii.c | 145 |
1 files changed, 82 insertions, 63 deletions
@@ -362,6 +362,33 @@ void toggle_end_mark(){ mark_end = end_marks[cur_end]; } +int change_style(char c){ + switch(c){ + case '-': + toggle_hline(); + break; + case '|': + toggle_vline(); + break; + case '+': + toggle_corner(); + break; + case '<': + toggle_st_mark(); + break; + case '>': + toggle_end_mark(); + break; + case '.': + reset_styles(); + break; + default: + return 0; + } + return c; +} + + /***** text, box, arrows *****/ @@ -430,10 +457,14 @@ void get_box(){ step = 1; draw_box(x,y,NOFIX); while((c=getchar())!=EOF && c != 27 && c!= 'b'){ - if (!move_around(c)) continue; + if (change_style(c)) + goto update_box; + if (!move_around(c)) + continue; check_bound(); redraw(); step = 1; +update_box: draw_box(orig_x, orig_y, NOFIX); status_bar(); show_cursor(); @@ -504,7 +535,10 @@ void get_arrow(){ step = 1; draw_arrow(x,y, arrow, 0, NOFIX); while((c=getchar())!=EOF && c != 27 && c!= 'a'){ - if (!move_around(c)) continue; + if (change_style(c)) + goto update_arrow; + if (!move_around(c)) + continue; check_bound(); /* FIXME: if we are out of bound, do nothing? */ if (arrow_len == arrow_sz){ @@ -515,6 +549,7 @@ void get_arrow(){ arrow[arrow_len++] = step; redraw(); step = 1; +update_arrow: draw_arrow(orig_x, orig_y, arrow, arrow_len, NOFIX); status_bar(); show_cursor(); @@ -701,67 +736,51 @@ void commands(){ char c; while((c=getchar())!=EOF){ - if (!move_around(c)) switch(c){ - case 'i': - state = TEXT; - get_text(); - break; - case 'R': - redraw(); - break; - case 'b': - state = BOX; - get_box(); - break; - case 'a': - state = ARROW; - get_arrow(); - break; - case 'W': - force_new = 1;/** FALLTHROUGH **/ - case 'w': - write_file(); - break; - case 'e': - check_modified();/** FALLTHROUGH **/ - case 'E': - load_file(); - break; - case 'N': - new_file(); - break; - case 'x': - state = DEL; - delete(); - break; - case 'v': - state = VIS; - visual_box(); - break; - case '-': - toggle_hline(); - break; - case '|': - toggle_vline(); - break; - case '+': - toggle_corner(); - break; - case '<': - toggle_st_mark(); - break; - case '>': - toggle_end_mark(); - break; - case '.': - reset_styles(); - break; - case 'q': - check_modified();/** FALLTHROUGH **/ - case 'Q': - cleanup(0); - exit(0); - break; + if (!change_style(c) && !move_around(c)){ + switch(c){ + case 'i': + state = TEXT; + get_text(); + break; + case 'R': + redraw(); + break; + case 'b': + state = BOX; + get_box(); + break; + case 'a': + state = ARROW; + get_arrow(); + break; + case 'W': + force_new = 1;/** FALLTHROUGH **/ + case 'w': + write_file(); + break; + case 'e': + check_modified();/** FALLTHROUGH **/ + case 'E': + load_file(); + break; + case 'N': + new_file(); + break; + case 'x': + state = DEL; + delete(); + break; + case 'v': + state = VIS; + visual_box(); + break; + case 'q': + check_modified();/** FALLTHROUGH **/ + case 'Q': + cleanup(0); + exit(0); + break; + } } check_bound(); status_bar(); |