Ticket #173: mc.exec_first.patch

File mc.exec_first.patch, 10.8 KB (added by slavazanko, 15 years ago)
  • src/boxes.c

    diff -u -r src/boxes.c /home/makesub/mc-4.6.3-r504-my/src/boxes.c
    old new  
    269269    return result; 
    270270} 
    271271 
    272 static int SORT_X = 40, SORT_Y = 14; 
     272static int SORT_X = 60, SORT_Y = 14; 
    273273 
    274274static const char *sort_orders_names [SORT_TYPES]; 
    275275 
    276276sortfn * 
    277 sort_box (sortfn *sort_fn, int *reverse, int *case_sensitive) 
     277sort_box (sortfn *sort_fn, int *reverse, int *case_sensitive, int *exec_first) 
    278278{ 
    279279    int i, r, l; 
    280280    sortfn *result; 
    281     WCheck *c, *case_sense; 
     281    WCheck *c, *case_sense, *exec_ff; 
    282282 
    283283    const char *ok_button = _("&OK"); 
    284284    const char *cancel_button = _("&Cancel"); 
    285285    const char *reverse_label = _("&Reverse"); 
    286286    const char *case_label = _("case sensi&tive"); 
    287287    const char *sort_title = _("Sort order"); 
     288    const char *exec_label = _("Executable first"); 
    288289 
    289290    static int i18n_sort_flag = 0, check_pos = 0, button_pos = 0; 
    290291 
     
    342343                button_new (9, button_pos, B_ENTER, DEFPUSH_BUTTON, 
    343344                            ok_button, 0)); 
    344345 
     346    exec_ff = check_new (5, check_pos, *exec_first, exec_label); 
     347    add_widget (dd, exec_ff); 
    345348    case_sense = check_new (4, check_pos, *case_sensitive, case_label); 
    346349    add_widget (dd, case_sense); 
    347350    c = check_new (3, check_pos, *reverse, reverse_label); 
     
    355358 
    356359    r = dd->ret_value; 
    357360    if (r != B_CANCEL) { 
    358         result = (sortfn *) sort_orders[my_radio->sel].sort_fn; 
    359         *reverse = c->state & C_BOOL; 
    360         *case_sensitive = case_sense->state & C_BOOL; 
    361     } else 
    362         result = sort_fn; 
     361        result = (sortfn *) sort_orders[my_radio->sel].sort_fn; 
     362        *reverse = c->state & C_BOOL; 
     363        *case_sensitive = case_sense->state & C_BOOL; 
     364        *exec_first = exec_ff->state & C_BOOL; 
     365    } else { 
     366        result = sort_fn; 
     367    } 
    363368    destroy_dlg (dd); 
    364369 
    365370    return result; 
  • src/boxes.h

    diff -u -r src/boxes.h /home/makesub/mc-4.6.3-r504-my/src/boxes.h
    old new  
    77int     display_box      (WPanel *p, char **user, char **mini, 
    88                          int *use_msformat, int num); 
    99sortfn *sort_box         (sortfn *sort_fn, int *reverse, 
    10                           int *case_sensitive); 
     10                          int *case_sensitive, int *exec_first); 
    1111void    confirm_box      (void); 
    1212void    display_bits_box (void); 
    1313void    file_highlighting_box (void); 
  • src/dir.c

    diff -u -r src/dir.c /home/makesub/mc-4.6.3-r504-my/src/dir.c
    old new  
    4848 
    4949/* Are the files sorted case sensitively? */ 
    5050static int case_sensitive = OS_SORT_CASE_SENSITIVE_DEFAULT; 
     51static int exec_first = 1; 
    5152 
    5253#ifdef ENABLE_DNOTIFY 
    5354extern int panel_dnotify_handler_set; 
    5455#endif 
    5556 
    56 #define MY_ISDIR(x) ( (S_ISDIR (x->st.st_mode) || x->f.link_to_dir) ? 1 : 0) 
     57#define MY_ISDIR(x) ( (is_exe (x->st.st_mode) && !(S_ISDIR (x->st.st_mode) || x->f.link_to_dir) && (exec_first == 1)) ? 1 : ( (S_ISDIR (x->st.st_mode) || x->f.link_to_dir) ? 2 : 0) ) 
    5758 
    5859sort_orders_t sort_orders [SORT_TYPES_TOTAL] = { 
    5960    { N_("&Unsorted"),    unsorted }, 
     
    233234 
    234235 
    235236void 
    236 do_sort (dir_list *list, sortfn *sort, int top, int reverse_f, int case_sensitive_f) 
     237do_sort (dir_list *list, sortfn *sort, int top, int reverse_f, int case_sensitive_f, int exec_first_f) 
    237238{ 
    238239    int dot_dot_found = 0; 
    239240 
     
    247248 
    248249    reverse = reverse_f ? -1 : 1; 
    249250    case_sensitive = case_sensitive_f; 
     251    exec_first = exec_first_f; 
    250252    qsort (&(list->list) [dot_dot_found], 
    251253           top + 1 - dot_dot_found, sizeof (file_entry), sort); 
    252254} 
     
    400402#ifdef ENABLE_DNOTIFY 
    401403_GNU_INLINE_ int _ATTRIBUTE_ALWAYS_INLINE_ 
    402404do_load_dir (const char *path, dir_list *list, sortfn *sort, int local_reverse, 
    403              int case_sens, const char *filter, 
     405             int case_sens, int exec_ff, const char *filter, 
    404406             int *dn_fd, char *dn_dir, void (*dn_hd)(int, siginfo_t *, void *)) 
    405407#else 
    406408_GNU_INLINE_ int _ATTRIBUTE_ALWAYS_INLINE_ 
    407409do_load_dir (const char *path, dir_list *list, sortfn *sort, int local_reverse, 
    408              int case_sens, const char *filter) 
     410             int case_sens, int exec_ff, const char *filter) 
    409411#endif 
    410412{ 
    411413    DIR *dirp; 
     
    518520    } 
    519521 
    520522    if (next_free) { 
    521         do_sort (list, sort, next_free - 1, local_reverse, case_sens); 
     523        do_sort (list, sort, next_free - 1, local_reverse, case_sens, exec_ff); 
    522524    } 
    523525 
    524526    mc_closedir (dirp); 
     
    574576/* If filter is null, then it is a match */ 
    575577int 
    576578do_reload_dir (const char *path, dir_list *list, sortfn *sort, int count, 
    577                int rev, int do_case_sensitive, const char *filter) 
     579               int rev, int do_case_sensitive, int do_exec_first, const char *filter) 
    578580{ 
    579581    DIR *dirp; 
    580582    struct dirent *dp; 
     
    671673    tree_store_end_check (); 
    672674    g_hash_table_destroy (marked_files); 
    673675    if (next_free) { 
    674         do_sort (list, sort, next_free - 1, rev, do_case_sensitive); 
     676        do_sort (list, sort, next_free - 1, rev, do_case_sensitive, do_exec_first); 
    675677    } 
    676678    clean_dir (&dir_copy, count); 
    677679    return next_free; 
  • src/dir.h

    diff -u -r src/dir.h /home/makesub/mc-4.6.3-r504-my/src/dir.h
    old new  
    3131typedef int sortfn (const void *, const void *); 
    3232 
    3333void do_sort (dir_list * list, sortfn * sort, int top, int reverse, 
    34               int case_sensitive); 
     34              int case_sensitive, int exec_first); 
    3535int do_reload_dir (const char *path, dir_list * list, sortfn * sort, int count, 
    36                    int reverse, int case_sensitive, const char *filter); 
     36                   int reverse, int case_sensitive, int exec_first, const char *filter); 
    3737void clean_dir (dir_list * list, int count); 
    3838int set_zero_dir (dir_list * list); 
    3939int handle_path (dir_list *list, const char *path, struct stat *buf1, 
  • src/inline_dir.h

    Только в /home/makesub/mc-4.6.3-r504-my/src: hotlist.o
    Только в /home/makesub/mc-4.6.3-r504-my/src: info.o
    diff -u -r src/inline_dir.h /home/makesub/mc-4.6.3-r504-my/src/inline_dir.h
    old new  
    1515#ifdef ENABLE_DNOTIFY 
    1616extern int 
    1717do_load_dir (const char *path, dir_list *list, sortfn *sort, int local_reverse, 
    18              int case_sens, const char *filter, 
     18             int case_sens, int exec_ff, const char *filter, 
    1919             int *dn_fd, char *dn_dir, void (*dn_hd)(int, siginfo_t *, void *)); 
    2020#else 
    2121extern int 
    2222do_load_dir (const char *path, dir_list *list, sortfn *sort, int local_reverse, 
    23              int case_sens, const char *filter); 
     23             int case_sens, int exec_ff, const char *filter); 
    2424#endif 
    2525 
    2626#ifdef  __cplusplus 
  • src/main.c

    diff -u -r src/main.c /home/makesub/mc-4.6.3-r504-my/src/main.c
    old new  
    696696    panel_clean_dir (panel); 
    697697    panel->count = 
    698698        do_load_dir (panel->cwd, &panel->dir, panel->sort_type, 
    699                      panel->reverse, panel->case_sensitive, panel->filter 
     699                     panel->reverse, panel->case_sensitive, panel->exec_first, panel->filter 
    700700#ifdef ENABLE_DNOTIFY 
    701701#  ifdef __linux__ 
    702702                     , &panel->dnotify_fd, panel->dnotify_dir, panel_dnotify_handler); 
     
    852852        return; 
    853853 
    854854    p = MENU_PANEL; 
    855     sort_order = sort_box (p->sort_type, &p->reverse, &p->case_sensitive); 
     855    sort_order = sort_box (p->sort_type, &p->reverse, &p->case_sensitive, &p->exec_first); 
    856856 
    857857    panel_set_sort_order (p, sort_order); 
    858858 
  • src/panel.h

    diff -u -r src/panel.h /home/makesub/mc-4.6.3-r504-my/src/panel.h
    old new  
    5151    int      selected;          /* Index to the selected file */ 
    5252    int      reverse;           /* Show listing in reverse? */ 
    5353    int      case_sensitive;    /* Listing is case sensitive? */ 
     54    int      exec_first;    /* Show executable first */ 
    5455    int      split;             /* Split panel to allow two columns */ 
    5556    int      is_panelized;      /* Flag: special filelisting, can't reload */ 
    5657    int      frame_size;        /* half or full frame */ 
  • src/screen.c

    Только в /home/makesub/mc-4.6.3-r504-my/src: panelize.o
    Только в /home/makesub/mc-4.6.3-r504-my/src: profile.o
    Только в /home/makesub/mc-4.6.3-r504-my/src: recode.o
    Только в /home/makesub/mc-4.6.3-r504-my/src: regex.o
    Только в /home/makesub/mc-4.6.3-r504-my/src: rxvt.o
    diff -u -r src/screen.c /home/makesub/mc-4.6.3-r504-my/src/screen.c
    old new  
    16421642    /* Load the default format */ 
    16431643    panel->count = 
    16441644        do_load_dir (panel->cwd, &panel->dir, panel->sort_type, 
    1645                      panel->reverse, panel->case_sensitive, panel->filter 
     1645                     panel->reverse, panel->case_sensitive, panel->exec_first, panel->filter 
    16461646#ifdef ENABLE_DNOTIFY 
    16471647#  ifdef __linux__ 
    16481648                     , &panel->dnotify_fd, panel->dnotify_dir, panel_dnotify_handler); 
     
    16841684 
    16851685    panel->count = 
    16861686        do_reload_dir (panel->cwd, &panel->dir, panel->sort_type, 
    1687                        panel->count, panel->reverse, panel->case_sensitive, 
     1687                       panel->count, panel->reverse, panel->case_sensitive,panel->exec_first, 
    16881688                       panel->filter); 
    16891689 
    16901690    panel->dirty = 1; 
     
    31623162 
    31633163    filename = g_strdup (selection (panel)->fname); 
    31643164    unselect_item (panel); 
    3165     do_sort (&panel->dir, panel->sort_type, panel->count-1, panel->reverse, panel->case_sensitive); 
     3165    do_sort (&panel->dir, panel->sort_type, panel->count-1, panel->reverse, panel->case_sensitive, panel->exec_first); 
    31663166    panel->selected = -1; 
    31673167    for (i = panel->count; i; i--){ 
    31683168        if (!strcmp (panel->dir.list [i-1].fname, filename)){ 
  • src/setup.c

    diff -u -r src/setup.c /home/makesub/mc-4.6.3-r504-my/src/setup.c
    old new  
    270270    save_string (section, "reverse", buffer, profile_name); 
    271271    g_snprintf (buffer, sizeof (buffer), "%d", panel->case_sensitive); 
    272272    save_string (section, "case_sensitive", buffer, profile_name); 
     273    g_snprintf (buffer, sizeof (buffer), "%d", panel->exec_first); 
     274    save_string (section, "exec_first", buffer, profile_name); 
    273275    for (i = 0; sort_names [i].key; i++) 
    274276        if (sort_names [i].sort_type == (sortfn *) panel->sort_type){ 
    275277            save_string (section, "sort_order", 
     
    423425 
    424426    panel->reverse = load_int (section, "reverse", 0); 
    425427    panel->case_sensitive = load_int (section, "case_sensitive", OS_SORT_CASE_SENSITIVE_DEFAULT); 
     428    panel->exec_first = load_int (section, "exec_first", 0); 
    426429 
    427430    /* Load sort order */ 
    428431    load_string (section, "sort_order", "name", buffer, sizeof (buffer));