From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1S3q9k-0000H6-O3 for mharc-grub-devel@gnu.org; Sat, 03 Mar 2012 09:41:56 -0500 Received: from eggs.gnu.org ([208.118.235.92]:42600) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3q9h-0000Gz-0y for grub-devel@gnu.org; Sat, 03 Mar 2012 09:41:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1S3q9e-0000Pz-9z for grub-devel@gnu.org; Sat, 03 Mar 2012 09:41:52 -0500 Received: from mail-ey0-f169.google.com ([209.85.215.169]:36342) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1S3q9d-0000Ph-UN for grub-devel@gnu.org; Sat, 03 Mar 2012 09:41:50 -0500 Received: by eaal1 with SMTP id l1so958006eaa.0 for ; Sat, 03 Mar 2012 06:41:48 -0800 (PST) Received-SPF: pass (google.com: domain of phcoder@gmail.com designates 10.213.20.6 as permitted sender) client-ip=10.213.20.6; Authentication-Results: mr.google.com; spf=pass (google.com: domain of phcoder@gmail.com designates 10.213.20.6 as permitted sender) smtp.mail=phcoder@gmail.com; dkim=pass header.i=phcoder@gmail.com Received: from mr.google.com ([10.213.20.6]) by 10.213.20.6 with SMTP id d6mr1897460ebb.57.1330785708040 (num_hops = 1); Sat, 03 Mar 2012 06:41:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=v0z8HaCG2i+4wEzexBVTmYX57mK/O0wt63LtgaJ8gwg=; b=q05zi5nd1R+i1mOlP3aPtYuRbWdTs6jqR4y4vPEnx1D4wcr+N0eYvY+ijVYb50ngw+ QLMnWVm1WjxCS6U3IqNW/Rbj2Lrn34MlY1wZEiUGHDArRTTdgyfFbCImNjuRrkogbrfO 87U7NVqv4QtLvYtvy1dQpHE6ikK9CCOy19z5ZwCjmwOndtRojkpQMuMr6cqIh8x7FtG0 BgyeuTm6McV0X6/p/IyT1P9DDMW6I5a0tifnp8QoSaroXH0KESO/RLYGeUOhoFhL1N5n wHiPuKRAxXD8FSb2Vqf86tbd/4xjlMabozTPCnqZzRg8WDzGeteT9EVz5vRS7CxOnUGO pgqQ== Received: by 10.213.20.6 with SMTP id d6mr1460788ebb.57.1330785707969; Sat, 03 Mar 2012 06:41:47 -0800 (PST) Received: from debian.x201.phnet (103-234.197-178.cust.bluewin.ch. [178.197.234.103]) by mx.google.com with ESMTPS id n17sm34872284eei.3.2012.03.03.06.41.44 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 03 Mar 2012 06:41:47 -0800 (PST) Message-ID: <4F522DA1.4020705@gmail.com> Date: Sat, 03 Mar 2012 15:41:37 +0100 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20120216 Icedove/8.0 MIME-Version: 1.0 To: The development of GNU GRUB , Colin Watson Subject: Re: [PATCH] Add submenu support to 10_linux (grub-mkconfig) References: <4F4C117D.5090800@gmail.com> <4F4DC13F.3030402@gmail.com> <4F5228C0.2020409@gmail.com> In-Reply-To: <4F5228C0.2020409@gmail.com> Content-Type: multipart/mixed; boundary="------------030809000409040905000608" X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.215.169 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Mar 2012 14:41:54 -0000 This is a multi-part message in MIME format. --------------030809000409040905000608 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit > Right now I believe that (1) is the most reasonable > Somethine like in the attached patch. I haven't tested it yet in real migration scenario though -- Regards Vladimir 'φ-coder/phcoder' Serbinenko --------------030809000409040905000608 Content-Type: text/x-diff; name="menu.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="menu.diff" === modified file 'util/grub-mkconfig.in' --- util/grub-mkconfig.in 2012-03-03 12:05:08 +0000 +++ util/grub-mkconfig.in 2012-03-03 14:39:52 +0000 @@ -40,6 +40,7 @@ self=`basename $0` grub_probe="${sbindir}/`echo grub-probe | sed "${transform}"`" +grub_editenv="${bindir}/`echo grub-editenv | sed "${transform}"`" grub_script_check="${bindir}/`echo grub-script-check | sed "${transform}"`" export TEXTDOMAIN=@PACKAGE@ @@ -165,6 +166,11 @@ esac done +GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT" + +if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi + + # These are defined in this script, export them here so that user can # override them. export GRUB_DEVICE \ @@ -173,7 +179,8 @@ GRUB_DEVICE_BOOT_UUID \ GRUB_FS \ GRUB_FONT \ - GRUB_PRELOAD_MODULES + GRUB_PRELOAD_MODULES \ + GRUB_ACTUAL_DEFAULT # These are optional, user-defined variables. export GRUB_DEFAULT \ === modified file 'util/grub.d/10_linux.in' --- util/grub.d/10_linux.in 2012-03-03 12:12:41 +0000 +++ util/grub.d/10_linux.in 2012-03-03 14:38:30 +0000 @@ -70,18 +70,39 @@ { os="$1" version="$2" - recovery="$3" + type="$3" args="$4" - if ${recovery} ; then - title="$(gettext_quoted "%s, with Linux %s (recovery mode)")" - else - title="$(gettext_quoted "%s, with Linux %s")" - fi + if [ -z "$boot_device_id" ]; then boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" fi - printf "menuentry '${title}' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$recovery-$boot_device_id' {\n" "${os}" "${version}" - if ! ${recovery} ; then + if [ x$type != xsimple ] ; then + case $type in + recovery) + title="$(gettext_quoted "%s, with Linux %s (recovery mode)")" ;; + *) + title="$(gettext_quoted "%s, with Linux %s")" ;; + esac + full_title="$(printf '${title}' "${os}" "${version}")" + if [ x"$full_title" = x"$GRUB_ACTUAL_DEFAULT" ] ; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | sed "s/'/'\\\\\\\\''/g")" + suffix="${suffix}if [ \"x\$default\" = '$quoted' ]; then +default='gnulinux-$version-$type-$boot_device_id' +fi +" + fi + if [ x"Previous Linux versions>$full_title" = x"$GRUB_ACTUAL_DEFAULT" ] ; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | sed "s/'/'\\\\\\\\''/g")" + suffix="${suffix}if [ \"x\$default\" = '$quoted' ]; then +default='gnulinux-$version-$type-$boot_device_id' +fi +" + fi + echo "menuentry '${full_title}' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" + else + echo "menuentry '${os}' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" + fi + if [ x$type != xrecovery ] ; then save_default_entry | sed -e "s/^/\t/" fi @@ -155,7 +176,13 @@ prepare_boot_cache= prepare_root_cache= boot_device_id= - +suffix= + +# 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 @@ -200,12 +227,37 @@ linux_root_device_thisversion=${GRUB_DEVICE} fi - linux_entry "${OS}" "${version}" false \ - "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + if [ "x$is_first_entry" = xtrue ]; then + linux_entry "${OS}" "${version}" simple \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + + submenu_indentation="\t" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + cat << EOF +submenu '$(gettext_quoted "Advanced options for ${OS}")' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' { +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 at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_first_entry" != xtrue ]; then + echo '}' +fi + +echo -n "$suffix" \ No newline at end of file --------------030809000409040905000608--