diff --git a/ChangeLog b/ChangeLog index a972b9959..aabb82f0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,12 @@ * docs/grub.texi (Networking commands): Add documentation for network related commands. +2013-09-18 Pawel Wojtalczyk +2013-09-18 Vladimir Serbinenko + + * grub-core/term/efi/console.c (grub_console_getkey): Accept VT100-style + codes. + 2013-09-18 Colin Watson * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name_iter): diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c index 9f76d23c0..fad23d2d4 100644 --- a/grub-core/term/efi/console.c +++ b/grub-core/term/efi/console.c @@ -125,7 +125,17 @@ grub_console_getkey (struct grub_term_input *term __attribute__ ((unused))) return GRUB_TERM_NO_KEY; if (key.scan_code == 0) - return key.unicode_char; + { + /* Some firmware implementations use VT100-style codes against the spec. + This is especially likely if driven by serial. + */ + if (key.unicode_char < 0x20 && key.unicode_char != 0 + && key.unicode_char != '\t' && key.unicode_char != '\b' + && key.unicode_char != '\n' && key.unicode_char != '\r') + return GRUB_TERM_CTRL | (key.unicode_char - 1 + 'a'); + else + return key.unicode_char; + } else if (key.scan_code < ARRAY_SIZE (efi_codes)) return efi_codes[key.scan_code];