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