Polska klawiatura w X11

Uniwersalny skrypt sposobiący klawiaturę do generowania kodów z ogonkami.

Czemu nie .xmodmap ?

Stacje UNIXowe i PC mają zwykle (na szczęście ciągle jeszcze) klawiatury US. Równocześnie trzeba czasem działać na tekstach polskich. Trzeba więc jakoś wprowadzać litery z ogonkami. Xserver posiada możliwość przedefiniowania znaczenia klawiszy. Najczęściej sugerowane jest tworzenie w tym celu zbioru .xmodmap. Jest to rozwiazanie niezbyt poprawne. Taki zbiór jest wlasnością uzytkownika a nie xservera. Jego zawartość musi natomiast odpowiadać xserwerowi. Jezeli użytkownik (w znaczeniu zawężonym do homedirectory) otwiera sesję X zawsze na tym samym terminalu to problem znika. Ten przypadek zachodzi gdy użytkownik ma w swoim pokoju komputer z UNIXem i tylko przy nim siada do pracy. Jeżeli uzytkownik chce otworzyć sesję na zdalnym serwerze, w dodatku przy użyciu jednego z wielu xterminali (np. jedynego aktualnie wolnego na pracowni, czyli nie zawsze takiego samego, za to bez możliwości wyboru) - zaczynają sie problemy. Plik .xmodmap wiazany z konkretnym xserwerem, na innym albo nie działa albo działa tak że nie pozwala działać użytkownikowi.

Rozwiązanie.

Eleganckim rozwiązaniem byłoby spolszczenie xserwera. Niestety i tak nie zawsze byłoby to zadowalające. Czasem trzeba użyć obcego xterminala i doraźnie go uzdatnić. Dla tego proponuję skrypt xplkbset który automatycznie przystosowuje się do klawiatury i może być w miarę bezpiecznie umieszczony w startupie sesji użytkownika.

Dodatkowe kody mają być generowane przy pomocy klawisza Mode_switch i klawiszy z odpowiednią literą bez ogonka. Skrypt sprawdza czy klawisz z KeySym Mode_switch jest już zdefiniowany (bo bywa że jest nawet opisany na klawiszu i żal go tracić). Jeżeli nie to tworzy go sam. Wykorzystuje w tym celu istniejącą parę dublujących się klawiszy L-R i używa do swoich celów prawego. Testowane są to kolejno Alt, Mod, Super i Hyper. Na klawiaturze PC zostanie użyty Alt_R a na klawiaturze SUN Mod_R. Z wybranego klawisza usunięty zostanie KeySym*_R i przypisany mu KeySym Mode_switch. Ponadto ModeSwitch zostanie przypisany do pierwszego z wolnych modyfikatorów mod1, mod2, mod3, mod4, mod5. Działanie lewego klawisza nie ulegnie zmianie, więc klawiatura nie utraci części funkcji. Następnie klawiszom o dotychczasowych KeySym A, C, E, L, N, O, S, X, Z zostaną przypisane czwórki KeySym odpowiadające literom małej, dużej, małej z ogonkiem i dużej z ogonkiem.

Problemy

W skrypcie xplkbset używany jest dla polskich liter zestaw KeySym-ów odpowiadających literom z iso-8859-1:
 
ą plusminus Ą exclamdown
ć ae Ć AE
ę ecircumflex Ę Ecircumflex
ł threesuperior Ł sterling
ń ntilde Ń Ntilde
ó oacute Ó Oacute
ś paragraph Ś brokenbar
ż questiondown Ż macron
ź onequarter Ź notsign

Takie środowisko wymaga zmuszenia aplikacji do interpretacji otrzymywanych znakow jako iso-8859-2. Bardziej poprawne było by użycie KeySym-ów polskich. Niestety nie wszystkie xserwery i aplikacje je rozumieją.  Ze znanych mi aplikacji, poprawnie interpretuje (i wymaga ich) UNIXowa wersja programu WordPerfect.