xkb – přemapovat pečlivě a s výhodami
Velmi silný nástroj pro mapování klávesnice představuje xkb. Náš článek představuje ani ne tak stručný úvod, jako rychlý způsob, jak jej začít používat. Pokud chcete o znalostní úroveň výš, začněte třeba s pátráním z blogu italského programátora, návodem na help.ubuntu.com nebo se odvažte do hlubšího kontextu na archlinuxu. Existuje také vynikající manuál od Paula Rusty Russela (“Nikdy jsem tenhle dokument psát nechtěl, jsem příliš nekvalifikovaný; ale vždycky jsem jej chtěl číst, a tak to byla jediná cesta.”) Jeho popis dobře ilustruje, do jakého labyrintu se v zákoutích klávesnice můžete dostat.
Ať je hned půl hotovo
Já se omezím na nejjednodušší variantu – editujte jediný soubor (jej zazálohovavše), například si vezměme český layout: /usr/share/X11/xkb/symbols/cz.
Tohle bude náš dnešní cílový stav. Místo CapsLocku klávesa ISO_Level5_Shift a místo pravého Super (neboli kratšího Win) kouzelná Multi_key. Klávesa AltGr je totéž jako ISO_Level3_Shift. Kombinací Shift, ISO_Level3_Shift a ISO_Level3_Shift získáváme pro každou běžnou klávesu osm pozic – osm různých znaků, které si volně rozmístíme.
Na konec souboru /usr/share/X11/xkb/symbols/cz přidejte řádky:
partial alphanumeric_keys xkb_symbols "muj_layout" { // Tímhle říkáme, že vycházíme z layoutu cz ve variantě qwerty. include "cz(qwerty)" // Jak přistoupit k 8 pozicím? // jména kláves: base, Shift, AltGr, AltGr+Shift, CapsLock, CapsLock+Shift, AltGr+CapsLock, AltGr+CapsLock+Shift // jména keysym: base, Shift, Level3, Level3+Shift, Level5, Level5+Shift, Level3+Level5, Level3+Level5+Shift key.type= "EIGHT_LEVEL"; // Zde můžeme začít psát klávesy. Začneme diakritickou řadou. key <AE01> { [plus, 1, x, y, exclam, dead_tilde] }; // Původně cz(qwerty) má: key <AE01> { [ plus, 1, exclam, dead_tilde ] }; // ... sem budeme psát dál, vyberte si sami co }
Diakritická řada září
Všimněte si, že oproti normální cz(qwerty) musíme doplňovat pozici 3 a 4, protože budeme používat 8 pozic kláves, a ne jen 4. Nemáme-li prozatím nápad, jak pozice zužitkovat, dáváme tam pro orientaci písmena x a y. Před uzavírací složenou závorku volně dopisujeme další klávesy.
// zavináč (keysym 'at' napíšeme stiskem CapsLock+2) key { [ecaron, 2, Ub2, y, at, X] }; // AltGr+3 vyvolá znak "na třetí", snadno napíšeme x³ key { [scaron, 3, Ub3, y, numbersign, dead_circumflex] }; // na volné pozice si můžete dát Unicode obrázky – ikony peněz, stromu a kravaty jsem využil na našem táboře key { [ccaron, 4, U1F4B0, y, dollar, dead_breve] }; key { [rcaron, 5, U1F332, y, percent, dead_abovering] }; key { [zcaron, 6, U1F454, y, asciicircum, dead_ogonek] }; key { [yacute, 7, x, y, ampersand, dead_grave] };
Protože se mi občas hodí napsat pár vět francouzsky, umístil jsem si francouzskou diakritiku na klávesy AltGr+8,9,0.
key <AE08> { [aacute, 8, agrave, x, asterisk, dead_abovedot] }; key <AE09> { [iacute, 9, icircumflex, y, z, dead_acute] }; key <AE10> { [eacute, 0, egrave, x, y, dead_doubleacute] };
Na zbylé dvě klávesy před backspacem picněme řadu matematických symbolů a počet diakritických znamének, která bez pomoci napíšeme, vyšponujme na deset. Latinský makrónek, románská sedilka, vietnamský růžek, polský ocasík, slovenská vokáňka? Mohou se vám hodit, zjistíte-li jako kamarád David před svatbou, že se jmenujete jinak, než jste si celý život mysleli.
// rovná se =, nerovná se ≠, plus mínus ±, přibližně ≅, umlaut ¨, equivalence ⇔ key <AE11> { [equal, U2260, dead_diaeresis, U21D4, UB1, U2245] }; // francouzstina, latina key <AE12> { [dead_acute, dead_caron, dead_grave, dead_cedilla, dead_circumflex, dead_macron] };
Smělá písmena a barevný Numpad
Přistupujeme k hrátkám s normálními písmeny. Zbývá dost prostoru pro různé matematické kvantifikátory, české uvozovky.
// math: (ne)náleží ∈ ∉, ê, €, (ne)existuje ∃ ∄ key <AD03> { [e, E, U2208, U2209, ecircumflex, EuroSign, U2203, U2204] }; // recycling key <AD04> { [r, R, paragraph, registered, U21bb, x] }; // implication, reverse-implication, sipka-vpravo, sipka-vlevo key <AD08> { [i, I, rightarrow, leftarrow, U21d2, U21d0] }; // o, O, empty set ∅, circled dot operator ⨀, plus v kolečku ⊕, oslash ø, Xbig oslash Ø key <AD09> { [o, O, U2295, oslash, U2205, U2a00] }; // pi key <AD10> { [p, P, x, y, U03C0, z] }; // guillemets key <AD11> { [uacute, slash, UAB, x, bracketleft, braceleft] }; key <AD12> { [parenright, parenleft, UBB, x, bracketright, braceright] }; // sum key <AC02> { [s, S, dstroke, S, U2211, section] }; // black flag, white flag key <AC06> { [h, H, h, H, U2691, 2690] }; // low-priority key <AC07> { [j, J, U2913, y, x, y] }; // high-priority key <AC08> { [k, K, U21AF, y, x, y] }; // hvězdička (místo AltGr+8), obrázková hvězdička key <AC09> { [l, L, asterisk, U2605, lstroke, Lstroke] }; // české uvozovky key <AC10> { [uring, quotedbl, doublelowquotemark, singlelowquotemark, x, y, c, d] }; // české uvozovky key <AC11> { [slash, exclam, leftdoublequotemark, leftsinglequotemark, apostrophe, bar, c, d] }; key <TLDE> { [semicolon, dead_abovering, grave, asciitilde, grave, asciitilde] }; key <BKSL> { [backslash, apostrophe, slash, y, bar, x] }; key <AB03> { [c, C, y, copyright, ccedilla, x] }; // zavináč, logicke OR, kvantifikátor pro všechno ∀ key <AB04> { [v, V, at, U2228, U2200, x] }; // znak pro násobení key <AB08> { [comma, question, less, x, less, multiply] }; // pravý zobáček nad AltGr, kde jsme na něj zvyklí key <AB09> { [period, colon, greater, x, greater, division] }; // opravdová pomlčka, nejen spojovník key <AB10> { [minus, underscore, endash, y, emdash, x, c, d, e, f] };
Ošperkujeme si trochu Numpad? Proč by měl suše dělat písmena nebo případně při vypnutém NumLocku simulovat šipky a klávesy jako Home, které máte hned vedle? Bez checkmarku ✓, přesýpacích hodin ⌛a ikonek obálky 📧 a telefonu 📞 si neumím své strukturované poznámky představit.
// 1, checkmark, like, dislike, not-checkmark key <KP1> { [KP_1, U2713, U1f44d, U1f44e, U237b] }; // 2, hourglass, scales, hammer&pick key <KP2> { [KP_2, U231b, U2696, U2692] }; // 3, link key <KP3> { [KP_3 , U1f517] }; // 4, bed in hotel, male, female, man, woman key <KP4> { [KP_4, U1F6CC, U2642, U2640, U1F6B9, U1F6BA] }; key <KP5> { [KP_5 ] }; // 6, bus, train, airplane, car key <KP6> { [KP_6, U1F68C, x, y, U1F682, U2708, U1f697] }; key <KP7> { [KP_7] }; // 8, obálka, telefon key <KP8> { [KP_8, U1f4de, y, z, U1f4e7, x] }; key <KP9> { [KP_9] };
Klávesa ISO_Level5_Shift je Shift císařů
Přidáme ještě hlavní přísadu, modifikátor ISO_Level5_Shift namísto zbytečné klávesy CapsLock. To díky němu získáme na každé klávese 8 pozic, které jsme si právě nakonfigurovali. Nádavkem pak místo pravého Super lípněme Multi_key. Divíte se, proč je na některých pozicích klávesy <CAPS> keysym ISO_Level5_Shift a jinde ..._Lock? Nestačil by všude ..._Shift? Možná ano, experimentujte. Nedivte se však, pokud vám Shift+CapsLock+key bude vracet jiné výsledky než CapsLock+Shift+key.
key <CAPS> { type[Group1] = "EIGHT_LEVEL", symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ] }; modifier_map Mod3 { <CAPS> }; // Pravé Super na Multi_key key <RWIN> { type[Group1]="TWO_LEVEL", [ Multi_key, Multi_key ] };
Máte-li mezi levým Shiftem a písmenem Z klávesu s lomítkem, můžete si CapsLock přesunout tam, abyste ho mohli vypnout, pokud ho něco omylem zapne. Na první pozici máme nedělitelnou mezeru, na pozici s Shiftem zmíněný CapsLock.
key <LSGT> { [ nobreakspace, Caps_Lock] }; // obezlička: aby se CapsLock na LSGT choval standardně key <MDSW> { [ Caps_Lock ] };
Ještě aktivovat
A jak se ten slavný layout zapíná? Sice je to zase celá věda, ale existuje rychlé řešení – stačí spustit příkaz: setxkbmap 'cz(muj_layout)’