Index: term/ieee1275/ofconsole.c =================================================================== --- term/ieee1275/ofconsole.c (revision 1917) +++ term/ieee1275/ofconsole.c (working copy) @@ -150,41 +150,60 @@ grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual > 0 && c == '\e') - { - grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual <= 0) - { + if (actual > 0) + switch(c){ + case 0x7f: + /* Backspace: Ctrl-h. */ + c=8; + break; + case '\e': + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); + if (actual <= 0) + { *key = '\e'; return 1; } + + if (c != 91 ) + return 0; + + grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); + + if (actual <= 0) + return 0; - if (c != 91) - return 0; - - grub_ieee1275_read (stdin_ihandle, &c, 1, &actual); - if (actual <= 0) - return 0; - - switch (c) + switch (c) { - case 65: - /* Up: Ctrl-p. */ - c = 16; - break; - case 66: - /* Down: Ctrl-n. */ - c = 14; - break; - case 67: - /* Right: Ctrl-f. */ - c = 6; - break; - case 68: - /* Left: Ctrl-b. */ - c = 2; - break; + case 72: + /* Home: Ctrl-a. */ + c = 1; + break; + case 70: + /* End: Ctrl-e. */ + c = 5; + break; + case 51: + /* Delete: Ctrl-d. */ + c = 4; + break; + case 65: + /* Up: Ctrl-p. */ + c = 16; + break; + case 66: + /* Down: Ctrl-n. */ + c = 14; + break; + case 67: + /* Right: Ctrl-f. */ + c = 6; + break; + case 68: + /* Left: Ctrl-b. */ + c = 2; + break; } + break; } *key = c;