grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Add submenu support to 10_linux (grub-mkconfig)


From: Jordan Uggla
Subject: Re: [PATCH] Add submenu support to 10_linux (grub-mkconfig)
Date: Tue, 28 Feb 2012 22:10:07 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120217 Thunderbird/11.0

In my first patch I rather stupidly asked gettext for a translation of "%s". 
Updated patch below does not have this mistake.

-- 
Jordan Uggla (Jordan_U on irc.freenode.net)

=== modified file 'util/grub-mkconfig.in'
--- util/grub-mkconfig.in       2012-02-26 17:37:54 +0000
+++ util/grub-mkconfig.in       2012-02-27 08:22:48 +0000
@@ -206,7 +206,8 @@
   GRUB_INIT_TUNE \
   GRUB_SAVEDEFAULT \
   GRUB_ENABLE_CRYPTODISK \
-  GRUB_BADRAM
+  GRUB_BADRAM \
+  GRUB_ENABLE_SUBMENUS
 
 if test "x${grub_cfg}" != "x"; then
   rm -f "${grub_cfg}.new"

=== modified file 'util/grub.d/10_linux.in'
--- util/grub.d/10_linux.in     2012-02-26 16:28:05 +0000
+++ util/grub.d/10_linux.in     2012-02-29 03:03:01 +0000
@@ -63,15 +63,25 @@
 {
   os="$1"
   version="$2"
-  recovery="$3"
+  type="$3"
   args="$4"
-  if ${recovery} ; then
-    title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
+
+  case $type in
+  simple)
+    title="%s" ;;
+  recovery)
+    title="$(gettext_quoted "%s, with Linux %s (recovery mode)")" ;;
+  *)
+    title="$(gettext_quoted "%s, with Linux %s")" ;;
+  esac
+
+  if [ "x$type" = "xsimple" ]; then
+    printf "menuentry '${title}' ${CLASS} {\n" "${os}"
   else
-    title="$(gettext_quoted "%s, with Linux %s")"
+    printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
   fi
-  printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
-  if ! ${recovery} ; then
+
+  if [ x$type != xrecovery ] ; then
       save_default_entry | sed -e "s/^/\t/"
   fi
 
@@ -145,6 +155,11 @@
 prepare_boot_cache=
 prepare_root_cache=
 
+# Extra indentation to add to menu entries in a submenu. We're not in a submenu
+# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
+submenu_indentation=""
+
+is_first_entry=true
 while [ "x$list" != "x" ] ; do
   linux=`version_find_latest $list`
   gettext_printf "Found linux image: %s\n" "$linux" >&2
@@ -189,12 +204,32 @@
     linux_root_device_thisversion=${GRUB_DEVICE}
   fi
 
-  linux_entry "${OS}" "${version}" false \
-      "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+  if [ "x$GRUB_ENABLE_SUBMENUS" = xtrue -a "x$is_first_entry" = xtrue ]; then
+    linux_entry "${OS}" "${version}" simple \
+    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+
+    submenu_indentation="\t"
+
+    cat << EOF
+submenu '$(gettext_quoted "Advanced options for ${OS}")' {
+EOF
+  fi
+
+  linux_entry "${OS}" "${version}" advanced \
+              "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" \
+              | sed "s/^/$submenu_indentation/"
   if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
-    linux_entry "${OS}" "${version}" true \
-       "single ${GRUB_CMDLINE_LINUX}"
+    linux_entry "${OS}" "${version}" recovery \
+                "single ${GRUB_CMDLINE_LINUX}" \
+                | sed "s/^/$submenu_indentation/"
   fi
 
   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
+  is_first_entry=false
 done
+
+# If submenus are enabled, and at least one kernel was found, then we need to
+# add a closing '}' for the submenu command.
+if [ x"$GRUB_ENABLE_SUBMENUS" = xtrue -a x"$is_first_entry" != xtrue ]; then
+  echo '}'
+fi




reply via email to

[Prev in Thread] Current Thread [Next in Thread]