build: scripts/config - update to kconfig-v6.6.16
[openwrt/openwrt.git] / scripts / config / menu.c
index 22fd26a9f7147e79578efa8ad3b1872ae6f792f8..d41a61a73a490d29ee96c864e70c40be7d48712b 100644 (file)
@@ -661,11 +661,6 @@ const char *menu_get_prompt(struct menu *menu)
        return NULL;
 }
 
-struct menu *menu_get_root_menu(struct menu *menu)
-{
-       return &rootmenu;
-}
-
 struct menu *menu_get_parent_menu(struct menu *menu)
 {
        enum prop_type type;
@@ -706,6 +701,11 @@ static void get_dep_str(struct gstr *r, struct expr *expr, const char *prefix)
        }
 }
 
+int __attribute__((weak)) get_jump_key_char(void)
+{
+       return -1;
+}
+
 static void get_prompt_str(struct gstr *r, struct property *prop,
                           struct list_head *head)
 {
@@ -727,52 +727,41 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
        if (!expr_eq(prop->menu->dep, prop->visible.expr))
                get_dep_str(r, prop->visible.expr, "  Visible if: ");
 
-       menu = prop->menu->parent;
+       menu = prop->menu;
        for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
-               bool accessible = menu_is_visible(menu);
-
                submenu[i++] = menu;
-               if (location == NULL && accessible)
+               if (location == NULL && menu_is_visible(menu))
                        location = menu;
        }
        if (head && location) {
                jump = xmalloc(sizeof(struct jump_key));
+               jump->target = location;
+               list_add_tail(&jump->entries, head);
+       }
 
-               if (menu_is_visible(prop->menu)) {
-                       /*
-                        * There is not enough room to put the hint at the
-                        * beginning of the "Prompt" line. Put the hint on the
-                        * last "Location" line even when it would belong on
-                        * the former.
-                        */
-                       jump->target = prop->menu;
-               } else
-                       jump->target = location;
+       str_printf(r, "  Location:\n");
+       for (j = 0; --i >= 0; j++) {
+               int jk = -1;
+               int indent = 2 * j + 4;
 
-               if (list_empty(head))
-                       jump->index = 0;
-               else
-                       jump->index = list_entry(head->prev, struct jump_key,
-                                                entries)->index + 1;
+               menu = submenu[i];
+               if (jump && menu == location) {
+                       jump->offset = strlen(r->s);
+                       jk = get_jump_key_char();
+               }
 
-               list_add_tail(&jump->entries, head);
-       }
+               if (jk >= 0) {
+                       str_printf(r, "(%c)", jk);
+                       indent -= 3;
+               }
 
-       if (i > 0) {
-               str_printf(r, "  Location:\n");
-               for (j = 4; --i >= 0; j += 2) {
-                       menu = submenu[i];
-                       if (jump && menu == location)
-                               jump->offset = strlen(r->s);
-                       str_printf(r, "%*c-> %s", j, ' ',
-                                  menu_get_prompt(menu));
-                       if (menu->sym) {
-                               str_printf(r, " (%s [=%s])", menu->sym->name ?
-                                       menu->sym->name : "<choice>",
-                                       sym_get_string_value(menu->sym));
-                       }
-                       str_append(r, "\n");
+               str_printf(r, "%*c-> %s", indent, ' ', menu_get_prompt(menu));
+               if (menu->sym) {
+                       str_printf(r, " (%s [=%s])", menu->sym->name ?
+                               menu->sym->name : "<choice>",
+                               sym_get_string_value(menu->sym));
                }
+               str_append(r, "\n");
        }
 }