Subject: Re: bug#23251: 25.0.92; M-< and M-> don't work with Croatian keyboard

From: Ilya Zakharevich <[email-masked]>
Date: Wed, 13 Apr 2016 22:37:13 -0700

On Sun, Apr 10, 2016 at 12:46:05PM -0700, Ilya Zakharevich wrote:
> keyboards define the ISO key identically:
>    Base	  → <
>    Shift  → >
>    Ctrl	  → FS=^\
> 
> There is no special binding for any other key (including any Alt).
> Both keyboards look as having the bit KLLF_ALTGR (sp?) defined (but
> probably MSKLC would lie about this!). 

      Explanation for enquiring minds:
      ================================

OK, the reason for a peculiar behaviour of these keys is that they are
SECONDARY keypresses which produce the same character.  So:
  • The “more bullet-proofish” branch in my patch cannot handle such
    keyspresses, and
  • the fallback (“to assume that every modifier keys DID contribute¹⁾
    to the generation of the character”) turned out to be too
    simple-minded (for this unexpectedly frequent situation).

      ¹⁾ On Windows, for typical layouts, Alt (NOT AltGr!) and Win
         modifiers would not affect the generated character.

This behaviour of layouts is a little bit more widespread than what I
expected.  So far I found following pairs:

	    Primary 	  	    Secondary	      Generate
  Czech:    AltGr-Q, AltGr-W	    ISO, Shift-ISO     \, |
  Croat:    AltGr-Q, AltGr-W	    US-\, US-|         \, |
  Croat:    AltGr-., AltGr-, 	    ISO, Shift-ISO     <, >
  Slovak:   AltGr-z  		    AltGr-,	       >
  Slovak:   AltGr-.  		    AltGr-ISO	       <
  C-Y:	    US-/, US-|		    ISO, Shift-ISO     \, |

(The last row is for Czech-QUERTY, but also for most US-compatible
keyboards.)  Here US-foo means “the keypress producing ‘foo’ on US
keyboard”.

Also, on Czech-QUERTY, the following characters allow AltGr access
(“A-” below) at the “US layout locations”; together with
Czech-layout-specific keypresses, this creates duplication as (AFAIK):

  Primary:	US-!    US-`    A-US-_  A-US-:  US-<     US--     A-US--
  Secondary:    A-US-+  A-US-;  US-?    US->    A-US-?   A-US-=   US-/
  Produce:      +       ;       _       :       ?        =        -

This creates a significant mess if one wants to allow using the
secondary locations with Alt modifier (for example, to generate Meta-;
by Alt-AltGr-;).  It does not look like a small workaround is possible
(which does not break OTHER usage scenarios).

Ilya

P.S.  I know a medium-sized workaround which would improve OTHER cases
      as well.  But it cannot be ready in a day or two!]