1
1

do_search(): minor optimization.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>

    fix trouble with unescaped ',|\\[]{}'

Signed-off-by: Ilia Maslakov <il.smind@gmail.com>
Этот коммит содержится в:
Ilia Maslakov 2010-02-19 10:28:03 +03:00
родитель 7e8975e022
Коммит dde06f0503

Просмотреть файл

@ -2195,10 +2195,10 @@ do_search (WPanel *panel, int c_code)
{
size_t l;
int i, sel;
int wrapped = 0;
gboolean wrapped = FALSE;
char *act;
mc_search_t *search;
char *reg_exp;
char *reg_exp, *esc_str;
gboolean is_found = FALSE;
l = strlen (panel->search_buffer);
@ -2210,7 +2210,7 @@ do_search (WPanel *panel, int c_code)
}
panel->search_chpoint = 0;
} else {
if (c_code && (gsize) panel->search_chpoint < sizeof (panel->search_char)) {
if (c_code != 0 && (gsize) panel->search_chpoint < sizeof (panel->search_char)) {
panel->search_char[panel->search_chpoint] = c_code;
panel->search_chpoint++;
}
@ -2233,8 +2233,10 @@ do_search (WPanel *panel, int c_code)
}
}
}
reg_exp = g_strdup_printf ("%s*", panel->search_buffer);
search = mc_search_new (reg_exp, -1);
esc_str = strutils_escape (reg_exp, -1, ",|\\{}[]", TRUE);
search = mc_search_new (esc_str, -1);
search->search_type = MC_SEARCH_T_GLOB;
search->is_entire_line = TRUE;
search->is_case_sentitive = 0;
@ -2245,7 +2247,7 @@ do_search (WPanel *panel, int c_code)
i = 0;
if (wrapped)
break;
wrapped = 1;
wrapped = TRUE;
}
if (mc_search_run (search, panel->dir.list[i].fname,
0, panel->dir.list[i].fnamelen, NULL)) {
@ -2254,27 +2256,19 @@ do_search (WPanel *panel, int c_code)
break;
}
}
if (! is_found) {
if (c_code != KEY_BACKSPACE) {
act = panel->search_buffer + l;
str_prev_noncomb_char (&act, panel->search_buffer);
act[0] = '\0';
}
mc_search_free (search);
g_free (reg_exp);
return;
if (is_found) {
unselect_item (panel);
panel->selected = sel;
select_item (panel);
paint_panel (panel);
} else if (c_code != KEY_BACKSPACE) {
act = panel->search_buffer + l;
str_prev_noncomb_char (&act, panel->search_buffer);
act[0] = '\0';
}
unselect_item (panel);
panel->selected = sel;
select_item (panel);
act = panel->search_buffer + strlen (panel->search_buffer);
select_item (panel);
paint_panel (panel);
mc_search_free (search);
g_free (reg_exp);
g_free (esc_str);
}
static void