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ň