#include <grub/script_sh.h>
#include <grub/gfxterm.h>
#include <grub/dl.h>
+#include <grub/env.h>
+
+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. */
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 ();
}
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;
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. */