Re: [PATCH v1] kconfig: nconf: Keep position after jump search

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Please ignore this email refer to v2

On Sat, Aug 5, 2023 at 11:16 PM Jesse Taube <mr.bossman075@xxxxxxxxx> wrote:
>
> In this Menuconfig, pressing the key in the (#) prefix will jump
> directly to that location. You will be returned to the current search
> results after exiting this new menu.
>
> In nconfig, exiting always returns to the top of the search output, not
> to where the (#) was displayed on the search output screen.
>
> This patch fixes that by saving the current position in the search.
>
> Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20230805034445.2508362-1-Mr.Bossman075@xxxxxxxxx/
> Signed-off-by: Jesse Taube <Mr.Bossman075@xxxxxxxxx>
> ---
>  scripts/kconfig/nconf.c     |  3 ++-
>  scripts/kconfig/nconf.gui.c | 12 +++++++++++-
>  scripts/kconfig/nconf.h     |  1 +
>  3 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
> index 172dc8fdd3ef..536332286c2f 100644
> --- a/scripts/kconfig/nconf.c
> +++ b/scripts/kconfig/nconf.c
> @@ -749,7 +749,7 @@ static void search_conf(void)
>         struct gstr res;
>         struct gstr title;
>         char *dialog_input;
> -       int dres;
> +       int dres, vscroll = 0, hscroll = 0;
>         bool again;
>
>         title = str_new();
> @@ -790,6 +790,7 @@ static void search_conf(void)
>                 res = get_relations_str(sym_arr, &head);
>                 dres = show_scroll_win_ext(main_window,
>                                 "Search Results", str_get(&res),
> +                               &vscroll, &hscroll,
>                                 handle_search_keys, &data);
>                 again = false;
>                 if (dres >= '1' && dres <= '9') {
> diff --git a/scripts/kconfig/nconf.gui.c b/scripts/kconfig/nconf.gui.c
> index bf015895053c..a3f7c921d6c2 100644
> --- a/scripts/kconfig/nconf.gui.c
> +++ b/scripts/kconfig/nconf.gui.c
> @@ -501,11 +501,12 @@ void show_scroll_win(WINDOW *main_window,
>                 const char *title,
>                 const char *text)
>  {
> -       (void)show_scroll_win_ext(main_window, title, (char *)text, NULL, NULL);
> +       (void)show_scroll_win_ext(main_window, title, NULL, NULL, (char *)text, NULL, NULL);
>  }
>
>  /* layman's scrollable window... */
>  int show_scroll_win_ext(WINDOW *main_window, const char *title, char *text,
> +                       int *vscroll, int *hscroll,
>                         extra_key_cb_fn extra_key_cb, void *data)
>  {
>         int res;
> @@ -522,6 +523,11 @@ int show_scroll_win_ext(WINDOW *main_window, const char *title, char *text,
>         PANEL *panel;
>         bool done = false;
>
> +       if (hscroll)
> +               start_x = *hscroll;
> +       if (vscroll)
> +               start_y = *vscroll;
> +
>         getmaxyx(stdscr, lines, columns);
>
>         /* find the widest line of msg: */
> @@ -624,6 +630,10 @@ int show_scroll_win_ext(WINDOW *main_window, const char *title, char *text,
>                         start_x = total_cols-text_cols;
>         }
>
> +       if (hscroll)
> +               *hscroll = start_x;
> +       if (vscroll)
> +               *vscroll = start_y;
>         del_panel(panel);
>         delwin(win);
>         refresh_all_windows(main_window);
> diff --git a/scripts/kconfig/nconf.h b/scripts/kconfig/nconf.h
> index 912f668c5772..ab836d582664 100644
> --- a/scripts/kconfig/nconf.h
> +++ b/scripts/kconfig/nconf.h
> @@ -81,6 +81,7 @@ int dialog_inputbox(WINDOW *main_window,
>                 const char *init, char **resultp, int *result_len);
>  void refresh_all_windows(WINDOW *main_window);
>  int show_scroll_win_ext(WINDOW *main_window, const char *title, char *text,
> +                       int *vscroll, int *hscroll,
>                         extra_key_cb_fn extra_key_cb, void *data);
>  void show_scroll_win(WINDOW *main_window,
>                 const char *title,
> --
> 2.40.0
>




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux