Ticket #2706: hex viewer: continue search doesn't work.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2013-03-23 20:37:27 +04:00
parent fb7ee43d5b
commit 24d746ad2b
2 changed files with 35 additions and 14 deletions

View File

@ -98,10 +98,32 @@ mcview_remove_ext_script (mcview_t * view)
/* Both views */ /* Both views */
static void static void
mcview_search (mcview_t * view) mcview_search (mcview_t * view, gboolean start_search)
{ {
if (mcview_dialog_search (view)) if (start_search)
{
if (mcview_dialog_search (view))
{
if (view->hex_mode)
view->search_start = view->hex_cursor;
mcview_do_search (view);
}
}
else
{
if (view->hex_mode)
{
if (!mcview_search_options.backwards)
view->search_start = view->hex_cursor + 1;
else if (view->hex_cursor > 0)
view->search_start = view->hex_cursor - 1;
else
view->search_start = 0;
}
mcview_do_search (view); mcview_do_search (view);
}
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -110,13 +132,12 @@ static void
mcview_continue_search_cmd (mcview_t * view) mcview_continue_search_cmd (mcview_t * view)
{ {
if (view->last_search_string != NULL) if (view->last_search_string != NULL)
{ mcview_search (view, FALSE);
mcview_do_search (view);
}
else else
{ {
/* find last search string in history */ /* find last search string in history */
GList *history; GList *history;
history = history_get (MC_HISTORY_SHARED_SEARCH); history = history_get (MC_HISTORY_SHARED_SEARCH);
if (history != NULL && history->data != NULL) if (history != NULL && history->data != NULL)
{ {
@ -128,12 +149,12 @@ mcview_continue_search_cmd (mcview_t * view)
view->search = mc_search_new (view->last_search_string, -1); view->search = mc_search_new (view->last_search_string, -1);
view->search_nroff_seq = mcview_nroff_seq_new (view); view->search_nroff_seq = mcview_nroff_seq_new (view);
if (!view->search) if (view->search == NULL)
{ {
/* if not... then ask for an expression */ /* if not... then ask for an expression */
g_free (view->last_search_string); g_free (view->last_search_string);
view->last_search_string = NULL; view->last_search_string = NULL;
mcview_search (view); mcview_search (view, TRUE);
} }
else else
{ {
@ -144,7 +165,7 @@ mcview_continue_search_cmd (mcview_t * view)
view->search->search_fn = mcview_search_cmd_callback; view->search->search_fn = mcview_search_cmd_callback;
view->search->update_fn = mcview_search_update_cmd_callback; view->search->update_fn = mcview_search_update_cmd_callback;
mcview_do_search (view); mcview_search (view, FALSE);
} }
} }
else else
@ -152,7 +173,7 @@ mcview_continue_search_cmd (mcview_t * view)
/* if not... then ask for an expression */ /* if not... then ask for an expression */
g_free (view->last_search_string); g_free (view->last_search_string);
view->last_search_string = NULL; view->last_search_string = NULL;
mcview_search (view); mcview_search (view, TRUE);
} }
} }
} }
@ -406,15 +427,15 @@ mcview_execute_cmd (mcview_t * view, unsigned long command)
mcview_hexedit_save_changes (view); mcview_hexedit_save_changes (view);
break; break;
case CK_Search: case CK_Search:
mcview_search (view); mcview_search (view, TRUE);
break; break;
case CK_SearchForward: case CK_SearchForward:
mcview_search_options.backwards = FALSE; mcview_search_options.backwards = FALSE;
mcview_search (view); mcview_search (view, TRUE);
break; break;
case CK_SearchBackward: case CK_SearchBackward:
mcview_search_options.backwards = TRUE; mcview_search_options.backwards = TRUE;
mcview_search (view); mcview_search (view, TRUE);
break; break;
case CK_MagicMode: case CK_MagicMode:
mcview_toggle_magic_mode (view); mcview_toggle_magic_mode (view);

View File

@ -95,8 +95,8 @@ mcview_movement_fixups (mcview_t * view, gboolean reset_search)
mcview_scroll_to_cursor (view); mcview_scroll_to_cursor (view);
if (reset_search) if (reset_search)
{ {
view->search_start = view->dpy_start; view->search_start = view->hex_mode ? view->hex_cursor : view->dpy_start;
view->search_end = view->dpy_start; view->search_end = view->search_start;
} }
view->dirty++; view->dirty++;
} }