Dear Ilya,

Thanks a lot for your interesting advices.

Le 12/03/2019 à 15:16, Ilya Anfimov a écrit :
You are probably right. Keysyms does not get added automatically
by naming it, and I don't see any mention of i_breve_below and so
on  in  standard keysymdef.h , which is the source of the default
set of keysyms.

i_breve_below etc. are indeed names that I have created and as you rightly wrote, I should add them to /usr/include/X11/keysymdef.h


  You can always check it by running xev and pressing that key  in
it's window. It should display NoSymbol, AFAIK.

By running xev and pressing this key (plus the modifier AltGr), I obtain this message:

"KeyRelease event, serial 37, synthetic NO, window 0x4600001,
    root 0x168, subw 0x0, time 338633818, (163,294), root:(714,562),
    state 0x4090, keycode 10 (keysym 0xb9, onesuperior), same_screen YES,
    XKeysymToKeycode returns keycode: 49
    XLookupString gives 2 bytes: (c2 b9) "¹"
    XFilterEvent returns: False"

It could be explained because the beginning of my keybord layout is the following:

"partial alphanumeric_keys
xkb_symbols "oss" {

    include "latin"
    include "level3(ralt_switch)"
    include "nbsp(level4n)"
    include "keypad(oss)" "





  If you really want your keysym -- you can probably add one.  You
need to define a value for that keysym, probably in  the  vendor-
specific  range #x10000000..#x1FFFFFFF  (29th bit set). Also note
already used ones, you can get it from the  last  used  XKeysymDB
file:


https://gitlab.freedesktop.org/xorg/lib/libx11/blob/00175397480b76d32bf82b0c7c94c91a2a95954e/src/XKeysymDB

Also  note,  that  #x11000000 to #x1100FFFF are reserved for key-
pad, so don't use that either.


So I have chose the last available numbers #x1FFFFFF5 to #x1FFFFFFF, and would add to /usr/include/X11 these lines:

#ifdef XK_TRANSLITTERATION
#define XK_i_breve_below      0x1ffffff5  /* U+0DD3 SINHALA DIGA IS-PILLA */
#define XK_u_breve_below      0x1ffffff6  /* U+0DD4 SINHALA PAA-PILLA */
#define XK_ı_ring_above 0x1ffffff7 /* U+0DD6 SINHALA DIGA PAA-PILLA */
#define XK_I_ring_above       0x1ffffff8  /* U+0DD8 SINHALA GAETTA-PILLA */
#define XK_č_dot_below        0x1ffffff9  /* U+0DD9 SINHALA KOMBUVA */
#define XK_Č_dot_below        0x1ffffffa  /* U+0DDA SINHALA DIGA KOMBUVA */
#define XK_s_macron_below     0x1ffffffb  /* U+0DDB SINHALA KOMBU DEKA */
#define XK_S_macron_below 0x1ffffffc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ #define XK_H_macron_below 0x1ffffffd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ #define XK_h_circumf_below 0x1ffffffe /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */
#define XK_H_circumf_below    0x1fffffff  /* U+0DDF SINHALA GAYANUKITTA */
#endif /* XK_TRANSLITTERATION */

What should I write instead of for example /* U+0DD3 SINHALA DIGA IS-PILLA */ since there are characters without one predefined Unicode symbol?


  Then you can write your new XKeysymDB in the same format as  ex-
ample  above  and put it the /usr/share/X11 on every machine that
needs to work with your keys.
  Well, the /usr/share/X11/XKeysymDB is the place that my  current
devuan  expects  it to be, and other distributions can place this
file in other places, like /usr/X11R6/lib/  or so. You can quickly
find an exact place by running

   strace xkbcomp "$DISPLAY"  - 2>&1 >/dev/null  |grep XKeysym

   (if you have strace, of course).

Typing "strace xkbcomp "$DISPLAY"  - 2>&1 >/dev/null  |grep XKeysym"
I obtain:
"openat(AT_FDCWD, "/usr/share/X11/XKeysymDB", O_RDONLY) = -1 ENOENT (Aucun fichier ou dossier de ce type)"

So I assume that I have to create a XKeysymDB file in /usr/share/X11/ that would be the following:

i_breve_below           :1FFFFFF5
u_breve_below           :1FFFFFF6
ı_ring_above            :1FFFFFF7
I_ring_above            :1FFFFFF8
č_dot_below             :1FFFFFF9
Č_dot_below             :1FFFFFFA
s_macron_below          :1FFFFFFB
S_macron_below          :1FFFFFFC
H_macron_below          :1FFFFFFD
h_circumf_below         :1FFFFFFE
H_circumf_below         :1FFFFFFF


  Then  reloading  your xkb should work, and .XCompose should work
also.

  Or you can type any keysym number in-place just by  typing  it's
code in hex with 0x prefix as in 0x10000501

  However,  it  can  be  simpler to borrow some unused or reserved
unicode position, as every unicode character in the  range  0x100
--  0x10FFFF have a default assigned keysym name "Uxxx", e.g. the
cyrillic capital letter A (0x410 unicode value) would  be  keysym
"U410"  and  first private use area symbol (0xE000 unicode value)
would be keysym "UE000".

Thanks a lot again for your patience and your help.

Best regards,

Pierre-Luc
_______________________________________________
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: https://lists.x.org/mailman/listinfo/xorg
Your subscription address: %(user_address)s

Reply via email to