diff --git a/commands.c b/commands.c index bd058fa..b6ad942 100644 --- a/commands.c +++ b/commands.c @@ -340,6 +340,8 @@ cmd_search(girara_session_t* session, const char* input, girara_argument_t* argu bool firsthit = true; zathura_error_t error = ZATHURA_ERROR_OK; + /* set search direction */ + zathura->global.search_direction = argument->n; unsigned int number_of_pages = zathura_document_get_number_of_pages(zathura->document); unsigned int current_page_number = zathura_document_get_current_page_number(zathura->document); @@ -383,7 +385,12 @@ cmd_search(girara_session_t* session, const char* input, girara_argument_t* argu if (page_id != 0) { page_set_delayed(zathura, zathura_page_get_index(page)); } - g_object_set(page_widget, "search-current", 0, NULL); + if (argument->n == BACKWARD) { + /* start at bottom hit in page */ + g_object_set(page_widget, "search-current", girara_list_size(result) - 1, NULL); + } else { + g_object_set(page_widget, "search-current", 0, NULL); + } firsthit = false; } } diff --git a/shortcuts.c b/shortcuts.c index 0614f49..9a33d22 100644 --- a/shortcuts.c +++ b/shortcuts.c @@ -743,7 +743,10 @@ sc_search(girara_session_t* session, girara_argument_t* argument, const int num_pages = zathura_document_get_number_of_pages(zathura->document); const int cur_page = zathura_document_get_current_page_number(zathura->document); + int diff = argument->n == FORWARD ? 1 : -1; + if (zathura->global.search_direction == BACKWARD) + diff = -diff; zathura_page_t* target_page = NULL; int target_idx = 0; diff --git a/zathura.c b/zathura.c index 2eb9043..8da1375 100644 --- a/zathura.c +++ b/zathura.c @@ -62,6 +62,7 @@ zathura_create(void) /* global settings */ zathura->global.recolor = false; zathura->global.update_page_number = true; + zathura->global.search_direction = FORWARD; /* plugins */ zathura->plugins.manager = zathura_plugin_manager_new(); diff --git a/zathura.h b/zathura.h index 1a0ba07..6970063 100644 --- a/zathura.h +++ b/zathura.h @@ -97,6 +97,7 @@ struct zathura_s bool recolor_keep_hue; /**< Keep hue when recoloring */ bool recolor; /**< Recoloring mode switch */ bool update_page_number; /**< Update current page number */ + int search_direction; /**< Current search direction (FORWARD or BACKWARD) */ girara_list_t* marks; /**< Marker */ char** arguments; /**> Arguments that were passed at startup */ } global;