Page suivante - Page précédente - Table des matières

13. Que fait exactement XFree86-2.1 à l'initialisation de sa keymap?

Depuis la version 2.1, XFree86 initialise sa keymap d'après celle de Linux, dans les limites du possible. Linux a 16 entrées par touches (une pour chaque combinaison de Shift, AltGr, Ctrl, Alt; en fait il en a même 256), alors que X n'en a que 4 (une pour chaque combinaison de Shift et Mod), il y a donc forcément des informations perdues.

D'abord X lit le fichier Xconfig, où il trouve les correspondances entre les touches Control, Alt et ScrollLock avec les codes X Meta, ModeShift, Compose, ModeLock et ScrollLock - voir X386keybd(1), ou XFree86kbd(1).

Par défaut, c'est la colonne LeftAlt qui sert pour Mod, sauf si CtlDroit est défini comme ModeShift ou ModeLock, dans ce cas ce sont les entrées RightCtl qui servent pour Mod. (Sauf si AltGr est défini comme Mod dans Xconfig, auquel cas c'est la colonne RightAlt qui sert.) Ceci détermine comment les 4 entrées de XFree86 sont choisies parmi les 16 de Linux. Notons que par défaut Linux ne fait pas la différence entre les deux touche Control ou Shift. X fait la dufférence.

Les touches "action" Show_Memory, Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On et Boot sont ignorées, de même pour les touches mortes, NumLock, ScrollLock et Alt+code-ASCII.

Ensuite, les définitions de Xconfig sont utilisées. (Donc une définition de Compose dans Xconfig annulera celle trouvée dans la keymap du noyau.)

Que deviennent les chaînes associées aux touches des fonctions ? Rien, ce concept n'existe pas sous X. (Mais il est possible de définir des chaînes associées aux touches de fonction dans xterm - mais elles ne doivent pas être interceptées par le gestionnaire de fenêtres.)

Je ne sais pas comment convaincre xterm qu'il devrait utiliser la keymap de X quand Alt est enfoncé. Il semble qu'il ne réagisse qu'en fonction de sa ressource eightBitInput, et selon qu'elle est à vrai ou faux, soit il met à 1 le huitième bit, soit il génère un caractère escape devant le caractère (comme le fait setmetamode(1) pour la console).


Page suivante - Page précédente - Table des matières