Rob Cornish wrote:
> Agreed, setting it in global is cleaner. Please see below.
> 
> Cheers!
> 
> ---
>  commands.c  |  9 ++++++++-
>  shortcuts.c | 11 ++++++++++-
>  zathura.h   |  1 +
>  3 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/commands.c b/commands.c
> index 5d568f7..9436ad5 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);
> @@ -380,7 +382,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 ecd72c5..dab4595 100644
> --- a/shortcuts.c
> +++ b/shortcuts.c
> @@ -621,7 +621,16 @@ 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;
> +
> +  int diff;
> +  switch (zathura->global.search_direction) {
> +    case FORWARD:
> +      diff = argument->n == FORWARD ? 1 : -1;
> +      break;
> +    case BACKWARD:
> +      diff = argument->n == BACKWARD ? 1 : -1;
> +      break;
> +  }

This seems correct, but it's perhaps a bit convoluted, isn't it (double
negations or something)? How about doing this instead:

  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.h b/zathura.h
> index 9aa807c..e435259 100644
> --- a/zathura.h
> +++ b/zathura.h
> @@ -87,6 +87,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;

Cheers,

-- 
Benoît Knecht
_______________________________________________
zathura mailing list
[email protected]
http://lists.pwmt.org/mailman/listinfo/zathura

Reply via email to