ALT Linux Bugzilla
– Attachment 18750 Details for
Bug 54130
По возможности отображать в grub-entries выбор по умолчанию и выбор на следующую загрузку
New bug
|
Search
|
[?]
|
Help
Register
|
Log In
[x]
|
Forgot Password
Login:
[x]
|
EN
|
RU
[patch]
Патч grub-entries
0001-grub-entries-Implement-default-next-boot-markers-wit.patch (text/plain), 5.19 KB, created by
Vasiliy Kovalev
on 2025-06-05 13:24:34 MSK
(
hide
)
Description:
Патч grub-entries
Filename:
MIME Type:
Creator:
Vasiliy Kovalev
Created:
2025-06-05 13:24:34 MSK
Size:
5.19 KB
patch
obsolete
>From 4cb469229385cb2bbc81646366de67f41d5f659b Mon Sep 17 00:00:00 2001 >From: Vasiliy Kovalev <kovalev@altlinux.org> >Date: Wed, 4 Jun 2025 13:25:37 +0300 >Subject: [PATCH] grub-entries: Implement default/next boot markers with > ID/title matching > >Enhances grub-entries to display visual indicators for: >- Default boot entry (set via grub-set-default) >- Next boot entry (set via grub-reboot) > >Key improvements: >1. Added grubenv parsing for saved_entry and next_entry values >2. Implemented dual matching mechanism for both: > - GRUB menu IDs (e.g., 'gnulinux-advanced-...>gnulinux-...') > - Human-readable titles (e.g., 'ALT Workstation K 11.0') >3. Introduced ID extraction function >4. Added ID path tracking for nested submenu entries >5. Implemented marker display logic: > - '*' for default boot entry > - 'N' for next boot entry > - Combined '*N' when both apply to same entry > >Example outputs: >0 * ALT Workstation K 11.0 >1>0 Advanced options...>vmlinuz >1>3 *N Advanced options...>6.15.0-alt1 >3 N Memtest86+-7.20 > >Closes: https://bugzilla.altlinux.org/54130 >Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org> >--- > altlinux/grub-entries | 117 +++++++++++++++++++++++++++++++++++------- > 1 file changed, 98 insertions(+), 19 deletions(-) > >diff --git a/altlinux/grub-entries b/altlinux/grub-entries >index 30103150d..a3142f669 100755 >--- a/altlinux/grub-entries >+++ b/altlinux/grub-entries >@@ -67,47 +67,126 @@ parse_args() { > [ $# -eq 0 ] || show_usage "Unrecognized arguments: '$*'" > } > >+get_menu_id() { >+ echo "$1" | sed -ne " >+ s/.*menuentry_id_option\s\+'\([^']*\)'.*/\1/p; >+ t; >+ s/.*menuentry_id_option\s\+\"\([^\"]*\)\".*/\1/p; >+ " >+} >+ > show_menu() { > local mode= title= number= prefix= entry=0 itemno=0 >+ local grubenv_file= saved_entry= next_entry= mark= >+ local id_prefix= full_id= full_title= id= line= >+ >+ # Get current GRUB settings >+ grubenv_file="${grubmenu%/*}/grubenv" >+ if [ -f "$grubenv_file" ]; then >+ saved_entry=$(grub-editenv "$grubenv_file" list | grep '^saved_entry=' | cut -d= -f2-) >+ next_entry=$(grub-editenv "$grubenv_file" list | grep '^next_entry=' | cut -d= -f2-) >+ fi >+ >+ # Process GRUB menu >+ sed -n -re '/^\s*(menuentry\s+|submenu\s+|})/p' "$grubmenu" | >+ while IFS= read -r line; do >+ # Determine entry type >+ if echo "$line" | grep -q '^\s*menuentry'; then >+ mode="M" >+ title=$(echo "$line" | sed -re " >+ s/^\s*menuentry\s+'(([^']|\\\\')+)'.*/\1/; >+ t; >+ s/^\s*menuentry\s+\"(([^\"]|\\\\\")+)\".*/\1/; >+ ") >+ id=$(get_menu_id "$line") >+ full_title="${prefix}${title}" >+ elif echo "$line" | grep -q '^\s*submenu'; then >+ mode="S" >+ title=$(echo "$line" | sed -re " >+ s/^\s*submenu\s+'(([^']|\\\\')+)'.*/\1/; >+ t; >+ s/^\s*submenu\s+\"(([^\"]|\\\\\")+)\".*/\1/; >+ ") >+ id=$(get_menu_id "$line") >+ full_title="${prefix}${title}" >+ elif echo "$line" | grep -q '^\s*}'; then >+ mode="E" >+ else >+ mode="" >+ fi > >- cat "$grubmenu" | sed \ >- -re '/^\s*(menuentry\s+|submenu\s+|})/!d' \ >- -re "s/^\s*menuentry\s+'([^']+)'.*\$/M\t\1/g" \ >- -re 's/^\s*menuentry\s+"([^"]+)".*$/M\t\1/g' \ >- -re "s/^\s*submenu\s+'([^']+)'.*\$/S\t\1/g" \ >- -re 's/^\s*submenu\s+"([^"]+)".*$/S\t\1/g' \ >- -re "s/^\s*}\s*\$/E\t-/g" | >- while read mode title; do > case "$mode" in >- M) if [ $numbers_only -ne 0 ]; then >- echo -e "${number}${itemno}" >+ M) # Menu entry >+ # Build full ID path >+ if [ -n "$id_prefix" ]; then >+ full_id="${id_prefix}>${id}" >+ else >+ full_id="$id" >+ fi >+ >+ # Set markers based on both ID and title >+ mark="" >+ if [ -n "$saved_entry" ]; then >+ if [ "$full_id" = "$saved_entry" ] || [ "$full_title" = "$saved_entry" ]; then >+ mark="*" >+ fi >+ fi >+ if [ -n "$next_entry" ]; then >+ if [ "$full_id" = "$next_entry" ] || [ "$full_title" = "$next_entry" ]; then >+ mark="${mark}N" >+ fi >+ fi >+ mark=$(printf '%-3s' "$mark") >+ >+ # Format output with proper alignment >+ if [ $numbers_only -ne 0 ]; then >+ echo "${number}${itemno}" > elif [ $titles_only -ne 0 ]; then >- echo -e "${prefix}${title}" >+ echo "${full_title}" > else >- echo -e "${number}${itemno}\t${prefix}${title}" >+ printf "%-6s%-4s%s\n" "${number}${itemno}" "${mark}" "${full_title}" > fi >- itemno=$(($itemno + 1)) >+ >+ itemno=$((itemno + 1)) > entry=1 > ;; >- S) number="${number}${itemno}>" >+ >+ S) # Submenu entry >+ # Update ID prefix >+ if [ -n "$id_prefix" ]; then >+ id_prefix="${id_prefix}>${id}" >+ else >+ id_prefix="$id" >+ fi >+ >+ # Update numbering >+ number="${number}${itemno}>" > prefix="${prefix}${title}>" > itemno=0 > ;; >- *) if [ $entry -ne 0 ]; then >+ >+ E) # End of menu >+ if [ $entry -ne 0 ]; then > entry=0 > elif [ -n "$number" ]; then >+ # Handle menu closure > number="${number%>}" > prefix="${prefix%>}" >+ id_prefix="${id_prefix%>*}" >+ > case "$number" in >- *">"*) itemno="${number##*>}" >+ *">"*) # Submenu closed >+ itemno="${number##*>}" > number="${number%>*}>" > prefix="${prefix%>*}>" >- itemno=$(($itemno + 1)) >+ itemno=$((itemno + 1)) > ;; >- *) itemno=$number >- itemno=$(($itemno + 1)) >+ *) # Top-level closed >+ itemno=$number >+ itemno=$((itemno + 1)) > prefix= > number= >+ id_prefix= > ;; > esac > fi >-- >2.42.2 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 54130
:
18750
|
18809