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

Reply via email to