Changeset 5882487 in mainline for uspace/app/edit/edit.c


Ignore:
Timestamp:
2012-08-16T09:43:13Z (12 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c8cbd39
Parents:
b52dd1de (diff), c8444d8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/edit/edit.c

    rb52dd1de r5882487  
    126126static int file_save_range(char const *fname, spt_t const *spos,
    127127    spt_t const *epos);
    128 static char *filename_prompt(char const *prompt, char const *init_value);
    129128static char *range_get_str(spt_t const *spos, spt_t const *epos);
     129
     130static char *prompt(char const *prompt, char const *init_value);
    130131
    131132static void pane_text_display(void);
     
    142143static void caret_move_word_left(void);
    143144static void caret_move_word_right(void);
     145static void caret_move_to_line(int row);
     146static void caret_go_to_line_ask(void);
    144147
    145148static bool selection_active(void);
     
    404407                caret_move_word_left();
    405408                break;
     409        case KC_L:
     410                caret_go_to_line_ask();
     411                break;
    406412        default:
    407413                break;
     
    423429}
    424430
    425 static void key_handle_movement(unsigned int key, bool select)
     431/** Move caret while preserving or resetting selection. */
     432static void caret_movement(int drow, int dcolumn, enum dir_spec align_dir,
     433    bool select)
    426434{
    427435        spt_t pt;
     
    435443        had_sel = !spt_equal(&caret_pt, &pt);
    436444
    437         switch (key) {
    438         case KC_LEFT:
    439                 caret_move(0, -1, dir_before);
    440                 break;
    441         case KC_RIGHT:
    442                 caret_move(0, 0, dir_after);
    443                 break;
    444         case KC_UP:
    445                 caret_move(-1, 0, dir_before);
    446                 break;
    447         case KC_DOWN:
    448                 caret_move(+1, 0, dir_before);
    449                 break;
    450         case KC_HOME:
    451                 caret_move(0, -ED_INFTY, dir_before);
    452                 break;
    453         case KC_END:
    454                 caret_move(0, +ED_INFTY, dir_before);
    455                 break;
    456         case KC_PAGE_UP:
    457                 caret_move(-pane.rows, 0, dir_before);
    458                 break;
    459         case KC_PAGE_DOWN:
    460                 caret_move(+pane.rows, 0, dir_before);
    461                 break;
    462         default:
    463                 break;
    464         }
     445        caret_move(drow, dcolumn, align_dir);
    465446
    466447        if (select == false) {
     
    487468}
    488469
     470static void key_handle_movement(unsigned int key, bool select)
     471{
     472        switch (key) {
     473        case KC_LEFT:
     474                caret_movement(0, -1, dir_before, select);
     475                break;
     476        case KC_RIGHT:
     477                caret_movement(0, 0, dir_after, select);
     478                break;
     479        case KC_UP:
     480                caret_movement(-1, 0, dir_before, select);
     481                break;
     482        case KC_DOWN:
     483                caret_movement(+1, 0, dir_before, select);
     484                break;
     485        case KC_HOME:
     486                caret_movement(0, -ED_INFTY, dir_before, select);
     487                break;
     488        case KC_END:
     489                caret_movement(0, +ED_INFTY, dir_before, select);
     490                break;
     491        case KC_PAGE_UP:
     492                caret_movement(-pane.rows, 0, dir_before, select);
     493                break;
     494        case KC_PAGE_DOWN:
     495                caret_movement(+pane.rows, 0, dir_before, select);
     496                break;
     497        default:
     498                break;
     499        }
     500}
     501
    489502/** Save the document. */
    490503static int file_save(char const *fname)
     
    520533        char *fname;
    521534       
    522         fname = filename_prompt("Save As", old_fname);
     535        fname = prompt("Save As", old_fname);
    523536        if (fname == NULL) {
    524537                status_display("Save cancelled.");
     
    535548}
    536549
    537 /** Ask for a file name. */
    538 static char *filename_prompt(char const *prompt, char const *init_value)
     550/** Ask for a string. */
     551static char *prompt(char const *prompt, char const *init_value)
    539552{
    540553        kbd_event_t ev;
     
    842855                /* Fill until the end of display area. */
    843856
    844                 if (str_length(row_buf) < (unsigned) scr_columns)
    845                         fill = scr_columns - str_length(row_buf);
     857                if ((unsigned)s_column - 1 < scr_columns)
     858                        fill = scr_columns - (s_column - 1);
    846859                else
    847860                        fill = 0;
     
    10771090        pane.rflags |= REDRAW_TEXT;
    10781091}
     1092
     1093/** Change the caret position to a beginning of a given line
     1094 */
     1095static void caret_move_to_line(int row)
     1096{
     1097        spt_t pt;
     1098        coord_t coord;
     1099
     1100        tag_get_pt(&pane.caret_pos, &pt);
     1101        spt_get_coord(&pt, &coord);
     1102
     1103        caret_movement(row - coord.row, 0, dir_before, false);
     1104}
     1105
     1106/** Ask for line and go to it. */
     1107static void caret_go_to_line_ask(void)
     1108{
     1109        char *sline;
     1110       
     1111        sline = prompt("Go to line", "");
     1112        if (sline == NULL) {
     1113                status_display("Go to line cancelled.");
     1114                return;
     1115        }
     1116       
     1117        char *endptr;
     1118        int line = strtol(sline, &endptr, 10);
     1119        if (*endptr != '\0') {
     1120                status_display("Invalid number entered.");
     1121                return;
     1122        }
     1123       
     1124        caret_move_to_line(line);
     1125}
     1126
    10791127
    10801128/** Check for non-empty selection. */
Note: See TracChangeset for help on using the changeset viewer.