Skupiny
Jak jsme si již řekli v minulém dílu, XKB umožňuje nakonfigurovat symboly, které generuje klávesnice, pomocí dvou množin – úrovní a skupin. Zatímco úrovně jsme použili v předchozí části, nyní se podíváme na to, jakým způsobem použít skupiny.
Skupiny se používají, pokud chceme definovat větší část klávesnice, což většinou potřebujeme u různých jazyků. Takový konfigurační soubor používající více skupin se příliš neliší definice rozložení uvedené v předchozím díle. Uveďme si tedy příklad. Bude se jednat o doplnění rozložení libovolné klávesnice o řecké klávesy:
default partial alphanumeric_keys
xkb_symbols "basic" {
name[Group2]= "honza/greek";
key <AD02> { [], [ Greek_sigma, Greek_SIGMA ] };
key <AD03> { [], [ Greek_epsilon, Greek_EPSILON ] };
key <AD04> { [], [ Greek_rho, Greek_RHO ] };
key <AD05> { [], [ Greek_tau, Greek_TAU ] };
key <AD06> { [], [ Greek_upsilon, Greek_UPSILON ] };
key <AD07> { [], [ Greek_theta, Greek_THETA ] };
key <AD08> { [], [ Greek_iota, Greek_IOTA ] };
key <AD09> { [], [ Greek_omicron, Greek_OMICRON ] };
key <AD10> { [], [ Greek_pi, Greek_PI ] };
key <AC01> { [], [ Greek_alpha, Greek_ALPHA ] };
key <AC02> { [], [ Greek_sigma, Greek_SIGMA ] };
key <AC03> { [], [ Greek_delta, Greek_DELTA ] };
key <AC04> { [], [ Greek_phi, Greek_PHI ] };
key <AC05> { [], [ Greek_gamma, Greek_GAMMA ] };
key <AC06> { [], [ Greek_eta, Greek_ETA ] };
key <AC07> { [], [ Greek_xi, Greek_XI ] };
key <AC08> { [], [ Greek_kappa, Greek_KAPPA ] };
key <AC09> { [], [ Greek_lamda, Greek_LAMDA ] };
key <AB01> { [], [ Greek_zeta, Greek_ZETA ] };
key <AB02> { [], [ Greek_chi, Greek_CHI ] };
key <AB03> { [], [ Greek_psi, Greek_PSI ] };
key <AB04> { [], [ Greek_omega, Greek_OMEGA ] };
key <AB05> { [], [ Greek_beta, Greek_BETA ] };
key <AB06> { [], [ Greek_nu, Greek_NU ] };
key <AB07> { [], [ Greek_mu, Greek_MU ] };
key <MENU> { [ Menu, ISO_Next_Group] };
};
Začali jsme opět jako v minulé části – hlavičkou a pojmenováním naší skupiny. Dále jsme všem klávesám dodefinovali jejich skupinu číslo dvě. To lze opět vícero způsoby, buď jak vidíte v ukázce:
key <AC09> { [], [ Greek_lamda, Greek_LAMDA ] };
nebo také:
key <AC09> { symbols[Group2] = [ Greek_lamda, Greek_LAMDA]};
Oba zápisy jsou co do funkce ekvivalentní. Nakonec musíme někam namapovat klávesu se symbolem ISO_Next_Group, která po svém stistku změní aktuální skupinu na další (toto chování vyčtete ze souboru compat/iso9995). V tomto případě jsme ji namapovali na wokenní klávesu Menu v kombinaci se Shiftem.
Opět se jedná o částečnou definici, čili musíme ji sloučit s nějakou další (pokud to neuděláte, budou vám fungovat pouze tyto klávesy). Vypomůžeme si již klasickým příkazem:
setxkbmap -symbols en_US\(pc104\)+GRK
Pokud jsme naši konfiguraci uložili do podadresáře symbols/GRK v hlavním adresáři XKB (pro Woodyho je to /etc/X11/xkb), můžeme pozorovat požadované chování – po stisku Shift+Menu se přepne skupna a klávesnice píše řecky. Bohužel tyto klávesy pracují pouze v některých aplikacích. Nevyužijete je v GVIM, Konsoli apod., zato třeba v KWrite a OpenOffice si jich užijete dosytosti:
(Všiměte si jména souboru, po dotazu na uložení jsem ho zkusil napsat řecky a KWrite ho jako naoko vzal, na disku ale byly same otazníky.)
Spojme to dohromady
Nyní již máme tři soubory – z minula US a CZ a dnes přibyl GRK. Ty uložíme do adresáře symbols (jako vždy je to relativní umístění vzhledem k adresáři XKB) a můžeme přikročit k dalšímu kroku. Tyto soubory integrujeme do XKB.
V první řadě je přidáme do seznamů, které určují obsah jednotlivých adresářů. Jistě jste si již všimli souborů *.dir v hlavním adresáři XKB. V těch jsou uvedeny všechny konfigurace, které jsou v příslušných adresářích uvedeny. To umožňuje velice rychlé vyhledávání jednotlivých komponent. Pro naše tři soubory tedy do souboru symbols.dir přidáme:
-dp----- a------ US(basic) -dp----- a------ CZ(basic) -dp----- a------ GRK(basic)
Obecně jde o kombinaci následujících příznaků:
hdp----- amkfg-- jmeno(varianta)
Na význam jednotlivých příznaků odkáži do An Unreliable Guide to XKB Configuration. My jsme použili pouze d – default, p – partial, a – alphanumeric_keys (vidíte tu souvislost s příznaky v hlavičce konfigurace?). Pokud je v souboru více variant, uvedeme všechny.
Nyní již XKB ví, kde naše soubory hledat, ale pokud se podíváte do konfigurace programu kxkb, zatím je tam stále neuvidíte. Musíme změnit ještě dva soubory – rules/xfree86 a rules/xfree86.lst
Začňeme se souborem rules/xfree86.lst. Pokud se na něj pořádně podíváme, uvidíme zde výpis modelů klávesnic (sekce model), jejich rozložení (layout), varianty (variant) a možností (option). Každá sekce začíná vykřičníkem a následuje název sekce. V každé sekci je vždy varianta a její „human readable“ jméno. Doplníme tedy
! layout CZ Moje ceska klavesnice US Moje americka klavesnice ! option moje_ext Moje dalsi volby moje_ext:use_GRK Pouziti reckeho klavesnice
Zde stojí pouze za zmínku uvedení popisku skupiny možností moje_ext. Kromě této skupiny zde najdete třeba i skupiny grp (upravuje přepínání skupin, nemusíme tedy používat naši berličku se Shift+Menu), ctrl (chování klávesy Ctrl) a další.
Popisky tedy máme, zbývá vyřešit, jakým způsobem má kxkb vše složit dohromady. To zajistíme úpravou souboru rules/xfree86. Tento soubor má trochu složitější strukturu než předchozí, ale stále se v něm lze orientovat. Určuje, který řetězec pro nastavení kláves se použije, pokud chceme takové a takové rozložení klávesnice určité varianty a k tomu používáme určitý typ klávesnice (fyzické provedení). V tomto souboru pouze přidáme do oddílu option (opět ho symbolizuje vykřičník) následující řádek:
! option moje_ext:use_GRK = +GRK
Ten říká, že pokud budeme požadovat volbu moje_ext:use_GRK, přidá se k řetězci určujícímu klávesnice řetězec +GRK, čili aktivování naší řecké klávesnice. Pokud stejně jako já používáte prostředí KDE a program kxkb, ukončete ho a opět spusťte a v nastavení již uvidíte naše nové možnosti konfigurace:
Sw/hw úprava
V úvodníku jsme si slíbili jednu lehkou HW úpravu. Ta je užitečná hlavně pro uživatele editoru VIM. Také vám při jeho používání vadí, jak je Escape daleko od ostatních kláves a že při jeho stisknutí musíte levou ruku zvednout z klasické písařské pozice? Pak zkuste následující trik.
Něktré klávesnice umožňují jednotlivá tlačátka vytáhnout z jejich „šachtičky“. To je k ledasčemu užitečné. Vždy jednou za půl roku všechny klávesy vyndám a vyčistím (nemám rád téměř černá tlačítka). Ale hlavně – teď, když již umíme modifikovat rozložení kláves, nám nic nebrání ve fyzickém i programovém prohození klávesy Escape a klávesy se symbolem tildy (~). Bude se nám k tomu hodit následující rozložení:
partial alphanumeric_keys xkb_symbols "basic" { name[Group1]= "honza/vim"; key <TLDE> { [ Escape ] }; key <ESC> { [ quoteleft, asciitilde ] }; };
Obdobně (a možná elegantněji) by se to dalo vyřešit upravením vrstvy keycodes – prohozením keycodů a jejich symbolických jmen. Uvedená úprava je ale funkční a zcela postačující.
Závěr
Na závěr ještě přiložím své vlastní konfigurační soubory tak, jak je používám na své pracovní stanici. Všechny jsou zařazeny do public domain, každý je tedy může upravovat a používat dle svého uvážení.