diff --git a/misc/mc.default.keymap b/misc/mc.default.keymap index 629271b70..34df586f2 100644 --- a/misc/mc.default.keymap +++ b/misc/mc.default.keymap @@ -127,6 +127,7 @@ Bottom = alt-gt; end; c1 # SortByExt = # SortBySize = # SortByMTime = +# Filter = # ScrollLeft = # ScrollRight = diff --git a/misc/mc.emacs.keymap b/misc/mc.emacs.keymap index 94c03c70a..d5071ab61 100644 --- a/misc/mc.emacs.keymap +++ b/misc/mc.emacs.keymap @@ -127,6 +127,7 @@ Bottom = alt-gt; end; c1 # SortByExt = # SortBySize = # SortByMTime = +# Filter = # ScrollLeft = # ScrollRight = diff --git a/src/filemanager/cmd.c b/src/filemanager/cmd.c index 95d7e8652..e91f43c21 100644 --- a/src/filemanager/cmd.c +++ b/src/filemanager/cmd.c @@ -167,40 +167,6 @@ do_edit (const vfs_path_t * what_vpath) /* --------------------------------------------------------------------------------------------- */ -static void -set_panel_filter_to (WPanel * p, char *filter) -{ - MC_PTR_FREE (p->filter); - - /* Three ways to clear filter: NULL, "", "*" */ - if (filter == NULL || filter[0] == '\0' || (filter[0] == '*' && filter[1] == '\0')) - g_free (filter); - else - p->filter = filter; - reread_cmd (); -} - -/* --------------------------------------------------------------------------------------------- */ -/** Set a given panel filter expression */ - -static void -set_panel_filter (WPanel * p) -{ - char *reg_exp; - const char *x; - - x = p->filter != NULL ? p->filter : easy_patterns ? "*" : "."; - - reg_exp = input_dialog_help (_("Filter"), - _("Set expression for filtering filenames"), - "[Filter...]", MC_HISTORY_FM_PANEL_FILTER, x, FALSE, - INPUT_COMPLETE_FILENAMES); - if (reg_exp != NULL) - set_panel_filter_to (p, reg_exp); -} - -/* --------------------------------------------------------------------------------------------- */ - static int compare_files (const vfs_path_t * vpath1, const vfs_path_t * vpath2, off_t size) { @@ -818,21 +784,6 @@ mkdir_cmd (WPanel * panel) g_free (dir); } -/* --------------------------------------------------------------------------------------------- */ -/** Invoked from the left/right menus */ - -void -filter_cmd (void) -{ - if (SELECTED_IS_PANEL) - { - WPanel *p; - - p = MENU_PANEL; - set_panel_filter (p); - } -} - /* --------------------------------------------------------------------------------------------- */ void @@ -1426,7 +1377,7 @@ listing_cmd (void) p = PANEL (get_panel_widget (MENU_PANEL_IDX)); p->is_panelized = FALSE; - set_panel_filter_to (p, NULL); /* including panel reload */ + panel_set_filter (p, NULL); /* including panel reload */ } /* --------------------------------------------------------------------------------------------- */ diff --git a/src/filemanager/cmd.h b/src/filemanager/cmd.h index 0630fe07a..26bfdb7d3 100644 --- a/src/filemanager/cmd.h +++ b/src/filemanager/cmd.h @@ -58,7 +58,6 @@ void edit_cmd_new (void); void edit_cmd_force_internal (const WPanel * panel); #endif void mkdir_cmd (WPanel * panel); -void filter_cmd (void); void reread_cmd (void); void vfs_list (WPanel * panel); void ext_cmd (void); diff --git a/src/filemanager/filemanager.c b/src/filemanager/filemanager.c index ba557e91e..aaa1ad514 100644 --- a/src/filemanager/filemanager.c +++ b/src/filemanager/filemanager.c @@ -1240,9 +1240,6 @@ midnight_execute_cmd (Widget * sender, long command) case CK_ExternalPanelize: external_panelize (); break; - case CK_Filter: - filter_cmd (); - break; case CK_ViewFiltered: view_filtered_cmd (current_panel); break; @@ -1360,6 +1357,7 @@ midnight_execute_cmd (Widget * sender, long command) case CK_Select: case CK_Unselect: case CK_SelectInvert: + case CK_Filter: res = send_message (current_panel, filemanager, MSG_ACTION, command, NULL); break; case CK_Shell: diff --git a/src/filemanager/panel.c b/src/filemanager/panel.c index 8df281f2b..cb35f9e94 100644 --- a/src/filemanager/panel.c +++ b/src/filemanager/panel.c @@ -2658,6 +2658,24 @@ panel_select_invert_files (WPanel * panel) } } +/* --------------------------------------------------------------------------------------------- */ + +static void +panel_do_set_filter (WPanel * panel) +{ + char *reg_exp; + const char *x; + + x = panel->filter != NULL ? panel->filter : easy_patterns ? "*" : "."; + + reg_exp = input_dialog_help (_("Filter"), + _("Set expression for filtering filenames"), + "[Filter...]", MC_HISTORY_FM_PANEL_FILTER, x, FALSE, + INPUT_COMPLETE_FILENAMES); + if (reg_exp != NULL) + panel_set_filter (panel, reg_exp); +} + /* --------------------------------------------------------------------------------------------- */ /** Incremental search of a file name in the panel. * @param panel instance of WPanel structure @@ -3509,6 +3527,9 @@ panel_execute_cmd (WPanel * panel, long command) case CK_Unselect: panel_unselect_files (panel); break; + case CK_Filter: + panel_do_set_filter (panel); + break; case CK_PageDown: next_page (panel); break; @@ -4572,6 +4593,22 @@ set_panel_formats (WPanel * p) /* --------------------------------------------------------------------------------------------- */ +void +panel_set_filter (WPanel * panel, char *filter) +{ + MC_PTR_FREE (panel->filter); + + /* Three ways to clear filter: NULL, "", "*" */ + if (filter == NULL || filter[0] == '\0' || (filter[0] == '*' && filter[1] == '\0')) + g_free (filter); + else + panel->filter = filter; + + reread_cmd (); +} + +/* --------------------------------------------------------------------------------------------- */ + /* Select current item and readjust the panel */ void select_item (WPanel * panel) diff --git a/src/filemanager/panel.h b/src/filemanager/panel.h index 039950486..cad4e0459 100644 --- a/src/filemanager/panel.h +++ b/src/filemanager/panel.h @@ -179,6 +179,8 @@ vfs_path_t *remove_encoding_from_path (const vfs_path_t * vpath); void update_panels (panel_update_flags_t flags, const char *current_file); int set_panel_formats (WPanel * p); +void panel_set_filter (WPanel * panel, char *filter); + void try_to_select (WPanel * panel, const char *name); void unmark_files (WPanel * panel);