fabi1cazenave / qwerty-lafayette

QWERTY keyboard layout for French-speaking users
https://qwerty-lafayette.org/
106 stars 65 forks source link

~/.XCompose #14

Closed JulioJu closed 8 years ago

JulioJu commented 8 years ago

Grâce à #4, j'ai appris l'existence du XCompose.

J'ai trouvé cette page d'explication : http://bepo.fr/wiki/Installation_.XCompose, peut-être que ce serait bien de la référencer sur le Readme.md ?

Chez moi, les touches mortes semblent fonctionner parfaitement. Dois-je en déduire que chez moi mon XCompose est paramétré correctement par défaut ? Ou est-ce que ça signifie que je n'ai rien compris ?

fabi1cazenave commented 8 years ago

Question complexe, en fait. Ce ~/.XCompose n’est utilisé que pour le cas particulier des applications X11 dans MacOSX — je ne sais même pas s’il est toujours requis de nos jours.

Explication longue…

La particularité du Lafayette c’est que la touche morte AC10 est utilisée pour tous les caractères spéciaux du français. Ça ne pose aucun problème aux pilotes Windows ou MacOSX mais coté Linux, XKB ne permet pas de le faire directement (du moins, pas la version 7.6 que j’utilise ici avec Ubuntu 12.04).

La philosophie de XKB c’est que le ~/.XCompose doit être indépendant de la disposition de clavier utilisée : cela définit ce que font les combinaisons de touches du genre [accent mort] + [lettre], ou [compose] + [lettre] + [lettre]. Du coup on utilise un hack :

key <RALT> { [ VoidSymbol ], actions = [ SetGroup(group=2) ] };

… et ça fonctionne plutôt bien. Ça permet notamment d’avoir une disposition de clavier qui s’installe en userspace avec un simple xkbcomp -w9 lafayette.xkb $DISPLAY, sans requérir de modifier le fichier ~/.XCompose de l’utilisateur. Il y a quelques limitations :

fabi1cazenave commented 8 years ago

Noter aussi que la liste des touches mortes dead_* de XKB est définie en dur :

$ cat /usr/include/X11/keysymdef.h | grep dead

#define XK_dead_grave                    0xfe50
#define XK_dead_acute                    0xfe51
#define XK_dead_circumflex               0xfe52
#define XK_dead_tilde                    0xfe53
#define XK_dead_perispomeni              0xfe53  /* alias for dead_tilde */
#define XK_dead_macron                   0xfe54
#define XK_dead_breve                    0xfe55
#define XK_dead_abovedot                 0xfe56
#define XK_dead_diaeresis                0xfe57
#define XK_dead_abovering                0xfe58
#define XK_dead_doubleacute              0xfe59
#define XK_dead_caron                    0xfe5a
#define XK_dead_cedilla                  0xfe5b
#define XK_dead_ogonek                   0xfe5c
#define XK_dead_iota                     0xfe5d
#define XK_dead_voiced_sound             0xfe5e
#define XK_dead_semivoiced_sound         0xfe5f
#define XK_dead_belowdot                 0xfe60
#define XK_dead_hook                     0xfe61
#define XK_dead_horn                     0xfe62
#define XK_dead_stroke                   0xfe63
#define XK_dead_abovecomma               0xfe64
#define XK_dead_psili                    0xfe64  /* alias for dead_abovecomma */
#define XK_dead_abovereversedcomma       0xfe65
#define XK_dead_dasia                    0xfe65  /* alias for dead_abovereversedcomma */
#define XK_dead_doublegrave              0xfe66
#define XK_dead_belowring                0xfe67
#define XK_dead_belowmacron              0xfe68
#define XK_dead_belowcircumflex          0xfe69
#define XK_dead_belowtilde               0xfe6a
#define XK_dead_belowbreve               0xfe6b
#define XK_dead_belowdiaeresis           0xfe6c
#define XK_dead_invertedbreve            0xfe6d
#define XK_dead_belowcomma               0xfe6e
#define XK_dead_currency                 0xfe6f

/* dead vowels for universal syllable entry */
#define XK_dead_a                        0xfe80
#define XK_dead_A                        0xfe81
#define XK_dead_e                        0xfe82
#define XK_dead_E                        0xfe83
#define XK_dead_i                        0xfe84
#define XK_dead_I                        0xfe85
#define XK_dead_o                        0xfe86
#define XK_dead_O                        0xfe87
#define XK_dead_u                        0xfe88
#define XK_dead_U                        0xfe89
#define XK_dead_small_schwa              0xfe8a
#define XK_dead_capital_schwa            0xfe8b

S’il était possible de définir une touche morte dead_lafayette, on pourrait utiliser ça pour implémenter le pilote Linux.

JulioJu commented 8 years ago

Merci pour ta réponse :-)

JulioJu commented 8 years ago

Par contre ce serait cool d'écrire ta phrase « ~/.XCompose n’est utilisé que pour le cas particulier des applications X11 dans MacOSX — je ne sais même pas s’il est toujours requis de nos jours. Les applications X11 de MacOSX voient la touche AC10 comme un accent grave mort, et il faut donc un fichier ~/.XCompose spécifique pour cette plateforme. » dans le Readme.md, pour d'éventuels utilisateurs de MacOS X.

fabi1cazenave commented 8 years ago

C’est sur le site web : http://fabi1cazenave.github.io/qwerty-lafayette/#changelog