From 5456b1d30ffd750e5dc46ddee253d1db2247d7d7 Mon Sep 17 00:00:00 2001 From: cgf Date: Sat, 26 Dec 2009 02:38:46 +0000 Subject: [PATCH] * fhandler_console.cc (handler_console::read): Use the tty's VERASE character as the backspace keycode. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler_console.cc | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 8a2111bedc..f0bf2a8ea5 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2009-12-25 Andy Koppe + + * fhandler_console.cc (handler_console::read): Use the tty's VERASE + character as the backspace keycode. + 2009-12-24 Corinna Vinschen * path.cc (symlink_info::check): Set fileattr to diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index f5814e80f1..6cfbcf638e 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -375,13 +375,20 @@ fhandler_console::read (void *pv, size_t& buflen) if (control_key_state & LEFT_ALT_PRESSED) dev_state->nModifiers |= 8; - /* Adopt the linux standard of translating the backspace key to DEL - except when ALT is pressed. */ + /* Send the VERASE character from the terminal settings as backspace keycode. */ if (input_rec.Event.KeyEvent.wVirtualScanCode == 14) { - toadd = (control_key_state & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) - ? (dev_state->metabit ? "\377" : "\033\177") : "\177"; - nread = strlen (toadd); + char c = ti.c_cc[VERASE]; + nread = 0; + if (control_key_state & ALT_PRESSED) { + if (dev_state->metabit) + c |= 0x80; + else + tmp[nread++] = '\e'; + } + tmp[nread++] = c; + tmp[nread] = 0; + toadd = tmp; } /* Allow Ctrl-Space to emit ^@ */ else if (input_rec.Event.KeyEvent.wVirtualKeyCode == VK_SPACE -- 2.11.0