Ticket #303: 0001-Add-edit_move_block_to_left-edit_move_block_to_righ.patch

File 0001-Add-edit_move_block_to_left-edit_move_block_to_righ.patch, 4.5 KB (added by angel_il, 13 years ago)
  • edit/edit.c

    From 47dd46a1c232762bb8f9d327cca1f59b8e9a79f7 Mon Sep 17 00:00:00 2001
    From: Ilia Maslakov <il.smind@gmail.com>
    Date: Sun, 22 Mar 2009 22:53:21 +0000
    Subject: [PATCH] Add edit_move_block_to_left, edit_move_block_to_right procedure for shift block.
      Tab: if block selected, shift block to right,
      M-Tab(complete):  if block selected, shift block to left.
     Remove "static" from insert_spaces_tab.
    
    ---
     edit/edit.c    |   29 +++++++++++++++-------
     edit/editcmd.c |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
     2 files changed, 90 insertions(+), 10 deletions(-)
    
    diff --git a/edit/edit.c b/edit/edit.c
    index 2b88204..a236987 100644
    a b edit_delete_line (WEdit *edit) 
    19001900    }; 
    19011901} 
    19021902 
    1903 static void insert_spaces_tab (WEdit * edit, int half) 
     1903void insert_spaces_tab (WEdit * edit, int half) 
    19041904{ 
    19051905    int i; 
    19061906    edit_update_curs_col (edit); 
    edit_execute_cmd (WEdit *edit, int command, int char_for_insertion) 
    23772377        break; 
    23782378 
    23792379    case CK_Tab: 
    2380         edit_tab_cmd (edit); 
    2381         if (option_auto_para_formatting) { 
    2382             format_paragraph (edit, 0); 
    2383             edit->force |= REDRAW_PAGE; 
    2384         } else 
    2385             check_and_wrap_line (edit); 
    2386         break; 
     2380        /* if text marked shift block */ 
     2381        if (edit->mark1 != edit->mark2) { 
     2382            edit_move_block_to_right (edit); 
     2383        } else { 
     2384            edit_tab_cmd (edit); 
     2385            if (option_auto_para_formatting) { 
     2386                format_paragraph (edit, 0); 
     2387                edit->force |= REDRAW_PAGE; 
     2388            } else { 
     2389                check_and_wrap_line (edit); 
     2390            } 
     2391        } 
     2392        break; 
    23872393 
    23882394    case CK_Toggle_Insert: 
    23892395        edit->overwrite = (edit->overwrite == 0); 
    edit_execute_cmd (WEdit *edit, int command, int char_for_insertion) 
    25312537        edit_replace_cmd (edit, 1); 
    25322538        break; 
    25332539    case CK_Complete_Word: 
    2534         edit_complete_word_cmd (edit); 
     2540        /* if text marked shift block */ 
     2541        if (edit->mark1 != edit->mark2) { 
     2542            edit_move_block_to_left (edit); 
     2543        } else { 
     2544            edit_complete_word_cmd (edit); 
     2545        } 
    25352546        break; 
    25362547    case CK_Find_Definition: 
    25372548        edit_get_match_keyword_cmd (edit); 
  • edit/editcmd.c

    diff --git a/edit/editcmd.c b/edit/editcmd.c
    index d3f8ecf..b4de907 100644
    a b int edit_block_delete_cmd (WEdit * edit) 
    11831183    return edit_block_delete (edit); 
    11841184} 
    11851185 
    1186  
    11871186#define INPUT_INDEX 9 
    11881187#define SEARCH_DLG_WIDTH 58 
    11891188#define SEARCH_DLG_HEIGHT 10 
    edit_get_match_keyword_cmd (WEdit *edit) 
    31893188    } 
    31903189    g_free (match_expr); 
    31913190} 
     3191 
     3192void 
     3193edit_move_block_to_right (WEdit * edit) 
     3194{ 
     3195    long start_mark, end_mark; 
     3196    long cur_bol, start_bol; 
     3197 
     3198    if ( eval_marks (edit, &start_mark, &end_mark) ) 
     3199        return; 
     3200 
     3201    start_bol = edit_bol (edit, start_mark); 
     3202    cur_bol = edit_bol (edit, end_mark - 1); 
     3203    do { 
     3204        edit_cursor_move (edit, cur_bol - edit->curs1); 
     3205        if ( option_fill_tabs_with_spaces ) { 
     3206            if ( option_fake_half_tabs ) { 
     3207                insert_spaces_tab (edit, 1); 
     3208            } else { 
     3209                insert_spaces_tab (edit, 0); 
     3210            } 
     3211        } else { 
     3212            edit_insert (edit, '\t'); 
     3213        } 
     3214        edit_cursor_move (edit, edit_bol (edit, cur_bol) - edit->curs1); 
     3215        if ( cur_bol == 0 ) { 
     3216            break; 
     3217        } 
     3218        cur_bol = edit_bol (edit, cur_bol - 1); 
     3219    } while (cur_bol >= start_bol) ; 
     3220    edit->force |= REDRAW_PAGE; 
     3221} 
     3222 
     3223void 
     3224edit_move_block_to_left (WEdit * edit) 
     3225{ 
     3226    long start_mark, end_mark; 
     3227    long cur_bol, start_bol; 
     3228    int i, del_tab_width; 
     3229    int next_char; 
     3230 
     3231    if ( eval_marks (edit, &start_mark, &end_mark) ) 
     3232        return; 
     3233 
     3234    start_bol = edit_bol (edit, start_mark); 
     3235    cur_bol = edit_bol (edit, end_mark - 1); 
     3236    do { 
     3237        edit_cursor_move (edit, cur_bol - edit->curs1); 
     3238        if (option_fake_half_tabs) { 
     3239            del_tab_width = HALF_TAB_SIZE; 
     3240        } else { 
     3241            del_tab_width = option_tab_spacing; 
     3242        } 
     3243        next_char = edit_get_byte (edit, edit->curs1); 
     3244        if ( next_char == '\t' ) { 
     3245            edit_delete (edit); 
     3246        } else if ( next_char == ' ' ) { 
     3247            for (i = 1; i <= del_tab_width; i++) { 
     3248                if ( next_char == ' ' ) { 
     3249                    edit_delete (edit); 
     3250                } 
     3251                next_char = edit_get_byte (edit, edit->curs1); 
     3252            } 
     3253        } 
     3254        if ( cur_bol == 0 ) { 
     3255            break; 
     3256        } 
     3257        cur_bol = edit_bol (edit, cur_bol - 1); 
     3258    } while (cur_bol >= start_bol) ; 
     3259    edit->force |= REDRAW_PAGE; 
     3260}