Problem with mapping a key to multiple characters (Unicode + diacritic symbol)

Ken Moffat zarniwhoop at ntlworld.com
Mon Mar 11 20:29:21 UTC 2019


On Mon, Mar 11, 2019 at 07:11:33PM +0100, Pierre-Luc Angles wrote:
> Dear list-members,
> 
> I allow me to write to you because I am now creating / mapping two different
> keyboard layouts, one for the transliteration of Ancient Egyptian and the
> other for a special Greek polytonic keyboard used by people reading ancient
> Greek documents. I have problems with these two new keyboards.
> 
> First, I would like to solve my problem with the transliteration of Ancient
> Egyptian.
> 
> I read in the archive of this list this thread (cf.
> https://lists.freedesktop.org/archives/xorg/2009-January/042282.html) and
> that is why I have created a file ~/.XCompose, with contents
> 

Things have changed a lot in the last 10 years, nowadays UTF-8 is
the predominant.

> <i_breve_below> : "i̯"
> <u_breve_below> : "u̯"

I'm assuming that you want to produce a combined letter with the
breve underneath it.  But that link was for a Breton mapping with
multiple glyphs on a single key.  If you really want something like
that, then I suppose that the easiest way is to map the breve_below
to one sequence, and follow it with the letter, so a compose
sequence followed by the regular letter (i, u, etc).

[...]
> 
> When I modify for example my keyboard layout like this
> :
> 
> key <AE01>	{ [        ampersand,                1,        i_breve_below, 			
> U032F ] };
> 
> the i_breve_below does not work and function, I think, as if it would be
> “NoSymbol” instead of this.
> 

I don't think I have a mapping for i with breve below, and I haven't
looked at my own XCompose and keymaps for a long time, but I see two
differences between what I think you are trying to do, and what works
(for some other glyphs) for me :

1.  My XCompose is in a very different format to yours : On the left
side, the keys you want to use (typically starting with Multi_key,
i.e. the Compose key).  Then, after the ':' I put the desired glyph
itself in the double quotes and follow it with the unicode value in
UNNN+ format.

For the glyph I can either paste from e.g. gucharmap or, when I know
the unicode value, input the hex digits in icewm (possibly called
iso-14755, or something like that - hold Ctrl+Shift, key the digits.

So for your i with breve below, on the right side I would put
 : "ḭ" U1E2D

I'm sure the hex digits do not need to be in capitals, but the U
probably does.

To get the Compose key <Multi_key> I have to specify it in my
keyboard conf file in xorg.conf.d/ :

Option "XkbOptions"
"ctrl_alt_bksp,grp:lctrl_lwin_rctrl_menu,compose:caps"

(Should all be one line - that gives me two groups, for latin
alphabet and cyrillic alphabet - you only need the compose part).

Also, my methods probably do not work in gnome, and maybe not in
kde.

2. For the keyboard definition itself: except for known key values,
I use the unicode value for additions.

My own maps are to provide accents and similar on dead keys (the
standard British map includes e.g Dead Acute on AltGr + ';' so á,
(as well as things like ß on AltGr + 's', þ on AltGr + 'p' etc) and
I've added a few more for dealing with European languages.  In
particular, I map AltGr + 'g' to dead_greek (I'm only looking to be
able to key monotonic greek).

And then, since I wanted to be able to key cyrillic letters (or most
of them), I created a cyrillic map based on phonetic russian but
adapted towards the gb keyboard.  Again, compose sequences get used.

A few excerpts, to help illustrate:

key maps

 my latin map

    // key AE02 '2' add low double-quotes
    key <AE02>  { [         2,   quotedbl,      twosuperior,             U201e ] };

    // <AC05> : replace eng, ENG with dead_greek, use Compose ng for eng
    key <AC05>  { [         g,          G,       dead_greek,        dead_greek ] };

 my cyrillic map

    // add 'a ie ligature' to 'A'
    key <AC01> { [        Cyrillic_a,        Cyrillic_A,        U04D5,        U04D4  ] };

So, AE02 has ² and „ (low double-quotes) on AltGr + '2' and AltGr +
Shift + '2'.  AC05 replaces '<eng>' (ŋ) and '<ENG>' with dead_greek.

In my cyrillic map, AC01 gets the cyrillic equivalent of æ Æ on AltGr
(matches what my latin map has).

For Compose sequences, I offer the following as examples:

<Multi_key> <D> <Z>                                             : "DZ"   U1F1    # DZ ligature
<Multi_key> <D> <z>                                             : "Dz"   U1F2    # Dz ligature
<Multi_key> <d> <z>                                             : "dz"   U1F3    # dz ligature

<Multi_key> <s> <h>                                             : "ʃ"   U283    # small esh
<Multi_key> <Z> <H>                                             : "Ʒ"   U1B7    # EZH
<Multi_key> <z> <h>                                             : "ʒ"   U292    # ezh

> For information, I am using Linux Manjaro 4.19 XFCE and scim is not enabled
> and not downloaded on my laptop.
> 

XFCE without scim should be fine.  The machine where I'm typing this
is using xfce, and I've typed the following:

 on the 2 key with AltGr :  ²„

 cyrillic map, additions after the space : асд ӕӔ
 latin map : asdæÆ DZDzdz ʃ Ʒʒ

> I would be very nice if you could me help somehow to solve this problem.
> 
> I thank you in advance a lot.
> 
> Best regards,
> 
> Pierre-Luc

Thanks for asking, you reminded my that I never copied over my
~/.XCompose to my newest machines :)  From that, you can tell that I
currently don't have much need to type some of the more exotic
combinations I've created.

Hope this helped.  But if I've totally misunderstood and you really
do need a _single_ sequence similar to "^h" but the caron replaced
by a low breve, then sorry for wasting your time.

ĸen
-- 
  It is said that there are two great unsolved problems in computer
  science: naming, cache invalidation, and off-by-one errors.
                         -- Ben Bullock


More information about the xorg mailing list