OSDN Git Service

* autoload.c (cygwin_premain0): Add missing parameter.
authorcorinna <corinna>
Tue, 6 Mar 2001 12:05:45 +0000 (12:05 +0000)
committercorinna <corinna>
Tue, 6 Mar 2001 12:05:45 +0000 (12:05 +0000)
        * binmode.c (cygwin_premain0): Ditto.
        * textmode.c (cygwin_premain0): Ditto.

Patch contributed by Jason Tiller <jtiller@sjm.com> :
        * 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 <ALT>) unmolested,
        whereas English keyboards now interpret left- and right-<ALT>
        as META.

winsup/cygwin/ChangeLog
winsup/cygwin/autoload.cc
winsup/cygwin/automode.c
winsup/cygwin/binmode.c
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc
winsup/cygwin/textmode.c

index 72647b3..47901fc 100644 (file)
@@ -1,3 +1,27 @@
+Tue Mar  6 13:02:00 2001  Jason Tiller <jtiller@sjm.com>
+
+       * autoload.c (cygwin_premain0): Add missing parameter.
+       * binmode.c (cygwin_premain0): Ditto.
+       * textmode.c (cygwin_premain0): Ditto.
+
+Tue Mar  6 12:04:00 2001  Jason Tiller <jtiller@sjm.com>
+
+       * 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 <ALT>) unmolested,
+       whereas English keyboards now interpret left- and right-<ALT>
+       as META.
+
 Mon Mar  5 20:15:00 2001  Corinna Vinschen <corinna@vinschen.de>
 
        * include/a.out.h: Add copyright hint.
index bd035e3..a22d72d 100644 (file)
@@ -306,6 +306,7 @@ LoadDLLfunc (DefWindowProcA, 16, user32)
 LoadDLLfunc (DispatchMessageA, 4, user32)
 LoadDLLfunc (FindWindowA, 8, user32)
 LoadDLLfunc (GetClipboardData, 4, user32)
+LoadDLLfunc (GetKeyboardLayout, 4, user32)
 LoadDLLfunc (GetMessageA, 16, user32)
 LoadDLLfunc (GetProcessWindowStation, 0, user32)
 LoadDLLfunc (GetThreadDesktop, 4, user32)
index e02b0b9..f7cddfe 100644 (file)
@@ -14,7 +14,7 @@ details. */
 
 extern int _fmode;
 void
-cygwin_premain0 (int argc, char **argv)
+cygwin_premain0 (int argc, char **argv, struct per_process *myself)
 {
   static struct __cygwin_perfile pf[] =
   {
index 2eb02df..50efff4 100644 (file)
@@ -8,11 +8,13 @@ This software is a copyrighted work licensed under the terms of the
 Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 details. */
 
+#include <windows.h>
 #include <sys/fcntl.h>
+#include <sys/cygwin.h>
 
 extern int _fmode;
 void
-cygwin_premain0 (int argc, char **argv)
+cygwin_premain0 (int argc, char **argv, struct per_process *myself)
 {
   _fmode &= ~_O_TEXT;
   _fmode |= _O_BINARY;
index 3196f21..c4f931d 100644 (file)
@@ -608,6 +608,9 @@ private:
 
   WORD default_color, underline_color, dim_color;
 
+  /* Used to determine if an input keystroke should be modified with META. */
+  int meta_mask;
+
 /* Output state */
   int state_;
   int args_[MAXARGS];
index 6e8c76c..ca73ab6 100644 (file)
@@ -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 <ALT> key always generates
+     META, but the right <ALT> 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 <ALT> (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 ();
 }
 
index 92648ca..6d52d50 100644 (file)
@@ -8,11 +8,13 @@ This software is a copyrighted work licensed under the terms of the
 Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 details. */
 
+#include <windows.h>
 #include <sys/fcntl.h>
+#include <sys/cygwin.h>
 
 extern int _fmode;
 void
-cygwin_premain0 (int argc, char **argv)
+cygwin_premain0 (int argc, char **argv, struct per_process *myself)
 {
   _fmode &= ~_O_BINARY;
   _fmode |= _O_TEXT;