From: Bjorn Helgaas This patch fixes menuconfig so it can display help text for individual choice group config entries. Previously it would only display the help text attached to the "choice" item. There was no way to display the help attached to individual config entries inside the choice group. Typically, the "choice" item has no help text, and all the useful help is attached to the individual entries, so this was a bit of a problem. --- 25-akpm/scripts/kconfig/mconf.c | 19 ++++++++++++++----- 25-akpm/scripts/lxdialog/checklist.c | 10 +++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff -puN scripts/kconfig/mconf.c~menuconfig-choice-display-fix scripts/kconfig/mconf.c --- 25/scripts/kconfig/mconf.c~menuconfig-choice-display-fix Fri Jan 30 13:57:51 2004 +++ 25-akpm/scripts/kconfig/mconf.c Fri Jan 30 13:57:51 2004 @@ -607,6 +607,7 @@ static void conf_choice(struct menu *men struct symbol *active; int stat; + active = sym_get_choice_value(menu->sym); while (1) { cprint_init(); cprint("--title"); @@ -618,24 +619,32 @@ static void conf_choice(struct menu *men cprint("6"); current_menu = menu; - active = sym_get_choice_value(menu->sym); for (child = menu->list; child; child = child->next) { if (!menu_is_visible(child)) continue; cprint("%p", child); cprint("%s", menu_get_prompt(child)); - cprint(child->sym == active ? "ON" : "OFF"); + if (child->sym == sym_get_choice_value(menu->sym)) + cprint("ON"); + else if (child->sym == active) + cprint("SELECTED"); + else + cprint("OFF"); } stat = exec_conf(); switch (stat) { case 0: - if (sscanf(input_buf, "%p", &menu) != 1) + if (sscanf(input_buf, "%p", &child) != 1) break; - sym_set_tristate_value(menu->sym, yes); + sym_set_tristate_value(child->sym, yes); return; case 1: - show_help(menu); + if (sscanf(input_buf, "%p", &child) == 1) { + show_help(child); + active = child->sym; + } else + show_help(menu); break; case 255: return; diff -puN scripts/lxdialog/checklist.c~menuconfig-choice-display-fix scripts/lxdialog/checklist.c --- 25/scripts/lxdialog/checklist.c~menuconfig-choice-display-fix Fri Jan 30 13:57:51 2004 +++ 25-akpm/scripts/lxdialog/checklist.c Fri Jan 30 13:57:51 2004 @@ -138,9 +138,11 @@ dialog_checklist (const char *title, con /* Initializes status */ for (i = 0; i < item_no; i++) { status[i] = !strcasecmp (items[i * 3 + 2], "on"); - if (!choice && status[i]) - choice = i; + if ((!choice && status[i]) || !strcasecmp (items[i * 3 + 2], "selected")) + choice = i + 1; } + if (choice) + choice--; max_choice = MIN (list_height, item_no); @@ -302,6 +304,7 @@ dialog_checklist (const char *title, con case 'H': case 'h': case '?': + fprintf (stderr, "%s", items[(scroll + choice) * 3]); delwin (dialog); free (status); return 1; @@ -347,7 +350,8 @@ dialog_checklist (const char *title, con } } - } + } else + fprintf (stderr, "%s", items[(scroll + choice) * 3]); delwin (dialog); free (status); return button; _