Myš je pro kočku: Klávesnice – xkb a Shift císařů

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.


Layout snů

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] };
🦜 Vyzkoušejte si, které obrázky vám sednou a jestli na ně dobře dosáhnete, abyste při psaní častých znaků nemuseli mávat rukama jako papoušek.

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.

👿 Nutno dodat, že při mapování se CapsLock chová divoce. Pokud na první pozici je písmeno (a CapsLock až na druhé), stejně se při psaní písmena aktivuje. Takže píšete písmeno a přitom vám bliká kontrolka. Pokud na první pozici není alfanumerický symbol, ale třeba ISO_Next_Group, dělá bugr až s dalšími pozicemi. Jak ho zklidnit? Dlouho koumaje, přišel jsem na obezličku. Pokud je CapsLock mapován ještě kdekoli jinde na klávesnici, začne se chovat slušně. Kromě na cílovou klávesu jej proto umisťuji i na klávesu <MDSW>, partnerku AltGr a ISO_Level3_Shift, kterou však na klávesnici fyzicky nemám (a keysym Mode_switch v xkb také nepoužívám). Díky tomu se CapsLock nažere a <LSGT> zůstane funkční.
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)

Autor:

Zanechte komentář

Všechny údaje jsou povinné. E-mail nebude zobrazen.

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..