Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset c8444d8 in mainline


Ignore:
Timestamp:
2012-08-16T09:06:58Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
5882487, 69cf3a4
Parents:
b8b742e
Message:

Go to Line needs to properly update sel_start tag. It should also stay in the current column.

File:
1 edited

Legend:

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

    rb8b742e rc8444d8  
    429429}
    430430
    431 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)
    432434{
    433435        spt_t pt;
     
    441443        had_sel = !spt_equal(&caret_pt, &pt);
    442444
    443         switch (key) {
    444         case KC_LEFT:
    445                 caret_move(0, -1, dir_before);
    446                 break;
    447         case KC_RIGHT:
    448                 caret_move(0, 0, dir_after);
    449                 break;
    450         case KC_UP:
    451                 caret_move(-1, 0, dir_before);
    452                 break;
    453         case KC_DOWN:
    454                 caret_move(+1, 0, dir_before);
    455                 break;
    456         case KC_HOME:
    457                 caret_move(0, -ED_INFTY, dir_before);
    458                 break;
    459         case KC_END:
    460                 caret_move(0, +ED_INFTY, dir_before);
    461                 break;
    462         case KC_PAGE_UP:
    463                 caret_move(-pane.rows, 0, dir_before);
    464                 break;
    465         case KC_PAGE_DOWN:
    466                 caret_move(+pane.rows, 0, dir_before);
    467                 break;
    468         default:
    469                 break;
    470         }
     445        caret_move(drow, dcolumn, align_dir);
    471446
    472447        if (select == false) {
     
    490465                /* Redraw because text was unselected. */
    491466                pane.rflags |= REDRAW_TEXT;
     467        }
     468}
     469
     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;
    492499        }
    493500}
     
    10901097        spt_t pt;
    10911098        coord_t coord;
    1092         int num_rows;
    10931099
    10941100        tag_get_pt(&pane.caret_pos, &pt);
    10951101        spt_get_coord(&pt, &coord);
    1096         coord.row = row;
    1097         coord.column = 1;
    1098 
    1099         /* Clamp coordinates. */
    1100         if (coord.row < 1) coord.row = 1;
    1101         sheet_get_num_rows(&doc.sh, &num_rows);
    1102         if (coord.row > num_rows) coord.row = num_rows;
    1103 
    1104         /*
    1105          * Select the point before the character at the designated
    1106          * coordinates. The character can be wider than one cell (e.g. tab).
    1107          */
    1108         sheet_get_cell_pt(&doc.sh, &coord, dir_before, &pt);
    1109         sheet_remove_tag(&doc.sh, &pane.caret_pos);
    1110         sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
    1111 
    1112         /* Set the new value for @c ideal_column. */
    1113         spt_get_coord(&pt, &coord);
    1114         pane.ideal_column = coord.column;
    1115 
    1116         caret_update();
     1102
     1103        caret_movement(row - coord.row, 0, dir_before, false);
    11171104}
    11181105
Note: See TracChangeset for help on using the changeset viewer.