[SeaBIOS] [PATCH v3 0/2] boot: switch default menu key to ESC

Paolo Bonzini pbonzini at redhat.com
Thu Mar 12 15:46:22 CET 2015


Patch 1 applies a small improvement to user experience, as suggested
by Matt DeVillier.  Then patch 2 makes the switch.

Paolo Bonzini (2):
  boot: delay exiting boot if menu key is ESC
  boot: switch default menu key to ESC

 src/boot.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

-- 
2.3.0

>From e1d58cf75b466a4d84246b974cac63392a3ca1f4 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <pbonzini at redhat.com>
Date: Thu, 12 Mar 2015 15:30:12 +0100
Subject: [PATCH v3 1/2] boot.c: delay exiting boot if menu key is ESC

If the menu key is ESC, do not restart boot unless
1.5 seconds have passed.  Otherwise users (trained by years of
repeatedly hitting keys to enter the BIOS) will end up hitting ESC
multiple times and immediately booting the primary boot device.

Suggested-by: Matt DeVillier <matt.devillier at gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
---
 src/boot.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/boot.c b/src/boot.c
index f23e9e1..3aab8d4 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -486,9 +486,15 @@ interactive_bootmenu(void)
                , strtcpy(desc, pos->description, ARRAY_SIZE(desc)));
     }
 
-    // Get key press
+    // Get key press.  If the menu key is ESC, do not restart boot unless
+    // 1.5 seconds have passed.  Otherwise users (trained by years of
+    // repeatedly hitting keys to enter the BIOS) will end up hitting ESC
+    // multiple times and immediately booting the primary boot device.
+    int esc_accepted_time = irqtimer_calc(menukey == 1 ? 1500 : 0);
     for (;;) {
         scan_code = get_keystroke(1000);
+        if (scan_code == 1 && !irqtimer_check(esc_accepted_time))
+            continue;
         if (scan_code >= 1 && scan_code <= maxmenu+1)
             break;
     }
-- 
2.3.0


>From ece1e87f2eb89cc0d352d1e02454cb2bcb8da62e Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <pbonzini at redhat.com>
Date: Thu, 12 Mar 2015 15:31:17 +0100
Subject: [PATCH v3 2/2] boot: switch default menu key to ESC

On some platforms, F12 may be hard to access; for example, on OS X
machines F9-F12 have been intercepted by the OS for a long time, and
on newer OS X releases function keys are basically gone for good.

Which keys are and are not available depends on the client, not on
the server, but only function keys are usually trapped by terminals.
Hence, using ESC for the boot menu avoids the problems associated
with F12.

Suggested-by: Kevin O'Connor <kevin at koconnor.net>
Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
---
 src/boot.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/boot.c b/src/boot.c
index 3aab8d4..d6b1fb7 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -459,8 +459,8 @@ interactive_bootmenu(void)
         ;
 
     char *bootmsg = romfile_loadfile("etc/boot-menu-message", NULL);
-    int menukey = romfile_loadint("etc/boot-menu-key", 0x86);
-    printf("%s", bootmsg ?: "\nPress F12 for boot menu.\n\n");
+    int menukey = romfile_loadint("etc/boot-menu-key", 1);
+    printf("%s", bootmsg ?: "\nPress ESC for boot menu.\n\n");
     free(bootmsg);
 
     u32 menutime = romfile_loadint("etc/boot-menu-wait", DEFAULT_BOOTMENU_WAIT);
-- 
2.3.0




More information about the SeaBIOS mailing list