Thanks for the patch. I've applied it with just a few minor
layout changes. The ChangeLog entries should begin with a
tab and the comments where all plain C comments elsewhere, so
I changed your comments to plain C comments as well.
Corinna
On Mon, Mar 05, 2001 at 06:18:35PM -0800, Jason Tiller wrote:
> Hi, Again, Corinna! :)
>
> On Mon, 5 Mar 2001, Corinna Vinschen wrote:
>
> > Could you please resubmit a patch which doesn't introduce another
> > CYGWIN option but instead uses automatic recognition of the current
> > keyboard setting? For example the expression
>
> > if (PRIMARYLANGID (LOWORD (GetKeyboardLayout (0)) == LANG_ENGLISH)
> >
> > should work.
>
> It does indeed. I've provided the patch and changelog info at the
> bottom of this message. I did rudimentary testing to show that AltGr
> is interpreted as META on a US English keyboard; I then set my default
> keyboard to German (Standard) and verified that the
> GetKeyboardLayout() call worked appropriately and that AltGr was *not*
> interpreted as META. So far, so good!
>
> I hope that others with access to international keyboards will find
> that this patch does not interfere with their needs. Thanks again for
> the help.
>
> ---Jason Tiller
> [EMAIL PROTECTED]
> Sonos
>
> Here are the diffs (fhandler.h, fhandler_console.cc and autoload.cc):
>
> --- fhandler.h-orig Mon Jan 29 18:36:10 2001
> +++ fhandler.h Mon Mar 5 15:42:24 2001
> @@ -615,6 +615,10 @@ private:
> int input_tcsetattr (int a, const struct termios *t);
> void set_cursor_maybe ();
>
> + // Used to determine if an input keystroke should be modified with
> + // META.
> + int meta_mask;
> +
> public:
>
> fhandler_console (const char *name);
>
>
> --- fhandler_console.cc-orig Mon Jan 29 18:36:12 2001
> +++ fhandler_console.cc Mon Mar 5 17:47:30 2001
> @@ -220,10 +220,11 @@ fhandler_console::read (void *pv, size_t
> 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
> - {
> + { // Yup.
> tmp[0] = '\033';
> tmp[1] = cyg_tolower (tmp[1]);
> toadd = tmp;
> @@ -720,6 +721,20 @@ fhandler_console::fhandler_console (cons
> {
> set_cb (sizeof *this);
> state_ = normal;
> +
> + // 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 ();
> }
>
>
>
> --- autoload.cc-orig Mon Mar 5 16:59:44 2001
> +++ autoload.cc Mon Mar 5 17:01:00 2001
> @@ -255,6 +255,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)
>
>
> Here are the ChangeLog entries:
>
> * 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.
>
>
> That's it. Once again, thanks for considering this patch.
>
> ---Jason Tiller
> [EMAIL PROTECTED]
> Sonos
>
>
> --
> Want to unsubscribe from this list?
> Check out: http://cygwin.com/ml/#unsubscribe-simple
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Developer mailto:[EMAIL PROTECTED]
Red Hat, Inc.
--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple