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

LinuxovΘ noviny B°ezen 1998

Emacs? Help! (2.Φßst)

Milan Zamazal, 9.b°ezna 1998

Posledn∞ jsme se seznßmili se zßkladnφmi dokumenty popisujφcφmi Emacs a poskytujφcφmi u╛ivateli podrobnou nßpov∞du. Tentokrßt se zam∞°φme na programy, kterΘ kvalitnφ info dokumentacφ nedisponujφ. Povφme si takΘ n∞co o klßvesov²ch p°φkazech a zastavφme se u p°φkaz∙ pro rychlΘ zφskßnφ nßpov∞dy.

Dokumentace k program∙m

Mnohdy se stßvß, ╛e narazφte na zajφmav² balφk, kter² v╣ak nemß vlastnφ info dokumentaci. Co potom?

╪ada emacsovsk²ch program∙ definuje n∞jakΘ m≤dy, a╗ u╛ hlavnφ nebo vedlej╣φ. V p°φpad∞ takov²ch program∙ m∙╛ete vyu╛φt p°φkazu C-h m, kter² zobrazφ dokumentaci pro v╣echny momentßln∞ aktivnφ m≤dy. P°itom popis aktivnφho hlavnφho m≤du obvykle naleznete a╛ na konci v²pisu dokumentace, musφte tedy zobrazenou nßpov∞dou trochu zalistovat, hledßte-li informaci prßv∞ o hlavnφm m≤du.

Naprostß v∞t╣ina program∙ obsahuje struΦn∞j╣φ Φi obsßhlej╣φ popis v ·vodnφch komentß°φch ve svΘm zdrojovΘm textu. Obvykle tam naleznete informaci o instalaci, zßkladnφ nßvod k pou╛itφ a popis nejd∙le╛it∞j╣φch konfiguraΦnφch prom∞nn²ch. Pokud se zdrojov² k≤d nachßzφ n∞kde ve stromu emacsovsk²ch adresß°∙, naleznete jej nejsnßze pomocφ p°φkazu M-x locate-library (tento p°φkaz m∙╛e b²t tΘ╛ u╛iteΦn² v p°φpad∞, kdy si nejste jisti, zda se vßm nßhodou mφsto instalovanΘ nejnov∞j╣φ verze nezavßdφ n∞jak² zapomenut² exemplß° danΘho programu). Pokud neznßte ani jmΘno programovΘho souboru a znßte nap°φklad pouze jmΘno jeho hlavnφ funkce, zkuste C-h f. Tento p°φkaz krom∞ popisu funkce vypφ╣e i jmΘno souboru, ze kterΘho byla naΦtena. To m∙╛e b²t spojeno s urΦit²mi obtφ╛emi:

  • M∙╛ete se dozv∞d∞t, ╛e funkce je built-in. Pak nenφ definovßna v ╛ßdnΘm elispovskΘm souboru, n²br╛ je definovßna ve zdrojov²ch textech v jazyce C.
  • M∙╛ete se dozv∞d∞t, ╛e se jednß o compiled Lisp function, ale u╛ ne to, kde se jejφ definice nachßzφ. To znamenß, ╛e funkce je sice elispovskß, ale zakompilovanß v binßrce Emacsu kv∙li sdφlenφ pam∞ti nebo byla definovßna dynamicky v t∞le jinΘ funkce a tudφ╛ nenφ znßm soubor s jejφ definicφ.

V druhΘm p°φpad∞ lze stßle je╣t∞ pou╛φt tags. Mßte-li Emacs instalovßn v adresß°i directory, vygenerujete p°φkazem

rm -f TAGS
find directory -name '*.el' -print | xargs etags -a
index v╣ech elispovsk²ch prom∞nn²ch a funkcφ definovan²ch v distribuci Emacsu (musφte mφt ov╣em samoz°ejm∞ instalovßny zdrojovΘ *.el soubory). Kdykoliv pak hledßte n∞jakou funkci nebo prom∞nnou ze standardnφ distribuce Emacsu, naleznete ji velmi rychle p°φkazem M-.. Pozor, n∞kdy musφte pro nalezenφ sprßvnΘho v²skytu aplikovat hledßnφ opakovan∞ prost°ednictvφm C-u M-..

ZdrojovΘ texty jsou zajφmavΘ nejen z hlediska ·vodnφch komentß°∙. PokroΦilej╣φ u╛ivatel si v nich najde zajφmavΘ defvary. Pro u╛ivatele vlßdnoucφ (na prvnφ pohled magickou) schopnostφ programovat v Elispu jsou pak zdrojovΘ texty prav²m pokladem. Lze v nich nalΘzt nesΦetnΘ mno╛stvφ tip∙ a zajφmavostφ a nez°φdka do nich Φlov∞k nahlΘdne prßv∞ proto, aby zjistil "jak se n∞co d∞lß". Programujete-li v Elispu a nem∙╛ete najφt nßvod pro n∞jakou v∞c po manußlech, zkuste si vzpomenout, kde jste odpovφdajφcφ chovßnφ ji╛ vid∞li. Nßvod pak najdete ve zdrojov²ch textech p°φslu╣nΘho programu. (Pro neznalce Elispu to celΘ m∙╛e znφt jako pokus o vtip, ale skuteΦnost je jinß. Elisp je velmi Φiteln² jazyk a nalΘzt n∞co v jeho zdrojov²ch textech je obvykle daleko snaz╣φ, ne╛ si mo╛nß myslφte.)

Vra╗me se zpßtky k b∞╛nΘmu u╛ivateli. M∙╛e se stßt, ╛e narazφte na rozsßhl² balφk se ╣patnou dokumentacφ (jako je nap°φklad w3) a pot°ebujete jej zkonfigurovat. Pokud autor disponuje alespo≥ elementßrnφ mφrou ·cty k u╛ivateli, tak dokumentuje p°inejmen╣φm konfiguraΦnφ prom∞nnΘ pomocφ customize. (Pokud nevφte, co to customize je, nahlΘdn∞te do menu "Help" a zvolte odpovφdajφcφ polo╛ku; pozor, standardn∞ je p°φtomna a╛ v Emacsu 20.) Na prvnφ pohled se m∙╛e zdßt, ╛e customize je zde pouze pro u╛ivatele, kte°φ si neumφ zkonfigurovat Emacs editacφ souboru ~/.emacs. Ve skuteΦnosti v╣ak mß tento mechanismus i v²znamnou vedlej╣φ funkci - naleznete zde toti╛ hierarchicky uspo°ßdanΘ konfiguraΦnφ prom∞nnΘ s popisem a mo╛nostφ je ihned nastavit a p°φpadn∞ i ulo╛it. A pak u╛ vlastn∞ ╛ßdnou dal╣φ dokumentaci ke konfiguraci balφku podporujφcφho customize nepot°ebujete!

PouΦenφ pro tv∙rce elispovsk²ch program∙:

  • SvΘ programy v ·vodnφch komentß°φch struΦn∞ dokumentujte.
  • U╛ivatelskΘ prom∞nnΘ deklarujte pomocφ defcustom, nikoliv pomocφ defvar.
  • Pokud nenφ ji╛ z nßzvu funkce Φi prom∞nnΘ zcela z°ejmΘ, k jakΘmu ·Φelu slou╛φ, nezapome≥te ji vybavit dokumentaΦnφm °et∞zcem. To platφ i pro trivißlnφ funkce - u╣et°φ to hledßnφ definice funkce p°i Φetb∞ zdrojov²ch text∙.
  • ZejmΘna bezpodmφneΦn∞ dokumentujte v╣echny interaktivnφ funkce a u╛ivatelskΘ prom∞nnΘ.
  • Podrobn∞ dokumentujte m≤dy, kterΘ vß╣ program definuje.

Klßvesy

╚ast²m problΘmem je vyznat se v pom∞rn∞ poΦetn²ch klßvesov²ch kombinacφch.

NejΦast∞j╣φ otßzkou b²vß: "Co tato klßvesovß zkratka vlastn∞ d∞lß?" Nechcete-li b²t obt∞╛ovßni dlouh²mi v²klady, pou╛ijte C-h c. To se hodφ zejmΘna v p°φpad∞, kdy si chcete p°ipojit funkci t°eba na n∞jakou funkΦnφ klßvesu a pot°ebujete znßt jejφ jmΘno pro zapsßnφ odpovφdajφcφ definice do ~/.emacs. Pokud chcete zφskat kompletnφ nßpov∞du k funkci danΘ klßvesy, pou╛ijte C-h k.

Pokud naopak nevφte, pomocφ kter²ch klßves lze n∞jakou funkci vyvolat, m∙╛ete zkusit:

  • Podφvat se do menu. Lze-li funkci vyvolat klßvesovou zkratkou, mß tuto zkratku p°φslu╣nß polo╛ka menu u sebe uvedenu.
  • Funkci provΘst prost°ednictvφm zadßnφ jejφho plnΘho jmΘna po M-x. Je-li dosa╛itelnß i klßvesovou zkratkou, Emacs vßs na to po jejφm provedenφ (v Emacsu 19 p°ed jejφm provedenφm) upozornφ.
  • Pou╛φt p°φkaz C-h w. V²hodou tohoto p°φkazu je to, ╛e vßm zobrazφ *v╣echny* klßvesovΘ kombinace, pomocφ kter²ch lze zadan² p°φkaz vyvolat.

╚asto se tΘ╛ stßvß, ╛e n∞co necht∞n∞ zmßΦknete a ono to provede zajφmav² p°φkaz, kter² dosud neznßte. Rßdi byste v∞d∞li, kter² p°φkaz to byl, proto╛e je vßm ihned jasnΘ, ╛e jej te∩ budete naprosto nezbytn∞ a opakovan∞ pot°ebovat. Pom∙╛e vßm p°φkaz C-h l, kter² zobrazφ poslednφch 100 stisknut²ch klßves. Mimochodem, vφte, proΦ nenφ dobrΘ odchßzet od neuzamΦenΘho Emacsu, ve kterΘm jste se prßv∞ p°ihlßsili na vzdßlen² poΦφtaΦ se zadßnφm hesla?

N∞kte°φ lidΘ majφ vyvinut∞j╣φ smysl pro systematiΦnost. Ti se pak s nßhodn²m bouchßnφm do klßvesnice nespokojφ a cht∞jφ vid∞t v╣echno najednou. Pro ty je ideßlnφ p°φkaz C-h b. Ano, je to trochu p°ehnanΘ, ani tento p°φkaz nem∙╛e zobrazit spoΦetn∞ mnoho p°φkaz∙ Emacsu, tak╛e zobrazφ pouze aktußln∞ dostupnΘ klßvesovΘ kombinace. Ty jsou samoz°ejm∞ zßvislΘ na momentßln∞ aktivnφch hlavnφch a vedlej╣φch m≤dech. Pokud vßs zajφmajφ pouze p°φkazy zaΦφnajφcφ urΦit²m prefixem, m∙╛ete si je nechat vypsat zadßnφm prefixu nßsledovanΘho stiskem C-h. Nap°φklad p°φkazy pro prßci s registry, zßlo╛kami a obdΘlnφkov²mi bloky si vypφ╣ete pomocφ C-x r C-h. TypickΘ p°φkazy aktußlnφho hlavnφho m≤du pak pomocφ C-c C-h.

Prom∞nnΘ a funkce

ZejmΘna p°i editaci souboru ~/.emacs Φi programovßnφ v Elispu vyu╛ijete p°φkazy C-h f a C-h v zobrazujφcφ dokumentaci zadanΘ funkce (p°φpadn∞ makra) nebo prom∞nnΘ. Neocenitelnou v²hodou t∞chto p°φkaz∙ je to, ╛e poskytujφ p°φstup k nejaktußln∞j╣φ a obvykle i nej·pln∞j╣φ dokumentaci k b∞╛n²m objekt∙m. Pokud mßte p°i programovßnφ v Elispu notorickΘ problΘmy zapamatovat si argumenty funkcφ, pou╛ijte "eldoc-mode". Tip: P°φkaz C-h f v∞t╣inou nabφzφ identifikßtor z poslednφho volßnφ funkce p°ed kurzorem, nikoliv slovo pod kurzorem, m∙╛ete si tedy mnohdy u╣et°it pohyb kurzoru.

Jednφm z nejmocn∞j╣φch p°φkaz∙ nßpov∞dy Emacsu je apropos. Apropos p°φkazy vßm umo╛nφ vyhledat funkci nebo prom∞nnou podle regulßrnφho v²razu. Zadßte regulßrnφ v²raz a Emacs vßm vypφ╣e v╣echny funkce a prom∞nnΘ, kterΘ znß a kterΘ tomuto v²razu odpovφdajφ. Kliknutφm nebo stiskem RET na danΘ polo╛ce z vyhledanΘho seznamu se vßm zobrazφ dokumentace k odpovφdajφcφ funkci nebo prom∞nnΘ. Apropos existuje ve t°ech zßkladnφch variantßch:

  • C-h a vyhledßvß mezi u╛ivatelsk²mi p°φkazy (interaktivnφ funkce).
  • C-u C-h a vyhledßvß mezi u╛ivatelsk²mi p°φkazy a u╛ivatelsk²mi prom∞nn²mi.
  • M-x apropos prohledßvß cel² jmenn² prostor.
V╣e, co najdete pomocφ C-h a, naleznete i pomocφ M-x apropos. Av╣ak C-h a v²razn∞ omezuje mno╛stvφ nalezen²ch objekt∙, tak╛e se m∙╛ete vyhnout efekt∙m znßm²m z odpov∞dφ vyhledßvacφch stroj∙ na Webu po zadßnφ p°φli╣ obecnΘho dotazu.

Na prvnφ pohled nemusφ b²t z°ejmΘ, o jak mocn² nßstroj se jednß. Kdo se ale nauΦφ apropos efektivn∞ pou╛φvat, u╣et°φ si spoustu hledßnφ v manußlech a ve zdrojov²ch textech. Nap°φklad pot°ebujete obrßtit po°adφ °ßdk∙ v souboru. StaΦφ si uv∞domit, ╛e s obrßcen²m po°adφm by mohlo mφt n∞co spoleΦnΘho anglickΘ slovo "reverse". Zjevn∞ by se m∞lo jednat o u╛ivatelsk² p°φkaz, tak╛e zadßte C-h a reverse RET a ve zobrazenΘm v²sledku ji╛ odpovφdajφcφ funkci snadno naleznete. Nebo provßdφte sofistikovanou konfiguraci Gnus a pot°ebujete pro svΘ ·Φely najφt n∞jak² vhodn² hook. Pou╛ijete M-x apropos ^\(gnus\|message\|nn\).*hook RET stoprocentnφ jistotu, ╛e p°ed sebou vidφte kompletnφ seznam v╣ech hook∙, kterΘ m∙╛ete pou╛φt. Nebo vßs zajφmajφ mo╛nosti BibTeX m≤du. Aplikujete tedy C-u C-h a ^bibtex RET. (Tento p°φklad je pon∞kud um∞l², spφ╣e byste na tomto mφst∞ pou╛ili customize.)

Pozor na malou zßludnost: N∞kterΘ programy jsou zavßd∞ny prost°ednictvφm autoload mechanismu a╛ p°i vy╛ßdßnφ jejich funkcφ. Do doby jejich zavedenφ ╛ßdn² z p°φkaz∙ pro popis funkce nebo prom∞nnΘ a tφm pßdem ani apropos nevφ o existenci v∞t╣iny funkcφ a prom∞nn²ch definovan²ch v tomto balφku. Chcete-li proto hledat nap°φklad n∞co t²kajφcφ se Gnus, je dobrΘ nejprve Gnus spustit a chvφli s nimi pracovat, proto╛e teprve potom je naΦtena v∞t╣ina programov²ch soubor∙ Gnus a nebudete se marn∞ sna╛it najφt dosud nezavedenou prom∞nnou. TotΘ╛ platφ pro p°φklad s BibTeXem - p°ed aplikacφ apropos nejprve otev°ete libovoln² (t°eba prßzdn²) .bib soubor.

PouΦenφ pro programßtory v Elispu:

  • Dbejte na vhodnou volbu jmen prom∞nn²ch a funkcφ, m∞jte na pam∞ti situaci u╛ivatele pou╛φvajφcφho apropos.
  • Rozli╣ujte internφ a u╛ivatelskΘ prom∞nnΘ pomocφ hv∞zdiΦky v dokumentaΦnφm °et∞zci funkce defvar Φi makra defcustom.
  • P°eΦt∞te si sekci "Documentation Tips" v manußlu Elispu. Budete pak schopni lΘpe dodr╛ovat dokumentaΦnφ konvence, kterΘ usnadnφ situaci u╛ivateli, tj. tomu, pro koho dokumentaci pφ╣ete.

P°φ╣t∞

V zßv∞reΦnΘ Φßsti tohoto miniserißlu si °ekneme, jak hledat programy slou╛φcφ k ╛ßdanΘmu ·Φelu, kde hledat dal╣φ pomoc a takΘ malinko poradφme vφajist∙m. *


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