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 >