From 7cdc9feea1d8fcd016a842155c30308e4a0cae3d Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 6 Mar 2001 12:05:45 +0000 Subject: * autoload.c (cygwin_premain0): Add missing parameter. * binmode.c (cygwin_premain0): Ditto. * textmode.c (cygwin_premain0): Ditto. Patch contributed by Jason Tiller : * auto_load.cc: Add "GetKeyboardLayout" entry in the list of Win32 User32.DLL exports to provide. * fhandler.h (class fhandler_console): Add meta_mask private member to remember which keystroke modifiers should generate META. * fhandler_console.cc (fhandler_console::read): Modify code that tests a keystroke for a META-escaped key to use the 'meta_mask' variable. (fhandler_console::fhandler_console): Add definition for variable "meta_mask" used to determine if a keystroke should be preceded by META in the client console stream. Set meta_mask based on whether or not user's keyboard language is English - non-English keyboards pass AltGr (right ) unmolested, whereas English keyboards now interpret left- and right- as META. --- winsup/cygwin/fhandler_console.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'winsup/cygwin/fhandler_console.cc') diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 6e8c76c1c..ca73ab651 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -250,7 +250,8 @@ fhandler_console::read (void *pv, size_t buflen) converting a CTRL-U. */ if ((unsigned char)ich > 0x7f && current_codepage == ansi_cp) OemToCharBuff (tmp + 1, tmp + 1, 1); - if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED)) + /* Determine if the keystroke is modified by META. */ + if (!(input_rec.Event.KeyEvent.dwControlKeyState & meta_mask)) toadd = tmp + 1; else { @@ -790,6 +791,19 @@ fhandler_console::fhandler_console (const char *name) : dwLastButtonState = 0; nModifiers = 0; use_mouse = raw_win32_keyboard_mode = FALSE; + /* Set the mask that determines if an input keystroke is modified by + META. We set this based on the keyboard layout language loaded + for the current thread. The left key always generates + META, but the right key only generates META if we are using + an English keyboard because many "international" keyboards + replace common shell symbols ('[', '{', etc.) with accented + language-specific characters (umlaut, accent grave, etc.). On + these keyboards right (called AltGr) is used to produce the + shell symbols and should not be interpreted as META. */ + meta_mask = LEFT_ALT_PRESSED; + if (PRIMARYLANGID (LOWORD (GetKeyboardLayout (0))) == LANG_ENGLISH) + meta_mask |= RIGHT_ALT_PRESSED; + set_need_fork_fixup (); } -- cgit v1.2.3