- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah -

LinuxovΘ noviny ┌nor 1998

Emacs? Help! (1.Φßst)

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. *


- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah -