]> git.hungrycats.org Git - linux/commitdiff
[PATCH] fix menuconfig choice item help display
authorAndrew Morton <akpm@osdl.org>
Wed, 4 Feb 2004 02:48:12 +0000 (18:48 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Wed, 4 Feb 2004 02:48:12 +0000 (18:48 -0800)
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
      Anders Gustafsson <andersg@0x63.nu>
      Roman Zippel <zippel@linux-m68k.org>

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.

scripts/kconfig/mconf.c
scripts/lxdialog/checklist.c

index 1a8e7c414445354056cf4699d18c311ddec7d743..b3c24cb98bfe3544be9d70f93bdfabc066ae4f0a 100644 (file)
@@ -607,6 +607,7 @@ static void conf_choice(struct menu *menu)
        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 *menu)
                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;
index 4f78688ed28a18443993b4dbac1741d1905bcc06..99705fe65bf14c54b4d95d555399de31938567a0 100644 (file)
@@ -138,9 +138,11 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
     /* 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, const char *prompt, int height, int width,
        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, const char *prompt, int height, int width,
 
                    }
                }
-            }
+            } else
+               fprintf (stderr, "%s", items[(scroll + choice) * 3]);
            delwin (dialog);
            free (status);
            return button;