Why specifying the text as direct argument to menu entry not enough? menuentry "Title" { .... }
Regards Vladimir 'phcoder' Serbinenko Le mar. 27 mai 2025, 15:57, Jiří Wolker via Grub-devel <grub-devel@gnu.org> a écrit : > --- > grub-core/commands/menuentry.c | 47 ++++++++++++++++++++++++++++++++++ > 1 file changed, 47 insertions(+) > > diff --git a/grub-core/commands/menuentry.c > b/grub-core/commands/menuentry.c > index 720e6d8ea..c68afae38 100644 > --- a/grub-core/commands/menuentry.c > +++ b/grub-core/commands/menuentry.c > @@ -43,6 +43,9 @@ static const struct grub_arg_option options[] = > anyone can boot it. */ > {"unrestricted", 0, 0, N_("This entry can be booted by any user."), > 0, ARG_TYPE_NONE}, > + {"menutitle", 0, 0, > + N_("Use STRING as menu title. When omitted, use the entry label."), > + N_("TITLE"), ARG_TYPE_STRING}, > {0, 0, 0, 0, 0, 0} > }; > > @@ -252,12 +255,44 @@ setparams_prefix (int argc, char **args) > return result; > } > > +static char * > +menutitle_prefix (char *old_prefix, const char *title) > +{ > + const char *t; > + char *p; > + char *result; > + grub_size_t len = 22; > + grub_size_t old_len = grub_strlen (old_prefix); > + > + /* Count resulting string length. */ > + for (t = title; *t; t++) > + len += (*t++ == '\'' ? 4 : 1); > + > + result = grub_malloc (old_len + len + 2); > + if (! result) > + return 0; > + > + p = result; > + grub_strcpy (p, old_prefix); > + p = result + old_len; > + grub_strcpy (p, "set grub_menu_title='"); > + p += 21; > + > + p = grub_strchrsub (p, title, '\'', "'\\''"); > + *p++ = '\''; > + *p++ = '\n'; > + *p = '\0'; > + > + return result; > +} > + > static grub_err_t > grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args) > { > char ch; > char *src; > char *prefix; > + char *old_prefix; > unsigned len; > grub_err_t r; > const char *users; > @@ -299,6 +334,18 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int > argc, char **args) > if (! prefix) > return grub_errno; > > + /* Prepend the menu title line. */ > + if (ctxt->state[6].arg) > + { > + old_prefix = prefix; > + prefix = menutitle_prefix (old_prefix, (ctxt->state[6].arg > + && grub_strlen (ctxt->state[6].arg) > 0) > + ? ctxt->state[6].arg : args[0]); > + if (! prefix) > + return grub_errno; > + grub_free (old_prefix); > + } > + > r = grub_normal_add_menu_entry (argc - 1, (const char **) args, > ctxt->state[0].args, ctxt->state[4].arg, > users, > -- > 2.45.3 > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel