From dbb953bfbe3b822ab0f39ff39f2e0e842a548da7 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Wed, 10 Jun 2009 11:57:45 +0300 Subject: [PATCH] Fixed Select/Unselect file mask. now mask applied to entire filename, not to part of filename Signed-off-by: Slava Zanko --- src/cmd.c | 2 +- src/search/glob.c | 8 +++++++- src/search/search.h | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/cmd.c b/src/cmd.c index 1f607fd80..6ebeab007 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -528,9 +528,9 @@ select_unselect_cmd (const char *title, const char *history_name, gboolean do_se g_free (reg_exp); return; } - search = mc_search_new (reg_exp, -1); search->search_type = MC_SEARCH_T_GLOB; + search->is_entire_line = TRUE; search->is_case_sentitive = case_sens != 0; for (i = 0; i < current_panel->count; i++) { diff --git a/src/search/glob.c b/src/search/glob.c index 474f4ce91..a7a764aed 100644 --- a/src/search/glob.c +++ b/src/search/glob.c @@ -115,9 +115,15 @@ void mc_search__cond_struct_new_init_glob (const char *charset, mc_search_t * mc_search, mc_search_cond_t * mc_search_cond) { - GString *tmp = mc_search__glob_translate_to_regex (mc_search_cond->str->str, &mc_search_cond->len); + GString *tmp = + mc_search__glob_translate_to_regex (mc_search_cond->str->str, &mc_search_cond->len); g_string_free (mc_search_cond->str, TRUE); + + if (mc_search->is_entire_line) { + g_string_prepend_c (tmp, '^'); + g_string_append_c (tmp, '$'); + } mc_search_cond->str = tmp; mc_search__cond_struct_new_init_regex (charset, mc_search, mc_search_cond); diff --git a/src/search/search.h b/src/search/search.h index 5b8f0a421..36070eb56 100644 --- a/src/search/search.h +++ b/src/search/search.h @@ -68,6 +68,9 @@ typedef struct mc_search_struct { /* search only once. Is this for replace? */ gboolean is_once_only; + /* search entire string (from begin to end). Used only with GLOB search type */ + gboolean is_entire_line; + /* function, used for getting data. NULL if not used */ mc_search_fn search_fn;