XFree86 4.1 a ceska klavesnice 2 [opet long ;]

Kamil Toman ktoman na email.cz
Čtvrtek Srpen 30 10:42:06 CEST 2001


Precetl jsem si komentare, ktere za vcerejsek dorazily do konference,
a zkusim na ne zas odpovedet trochu v souhrnu ;)

* K mrtvym klavesam: 

Nova klavesnice cz umoznuje napsat pomerne hodne novych symbolu, ktere vyzaduji
mrtve klavesy jako ogonek, cedilla a podobne (viz 
http://artax.karlin.mff.cuni.cz/~toman/x/xkbd-cz.png )

Pokud by bylo potreba psat i dalsi symboly, lze to udelat pridanim nejake
specialni mapy do konfigurace xkb (pres symbol +), jak to delaji napr. nektere
varianty klavesnic pro sun. Podobne, upravou souboru Compose se da dosahnout
tehoz pres meta klavesu. 

Poznamka: Nektere veci jsem tam uz pridal, kdyz jsem delal layout cz -- napr. 
dvojite zmacknuti mrtveho znaku generuje nejblizsi podobny symbol, jako to
napr. delaji Windows, tj. napr. 2x 'dead_acute' -> apostrof.


* Konfigurace klavesnice XFree86 4.1

U me, napr. vypada takto:
----------
Section "InputDevice"

    Identifier  "Keyboard1"
    Driver      "Keyboard"
    Option "XkbRules"    "xfree86"
    Option "XkbModel"    "geniuscomfy"
    Option "XkbLayout"   "cz_qwerty"

    # Option "XkbLayout" "us"

EndSection
----------

Coz se da konfiguracnim programem vygenerovat docela jednoduse. Seznam modelu
a layoutu klavesnic je totiz v jednoduchem formatu uveden v souboru
'/usr/X11R6/lib/X11/xkb/rules/xfree86.lst'.

Co se tyce podivneho chovani pri "grp:shift_togle", problem je trochu vetsi
a bohuzel se netyka jen cz/sk klavesnice. Jadro pudla je v tom, ze ackoliv
normalni klavesy lze _predefinovat_, modifikatorum se tim pridava dalsi 
funkcnost (ve smyslu seznamu handleru, coz pro modifikatory dava dobry smysl).

Potiz je v tom, ze pro systemove klavesy pouzivam uz hotove definice 
z konfigurace xkb. Cestina ma ovsem prave ono maximum modifikatoru, kolik jich 
dovoluje X protokol. Problem teda zpusobuje, ze jeden modifikator se pouziva
jak pro zdvih, tak pro obsluhu sys-klaves PC klavesnice. Resenim by bylo
zruseni toho systemoveho-modifikatoru, to ale zatim xkb neumi (ale umet
bude, na tom jsme se uz pred casem s core-vyvojari dohodli ;).

Kazdopadne tahle "vada na krase" nepredstavuje problem, pokud
"grp:shift_toggle" nebo podobny switch nejsou zapnute (nebo pokud takovou 
klavesu nemacka rucne) a pri pouzivani cz a standardniho prepinani k tomu
neni duvod. Oprava nebude vyzadovat (nebo jen maly) zasah do definic layoutu
klavesnic, vcetne cz.


* Patch:

Napred jeste poznamka k:
>Protoze prepinani group pomoci shift+shift uzivatelum chybi (a _neni_ to
>"evil", podivejte se napr. na kanadskou klavesnici; specifikace xkb
>dle zbezneho prolistovani se take k nekolika groupam nestavi zaporne),
>rozhodl jsem se je zase pridat. Jdu (alespon si myslim) nejstandardnejsi
>cestou:

Prepinani shift-shift "evil" rozhodne neni, nicmene zpusob, ktery Jan
zvolil, je jenom navratem k predchozimu stavu -- tedy IMO de-facto nic neresi.

Z diskuze na i18n na xfree86.org muzu celkem s jistotou prohlasit, ze prepinani
pres xkb groups je spis _tolerovane_ nez standardni reseni. Standardnim resenim
je setxkbcomp, podle me by jim melo byt spis vylepseni konfigurace xkb tak,
aby umoznovalo vice map (proc ne i tri a vice?) a definovani libovolneho
prepinace klavesovou kombinaci.

Jinak patch jsem cetl a myslim, ze to "bude fungovat". Jeho zarazeni do 
pristi verze distribuce SuSE Linuxu je veci SuSE, ale nemyslim si, ze
je to zrovna stastne reseni.

Myslim, ze hlavni duvod, proc jeste xkb postrada lepsi konfiguraci podporujici
nekolik ruznych layoutu soucasne je zpusobna hlavne tim, ze na to nikdo 
nema dost casu. Pokud by treba i nekdo ze SuSE chtel uprit svoji pozornost,
mozna by to nebylo od veci.

Jinak diky za upozorneni na chybku v cz_qwerty/sk_qwerty. Nevim, jak se to tam
dostalo, asi jsem to v tom temer 100kB patchi, ktery jsem do X posilal nejak
prehledl. Na v adresari, ze ktereho jsem patch vyrabel mam definice kupodivu
neuriznute. Zjevne neukoncena redefinice by mela vypadat:

    key <AB01> { [    z,              Z,                                                                degree,         NoSymbol ] };                               key <AD06> { [    y,              Y,                                                              NoSymbol,       NoSymbol ] };

Shodou nahod to nastesti v aktualni implmentaci setxkbmap a xkbcomp
funguje (snad bez vedlejsich efektu). Patch do X samozrejme ihned poslu.


Kamil Toman


Další informace o konferenci Linux