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>
Этот коммит содержится в:
родитель
7e8975e022
Коммит
dde06f0503
40
src/screen.c
40
src/screen.c
@ -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
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user