Dajme tomu, že často kontrolujete, či žije váš server na druhom konci republiky. Treba napísať celý príkaz ping -c 10 moj.server.sk. Keď to už budete písať dvadsiaty krát za deň, určite si povzdychnete, či by sa to nedalo nejak zjednodušiť. (Najmä vtedy keď sa práve tento príkaz už nenachádza v histórii príkazov.)
Nebolo by super tak po stlačení F3 v termináli vidieť výstup príkazu ping -c 10 moj.server.sk? Jeden jediný kláves namiesto celého toho dlhého textu?
Nemusí to byť práve ping, môže to byť čokoľvek iné: nejaká dlhá cesta, shutdown servera, či pravidelné reštartovanie firemného winservera, editovanie súboru, do ktorého si píšete poznámky počas celého dňa, čítanie pošty, sťahovanie najnovšieho kernelu … čokoľvek.
Čo potrebujeme:
- Bash
- Shell, kde vkladáme príkazy. S rozmachom Linuxu sa stal bash asi najpoužívanejší. Beží na mnohých platformách, takže si ho určite môžete naištalovať a vyskúšať, aj keď nemáte Linux.
- Readline
- Knižnica Readline umožňuje okrem editácie príkazu, ktorý práve píšete do shell promptu, aj priraďovať jednotlivým klávesom príkazy. Štandardne je Readline súčasťou bashu a nemá dokonca vlastnú man stránku, je popisovaná na stránke k bashu.
- Editor
- Akýkoľvek textový editor. Budeme editovať inicializačný súbor pre Readline.
~/.inputrc
Readline sa inicializuje zo súboru ~/.inputrc. Tu definujeme všetky naše klávesové skratky. Okrem toho tu možno tiež nastavovať premenné knižnice Readline.
Komentáre sa začínajú, ako je už zvykom, znakom #. Všetko sa znakom # je ignorované. Podobne prázdne riadky sú ignorované.
Syntax pre klávesové skratky je celkom jednoduchý:
"kód klávesu":"funkcia alebo makro"
Každý kláves generuje kódy. Okrem zobraziteľných znakov (ako sú napr. písmená), existujú sekvencie pre špeciálne znaky:
\C-- Control predpona
\M-- Meta resp. Alt predpona
\e- Escape predpona
\\- spätné lomítko
Kódy klávesov si môžeme jednoducho zistiť, keď stlačíme Ctrl-V a potom daný kláves (v bashi samozrejme). Stlačíme teda Ctrl-V F3 s zobrazí sa ^[[13~. Vidíme, že F3 generuje sekvenciu Escape [ 1 3 ~. (Escape sa zobrazuje ako ^[). Toto je kód klávesu F3 pod X Windows Systémom. Ak pracujeme textovej (virtuálnej) konzole, F3 generuje ^[[[C, čiže Escape [ [ C.
Príklad
Nebudeme chodiť okolo horúcej kaše. Ukážeme si ako priradiť klávesu F3 ten náš pingovací príkaz. Do súboru .inputrc v domácom adresári pridáme:
# žije môj server? "\e[13~":"ping -c 10 moj.server.sk\C-M"
Klávesu F3, ktorý generuje "\e[13~" priradíme makro ping -c 10 moj.server.sk nasledovaný Ctrl-M, čiže Enter, aby ho nebolo treba odosielať.
Inicializačný súbor sa načítava vždy pri štarte bashu. Aby sme nemuseli kôli tomu nanovo púšťať terminál so shellom, stačí použiť funciu re-read-init-file, pomocou klávesovej kombinácie Ctrl-X Ctrl-R, ktorá nanovo načíta obsah ~/.inputrc.
Stlačíme F3 a … pingujeme. Žiadne dlhé vypisovanie, žiadny Enter. Prosto paráda.
S funkčnými klávesami to nekončí. Keď využijete všetkých 12 klávesov, môžete použiť modifikáry (Ctrl, Alt, Shift) a ich kombinácie. Pozor niektoré z nich sú už použité vo window manageri; tie sa vám nepodarí využiť, pretože window manager sa k nim dostane skôr ako Readline.
Ďalšie tipy
# nepípaj po mne! set bell-style none
Odvykol som si od toho, aby po mne môj počítač pípal – odpájal som interný speaker. Dnes to už robím softwarovo. Toto je príklad nastavovania premennej knižnice Readline.
# vstup/výstup národných znakov (ISO 8859.2) set meta-flag on set convert-meta off set output-meta on
Aj vstup (z klávesnice) našich národných znakov podlieha Readline.
Tipy na ďalšie čítanie
- man alebo info bash (readline)
- Keyboard-and-Console-HOWTO