Następna strona Poprzednia strona Spis treści

14. Co dokładnie robi XFree86-2.1 podczas inicjalizacji układu klawiatury?

Od wersji 2.1 XFree86 zainicjuje swój układ klawiatury z układu linuxowego, na tyle na ile można. Linux jednak miał 16 pozycji na klawisz (jedna na każdą kombinację modyfikatorów Shift, AltGr, Ctrl, Alt) a obecnie 256 pozycji na klawisz, podczas gdy X ma cztery pozycje na klawisz (jedna na każdą kombinację Shift i Mod), tak więc część informacji musi się zgubić.

X najpierw czyta plik Xconfig, gdzie można znależć definicje klawiszy LeftAlt, RightAlt, RightCtl, ScrollLock keys takie jak Meta, ModeShift, Compose, ModeLock czy ScrollLock - patrz X386keybd(1), później XFree86kbd(1).

Za Mod przyjmuje się lewy Alt, chyba że prawy Ctrl zdefiniowano jako ModeShift lub ModeLock, w którym to przypadku przyjmuje się prawy Ctrl, lub chyba że tak zdefiniowano prawy Alt, w którym to przypadku przyjmuje się prawy Alt. Ustala to w jaki sposób cztery znaczenia klawisza pod XFree86 są wybierane z szesnastu znaczeń linuxowych. Zauważ że dzisiaj Linux domyślnie nie rozróżnia pomiędzy dwoma klawiszami Ctrl i Shift. X jednak rozróżnia.

Następnie czytany jest układ klawiatury z jądra i poczynione zostają oczywiste odpowiednie przypisania pod X. Przypisania "klawiszy czynnościowych" - Show_Memory, Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On and Boot są ignorowane, tak samo jak klawisze diakrytyk i klawisze blokujące klawiaturę w określonym trybie [locks] (z wyjątkiem ShiftLock), oraz klawisze "ASCII-x"

Później używane są definicje z pliku Xconfig. Tak więc definicja klawisza Compose z Xconfig weźmie górę nad wartością znajdującą się w układzie klawiatury Linuxa.

Co dzieje się z ciągami znaków skojarzonymi z klawiszami funkcyjnymi? Nic. X nie posiada takiej koncepcji (ale możliwe jest zdefiniowanie łańcuchów znaków dla klawiszy funkcyjnych w xterm - zauważ jednak że najpierw otrzymuje te klawisze program zarządzający oknami).

Nie wiem jak przekonać xterm że powinien używać układu klawiatury X w czasie naciskania Alt; wydaje się że po prostu patrzy na swój zasób eightBitInput, i zależnie od tego jaką ma wartość logiczną albo ustawia ósmy bit znaku, albo wypisuje dodatkowy znak Escape (tak jak setmetamode(1) robi na konsoli).


Następna strona Poprzednia strona Spis treści