X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/05a1b863a66bf72b26e5d87570c4e0e61b9736cd..fe0dda690426b8e1b73c79b0dff46e1459ea40ec:/GRUB2/grub-2.04/grub-core/normal/menu.c diff --git a/GRUB2/grub-2.04/grub-core/normal/menu.c b/GRUB2/grub-2.04/grub-core/normal/menu.c index a523181..d39e19a 100644 --- a/GRUB2/grub-2.04/grub-core/normal/menu.c +++ b/GRUB2/grub-2.04/grub-core/normal/menu.c @@ -32,6 +32,13 @@ #include #include #include +#include + +int g_ventoy_menu_refresh = 0; +int g_ventoy_memdisk_mode = 0; +int g_ventoy_iso_raw = 0; +int g_ventoy_iso_uefi_drv = 0; +int g_ventoy_last_entry = 0; /* Time to delay after displaying an error message about a default/fallback entry failing to boot. */ @@ -576,16 +583,20 @@ print_countdown (struct grub_term_coordinate *pos, int n) static int run_menu (grub_menu_t menu, int nested, int *auto_boot) { + const char *cmdstr; grub_uint64_t saved_time; - int default_entry, current_entry; + int default_entry,current_entry; int timeout; enum timeout_style timeout_style; default_entry = get_entry_number (menu, "default"); - + + if (g_ventoy_last_entry >= 0 && g_ventoy_last_entry < menu->size) { + default_entry = g_ventoy_last_entry; + } /* If DEFAULT_ENTRY is not within the menu entries, fall back to the first entry. */ - if (default_entry < 0 || default_entry >= menu->size) + else if (default_entry < 0 || default_entry >= menu->size) default_entry = 0; timeout = grub_menu_get_timeout (); @@ -786,6 +797,78 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot) } goto refresh; + case GRUB_TERM_KEY_F2: + cmdstr = grub_env_get("VTOY_F2_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F3: + cmdstr = grub_env_get("VTOY_F3_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F4: + cmdstr = grub_env_get("VTOY_F4_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F5: + cmdstr = grub_env_get("VTOY_F5_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F6: + cmdstr = grub_env_get("VTOY_F6_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F7: + cmdstr = grub_env_get("VTOY_F7_CMD"); + if (cmdstr) + { + menu_fini (); + grub_script_execute_sourcecode(cmdstr); + goto refresh; + } + break; + case GRUB_TERM_KEY_F1: + menu_fini (); + g_ventoy_memdisk_mode = 1 - g_ventoy_memdisk_mode; + g_ventoy_menu_refresh = 1; + goto refresh; + + case (GRUB_TERM_CTRL | 'i'): + menu_fini (); + g_ventoy_iso_raw = 1 - g_ventoy_iso_raw; + g_ventoy_menu_refresh = 1; + goto refresh; + + case (GRUB_TERM_CTRL | 'u'): + menu_fini (); + g_ventoy_iso_uefi_drv = 1 - g_ventoy_iso_uefi_drv; + g_ventoy_menu_refresh = 1; + goto refresh; + default: { int entry; @@ -866,6 +949,8 @@ show_menu (grub_menu_t menu, int nested, int autobooted) if (boot_entry < 0) break; + g_ventoy_last_entry = boot_entry; + e = grub_menu_get_entry (menu, boot_entry); if (! e) continue; /* Menu is empty. */