]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - GRUB2/grub-2.04/grub-core/normal/menu.c
1. add Italian languare, translated by AverageUser2
[Ventoy.git] / GRUB2 / grub-2.04 / grub-core / normal / menu.c
index a52318188c29c87329fb055f06e2ec0a2dc0fecc..d39e19ac00f1d311cb4021bc692b31c70f5a4578 100644 (file)
 #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.  */
@@ -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.  */