Emacs? Help! (1.část)
-=-=-=-=-=-=-=-=-=-=-=-
"[In 'Doctor' mode], I spent a good ten minutes telling Emacs what I
thought of it. (The response was, 'Perhaps you could try to be less
abusive.')"
-- Matt Welsh
Milan Zamazal, 9.února 1998
Emacs je oblíbeným pracovním prostředím mnoha uživatelů převážně
unixových systémů. Avšak jen překvapivě málo uživatelů Emacsu je
zběhlých v jedné z jeho nejsilnějších stránek -- nesmírně rozsáhlém
a mocném dokumentačním systému. Mnozí ani neví, co vše a jak je
v Emacsu dokumentováno, jiní zase dostanou z dokumentace hrůzu poté,
co poprvé shlédnou rozsah referenční příručky. Přitom vyhýbat
se dokumentaci Emacsu znamená ochudit se o mnoho informací
a o příjemný pocit z objevování fascinujícího. Několikadílný článek
o dokumentačních schopnostech Emacsu by měl ukázat, že dokumentační
systém Emacsu není nijak hrozivý a že mnohdy existuje řada cest, jak
v něm žádanou informaci nalézt. Snad také některé čtenáře přesvědčí
o pozoruhodnostech dokumentace Emacsu natolik, že sebe i své kolegy
napříště spíše než triviálním dotazem potěší sdělením zajímavého
tipu, na který narazili předchozí večer při napínavém průzkumu
dokumentace.
Tento miniseriál byl psán se třemi základními cíly:
1) Seznámit uživatele s nápovědními a dokumentačními funkcemi,
o kterých možná dosud nevěděli nebo neznali některé jejich
vlastnosti, a umožnit jim tak používat Emacs efektivněji než
doposud.
2) Prezentovat příklad z hlediska uživatele dobře
dokumentovaného programu. Dokumentační systém Emacsu může
být pro tvůrce jiných programů dobrým zdrojem inspirace
a ukázkou principů umožňujících vytvářet interaktivní
dokumentační systém, který je z hlediska uživatele mocný
a z hlediska tvůrce dokumentace snadno zvládnutelný.
3) Připomenout autorům malých i větších elispovských programů,
že by měli při programování pro Emacs vždy dbát
i na dokumentační stránku a psát své programy tak, aby dobře
zapadly do.celého dokumentačního systému.
Článek je psán se zřetelem na Emacs 20, většina zde uvedených
faktů však platí i pro Emacs 19 a XEmacs. V prvním díle se zaměříme
na příručky a dokumentace k programům jako celku.
Poprvé v Emacsu
Emacs vede uživatele okamžitě od svého spuštění, začátečník
tedy pro práci s Emacsem nepotřebuje žádnou předchozí přípravu.
Již úvodní obrazovka obsahuje několik podstatných informací (určitě
jste si je už aspoň jednou přečetli, že?). Kdo prakticky zužitkuje
informaci jak spustit tutoriál, naučí se z něj základnímu ovládání
krok po kroku a ušetří si tím některé problémy. Bývá častou chybou
začátečníků, že si tutoriál nepřečtou v mylném domnění, že tím
uspoří čas. Tutoriál existuje i v českém překladu, naleznete jej
na ftp://ftp.fi.muni.cz/pub/localization/emacs/emacs-20/.
Kromě úvodní obrazovky je na.první pohled patrnou nápovědou
menu. Je obecně rozšířeným omylem, že menu slouží primárně
k pohodlnějšímu zadávání příkazů myší. To samozřejmě není pravda,
však také u položek menu, které mají klávesový ekvivalent,
odpovídající klávesovou zkratku naleznete. Ve skutečnosti je účel
menu dvojí: umožnit snazší výběr z dynamického seznamu (jako
je například seznam bufferů nebo odkazů na texty v kill ringu)
a usnadnit uživateli orientaci ve funkcích programu. Druhý účel
se vám asi zdá samozřejmý, ale přesto na něj neustále pamatujte.
Až se budete pídit po nějakém příkazu, měli byste si v první
řadě prohlédnout menu. To platí zejména pro komplexní programy
s komplexními menu, jako jsou třeba Gnus. Může se to ovšem hodit
i v banálnějších případech. Pokud například chcete porovnat dva
soubory a neuspokojuje vás nepřehledný výstup programu diff,
naleznete odpovídající funkci Emacsu během několika vteřin v menu
(zkuste si to, při tipování správných menu nezapomínejte, že
většina věcí v Emacsu je organizována přísně logicky podle pečlivě
promyšlených pravidel).
Info
Základním zdrojem dokumentace k Emacsu je pochopitelně
referenční manuál. Tento manuál je stejně jako většina GNU
dokumentace napsán ve formátu Texinfo. Tento formát, který se
lze snadno naučit, byl vytvořen speciálně pro tvorbu dokumentace.
Umožňuje z jednoho zdrojového dokumentu vytvořit online dokumentaci
i tištitelný dokument. Online dokumentaci lze vytvořit programem
makeinfo nebo příkazy Emacsu. Tyto dva postupy nejsou ekvivalentní,
obvykle dáte asi přednost programu makeinfo, protože je výrazně
rychlejší a lépe pracuje s novými verzemi Texinfo formátu. Výstup si
pak lze prohlížet přímo v Emacsu pomocí info systému, o kterém se
zmíníme níže. Výstup pro tisk je produkován programem TeX a nejsnáze
jej pořídíte programem texi2dvi. Například hlavní manuál Emacsu
zformátujete do DVI příkazem texi2dvi emacs.texi v adresáři man
zdrojových textů Emacsu. Druhou cestou získání tištěné dokumentace
je samozřejmě objednat si ji u Free Software Foundation, což je
jedna z dobrých možností, jak sponzorovat vývoj free softwaru.
Dalším z možných výstupních formátů je HTML, který pořídíte nejspíše
programem texi2html, který je opět k mání v běžných linuxovských
distribucích, případně v CTANu.
Při práci s Emacsem budete nejspíše používat online (info)
dokumentaci. Info je mocný hypertextově orientovaný formát a mód pro
prohlížení dokumentace, který umožňuje pomocí několika jednoduchých
příkazů provádět s dokumentací vše podstatné. Nebudeme zde popisovat
jeho ovládání, protože vás v tomto směru Emacs vede již od úvodní
obrazovky a součástí info dokumentace je i podrobný návod k ovládání
info systému. Důležité je, že zobrazený online manuál je běžný
emacsovský buffer, takže v něm můžete provádět obvyklé akce, jako
je například vyhledávání, kopírování, vyhodnocování elispovských
výrazů, apod. Uveďme několik užitečných tipů pro práci s info
systémem:
- Rychlý vstup do některého z poduzlů mohou zajistit příkazy 1 až 9.
- Prohledat úplně celý manuál nějakým regulárním výrazem lze příkazem
s. Další hledání téhož regulárního výrazu se zopakuje příkazem s RET.
- Řada příkazů akceptuje zkratky, například pro vstup do manuálu Emacsu
obvykle stačí zadat m em RET.
- Šipky jsou pomalé, po odkazech se můžete lépe pohybovat tabulátorem
nebo pomocí příkazu f.
- Příjemný pocit schopností teleportace vám dodá příkaz g.
Standardní manuály
Existují tři základní balíky Texinfo dokumentace vztahující
se k Emacsu: sada manuálů z distribuce Emacsu, manuál k Elispu
a tutoriál k Elispu. Info k Emacsu je součástí standardní
distribuce Emacsu a bývá instalováno spolu s Emacsem. Elispovské
manuály nainstalujete nejsnáze na Linuxu z balíků kterékoliv
rozumné linuxovské distribuce nebo je můžete najít ve zdrojích
na ftp://ftp.gnu.org/pub/gnu/ nebo na kterémkoliv z nespočetných GNU
mirrorů pod názvy elisp-tutorial-verze.tar.gz a elisp-verze.tar.gz.
Vstoupíte-li do.info systému, všimnete si, že info dokumentace
Emacsu sestává z několika částí. Hlavní je samozřejmě "Emacs",
ale nelze opomenout ani ostatní části. Zejména je to dokumentace
k samotnému info, dokumentace k podpoře editace zdrojových textů
jazyků podobných C/C++ ("CC mode" -- možná jste ji marně hledali
v uzlu "Emacs") a dokumentace ke Gnus ("Gnus" a "Message").
Tím nechceme říci, že ostatní uzly na této úrovni neobsahují nic
zajímavého, zjištění jejich obsahu však ponecháváme vaší iniciativě.
Primární část ("Emacs") je velmi rozsáhlá a začátečník se v ní
jen těžko orientuje. Netřeba ovšem hned zoufat. První krok by měl
spočívat v pokusu o backtracking vstupem do správného uzlu hlavní
úrovně a následných poduzlů, s návraty v případě omylů. Odhadnutí
správného uzlu vyžaduje jistou zkušenost, avšak díky křížovým
odkazům máte dobrou šanci nalézt kýžené místo i přes odkaz z jiné
větve dokumentačního stromu. V případě neúspěchu můžete zkusit
prohledat nejvyšší úroveň manuálu jednoduchým C-s, na tomto místě je
totiž i seznam uzlů druhé úrovně. Dále můžete využít indexů. Manuál
Emacsu má celkem čtyři indexy. Indexy kláves, funkcí a proměnných
jsou určeny pro vyhledání již předem známých věcí, zejména samotným
počítačem (viz příkazy C-h C-f a C-h C-k). Člověk obvykle sáhne
po pojmovém ("concept") indexu. Užitečný může být i slovníček
("glossary"). Pokud selže i index, lze ještě před destrukcí počítače
vyzkoušet konstruktivnější použití hrubé síly v podobě příkazu s.
Popsaný postup lze aplikovat ve většině info manuálů.
Ilustrujme si to na příkladu: Uživatel chce zjistit, jak v reply
v Rmailu citovat odpověď, a dále ještě, jak místo standardního
odsazení citací mezerami použít před citací dvojtečky. Vstoupí
do uzlu "Emacs". Uvidí "Rmail" a vstoupí do.tohoto uzlu (chybně,
správné je "Sending mail"). Jde mu o reply, takže pokračuje vstupem
do uzlu "Reply". V prvním odstavci nalezne křížový odkaz na "Sending
mail" a projde jím. Zde text k tématu nic neříká, ale dole je menu.
Po rychlém nahlédnutí do "Format" se vrací zpátky a vylučovací
metodou vybere položku "Mode". Zde okamžitě vidí "Citing Mail", kde
nalezne kýžené informace. Pokud by se mu to tak snadno nezdařilo,
mohl by zkusit na nejvyšší úrovni uzlu Emacs vyhledat třeba řetězec
"cit" (coby společnou část slov "cite" a "citing"), což nedává
výsledek. Použití téhož v pojmovém indexu je však úspěšné. Nemusí
tedy dojít na.výraz krajního zoufalství v podobě aplikace s cit RET.
Referenční příručka Emacsu je poměrně dobré čtení. Je to jedna
z mála relativně jednoduchých metod, jak zjistit, jaké všechny
fascinující funkce Emacs má. Zkuste si občas sednout, zvolit
náhodně nějaký uzel a přečíst si jej. Možná se budete divit, kolik
zajímavého najdete třeba i v uzlech typu "Basic". Na druhou stranu
referenční příručka představuje jenom základní návod a neobsahuje
zdaleka vše. Už přímo ve standardní distribuci Emacsu se nachází
řada doplňujících prográmků (zejména hlavní módy pro editaci
zdrojových kódů několika desítek programovacích jazyků), ke kterým
je nutno hledat návod jinde, ale o tom si ještě povíme později.
Emacs Lisp
Řada uživatelů Emacsu dříve či později dospěje k závěru,
že k plnému využití možností Emacsu je nutná znalost Elispu.
Elisp (správně "Emacs Lisp") je programovací jazyk Emacsu a je v něm
napsána valná část Emacsu. Přestože mnoho lidí Elisp děsí tím,
že se jedná o podmnožinu jazyka Lisp, tj. jazyka pro někoho poněkud
nezvyklého funkcionálního programování, jedná se o neopodstatněné
obavy. Elisp je jazyk jednoduchý a snadno zvládnutelný. Programování
v něm je podstatně jednodušší než třeba programování v TeXu, Perlu
nebo jazyce C a může se je naučit i neprogramátor. Právě s ohledem
na neprogramátory je napsán již zmíněný tutoriál k Elispu. Pokud se
chcete Elisp naučit a vaše ješitnost ostříleného programátora vám
dovolí číst příručky pro začátečníky, zkuste to. Tento tutoriál je
čtivý, obsahuje řadu dobrých rad a Elisp se z něj učí přeci jen
snáze než z referenční příručky.
Poslední ze zmíněných standardních Texinfo příruček k Emacsu je
referenční příručka Elispu. Pozor, je číslována nezávisle na.verzích
Emacsu. Zatím poslední verze (2.4.2) odpovídá Emacsu 19.34 (poslední
verze Emacsu 19). Od té doby vyšel Emacs 20, takže ne vše je v tomto
manuálu zcela aktuální. Elisp se mění méně než uživatelská stránka
Emacsu, přesto není na.škodu si prohlédnout jeho změny pomocí
příkazu C-h n v sekcích "Lisp changes". K významnějším změnám došlo
v souvislosti se zavedením podpory multibytů v Emacsu 20, na což
je potřeba při programování v Elispu brát určitý ohled. Aktuální
informace ke konkrétním proměnným a funkcím lze samozřejmě získat
z jejich dokumentačních řetězců.
Příště
Příště si povíme o tom, co si počít s programy bez info
dokumentace, a jak získat informace o klávesách, proměnných
a funkcích.
výheň