Changes in uspace/app/edit/edit.c [743e17b:3052ff4] in mainline


Ignore:
File:
1 edited

Legend:

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

    r743e17b r3052ff4  
    7272        /** Current position of the caret */
    7373        tag_t caret_pos;
    74 
    75         /**
    76          * Ideal column where the caret should try to get. This is used
    77          * for maintaining the same column during vertical movement.
    78          */
    79         int ideal_column;
    8074} pane_t;
    8175
     
    9488static pane_t pane;
    9589
    96 static int scr_rows, scr_columns;
     90static ipcarg_t scr_rows, scr_columns;
    9791
    9892#define ROW_BUF_SIZE 4096
     
    136130
    137131        pane.rows = scr_rows - 1;
    138         pane.columns = scr_columns;
    139132        pane.sh_row = 1;
    140         pane.sh_column = 1;
    141133
    142134        /* Start with an empty sheet. */
     
    147139        sheet_get_cell_pt(&doc.sh, &coord, dir_before, &pt);
    148140        sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
    149         pane.ideal_column = coord.column;
    150141
    151142        if (argc == 2) {
     
    215206        case KC_ENTER:
    216207                insert_char('\n');
     208                pane.rflags |= REDRAW_TEXT;
    217209                caret_update();
    218210                break;
     
    243235        case KC_BACKSPACE:
    244236                delete_char_before();
     237                pane.rflags |= REDRAW_TEXT;
    245238                caret_update();
    246239                break;
    247240        case KC_DELETE:
    248241                delete_char_after();
     242                pane.rflags |= REDRAW_TEXT;
    249243                caret_update();
    250244                break;
     
    252246                if (ev->c >= 32 || ev->c == '\t') {
    253247                        insert_char(ev->c);
     248                        pane.rflags |= REDRAW_ROW;
    254249                        caret_update();
    255250                }
     
    367362{
    368363        int sh_rows, rows;
    369         int i, j;
     364        int i;
     365        unsigned j;
    370366
    371367        sheet_get_num_rows(&doc.sh, &sh_rows);
     
    407403static void pane_row_range_display(int r0, int r1)
    408404{
     405        int width;
    409406        int i, j, fill;
    410407        spt_t rb, re, dep;
     
    419416        console_goto(con, 0, 0);
    420417        for (i = r0; i < r1; ++i) {
    421                 /* Starting point for row display */
    422                 rbc.row = pane.sh_row + i;
    423                 rbc.column = pane.sh_column;
     418                sheet_get_row_width(&doc.sh, pane.sh_row + i, &width);
     419
     420                /* Determine row starting point. */
     421                rbc.row = pane.sh_row + i; rbc.column = 1;
    424422                sheet_get_cell_pt(&doc.sh, &rbc, dir_before, &rb);
    425423
    426                 /* Ending point for row display */
    427                 rec.row = pane.sh_row + i;
    428                 rec.column = pane.sh_column + pane.columns;
     424                /* Determine row ending point. */
     425                rec.row = pane.sh_row + i; rec.column = width + 1;
    429426                sheet_get_cell_pt(&doc.sh, &rec, dir_before, &re);
    430427
     
    455452                /* Fill until the end of display area. */
    456453
    457                 if (str_length(row_buf) < (unsigned) scr_columns)
     454                if (str_length(row_buf) < scr_columns)
    458455                        fill = scr_columns - str_length(row_buf);
    459456                else
     
    498495
    499496        spt_get_coord(&caret_pt, &coord);
    500         console_goto(con, coord.column - pane.sh_column,
    501             coord.row - pane.sh_row);
     497        console_goto(con, coord.column - 1, coord.row - pane.sh_row);
    502498}
    503499
     
    516512
    517513        (void) sheet_insert(&doc.sh, &pt, dir_before, cbuf);
    518 
    519         pane.rflags |= REDRAW_ROW;
    520         if (c == '\n')
    521                 pane.rflags |= REDRAW_TEXT;
    522514}
    523515
     
    535527
    536528        (void) sheet_delete(&doc.sh, &sp, &ep);
    537 
    538         pane.rflags |= REDRAW_ROW;
    539         if (coord.column < 1)
    540                 pane.rflags |= REDRAW_TEXT;
    541529}
    542530
     
    545533{
    546534        spt_t sp, ep;
    547         coord_t sc, ec;
     535        coord_t coord;
    548536
    549537        tag_get_pt(&pane.caret_pos, &sp);
    550         spt_get_coord(&sp, &sc);
    551 
    552         sheet_get_cell_pt(&doc.sh, &sc, dir_after, &ep);
    553         spt_get_coord(&ep, &ec);
     538        spt_get_coord(&sp, &coord);
     539
     540        sheet_get_cell_pt(&doc.sh, &coord, dir_after, &ep);
    554541
    555542        (void) sheet_delete(&doc.sh, &sp, &ep);
    556 
    557         pane.rflags |= REDRAW_ROW;
    558         if (ec.row != sc.row)
    559                 pane.rflags |= REDRAW_TEXT;
    560543}
    561544
     
    573556        spt_get_coord(&pt, &coord);
    574557
    575         /* Scroll pane vertically. */
     558        /* Scroll pane as necessary. */
    576559
    577560        if (coord.row < pane.sh_row) {
     
    579562                pane.rflags |= REDRAW_TEXT;
    580563        }
    581 
    582564        if (coord.row > pane.sh_row + pane.rows - 1) {
    583565                pane.sh_row = coord.row - pane.rows + 1;
     
    585567        }
    586568
    587         /* Scroll pane horizontally. */
    588 
    589         if (coord.column < pane.sh_column) {
    590                 pane.sh_column = coord.column;
    591                 pane.rflags |= REDRAW_TEXT;
    592         }
    593 
    594         if (coord.column > pane.sh_column + pane.columns - 1) {
    595                 pane.sh_column = coord.column - pane.columns + 1;
    596                 pane.rflags |= REDRAW_TEXT;
    597         }
    598 
    599569        pane.rflags |= (REDRAW_CARET | REDRAW_STATUS);
     570
    600571}
    601572
     
    612583        coord_t coord;
    613584        int num_rows;
    614         bool pure_vertical;
    615585
    616586        tag_get_pt(&pane.caret_pos, &pt);
     
    625595                if (coord.row > num_rows) coord.row = num_rows;
    626596        }
    627 
    628         /* For purely vertical movement try attaining @c ideal_column. */
    629         pure_vertical = (dcolumn == 0 && align_dir == dir_before);
    630         if (pure_vertical)
    631                 coord.column = pane.ideal_column;
    632597
    633598        /*
     
    639604        sheet_place_tag(&doc.sh, &pt, &pane.caret_pos);
    640605
    641         /* For non-vertical movement set the new value for @c ideal_column. */
    642         if (!pure_vertical) {
    643                 spt_get_coord(&pt, &coord);
    644                 pane.ideal_column = coord.column;
    645         }
    646 
    647606        caret_update();
    648607}
Note: See TracChangeset for help on using the changeset viewer.