- p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka - - p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst -

LinuxovΘ noviny 10/98

ZaΦφnßme s Emacsem: II

Michal FadljeviΦ, 9. °φjna 1998

Z prvnφho dφlu jsme si odnesli primßrnφ znalost C-x C-c - ukonΦenφ Emacsu. Dnes si krok po kroku probereme nastavenφ Φe╣tiny (pφ╣eme rßdi hßΦky a Φßrky, ne ?:-)), va╣φ klßvesnice, aby vyhovovala, Φtenφ dokumentace v systΘmu Info a pou╛φvßnφ buffer∙.

╚e╣tina ve znakovΘm re╛imu

P°φprava pro prßci v na╣em rodnΘm jazyce mß dv∞ fßze. Za prvΘ je nutnΘ mφt n∞jak² konsolov² ISO Latin 2 font. Nap°φklad jß pou╛φvßm font lat2-16.psf, kter² se mi lφbφ. Ten musφ b²t v p°φpad∞ RH 4.2 umφst∞n v adresß°i /usr/lib/kbd/consolefonts. N∞kam na konec souboru /etc/rc.d/rc.local jsem si p°idal jeho aktivaci pomocφ

$ setfont lat2-16.psf

Tφmto jsme jin²mi slovy nainstalovali na konsoli Φesk² Latin 2 font. Mßm pro tyhle ·Φely soubory s abecedami v r∙znΘm k≤dovßnφ, tak╛e (na konsoli) jednodu╣e vyzkou╣φme:

$ cat abeceda-lat2.txt
A┴BC╚D╧E╔╠FGHI═JKLMN╥O╙PQR╪S⌐T½U┌┘VWXY▌Z«
aßbcΦd∩eΘ∞fghiφjklmn≥o≤pqr°s╣t╗u·∙vwxy²z╛

V²born∞. Funguje to. Druhou fßzφ je Φeskß klßvesnice. Tady nenφ pot°eba instalovat Φeskou klßvesnici do systΘmu (i kdy╛ i to je mo╛nΘ a nechci Vßs od toho odrazovat), ale vystaΦφme s Φeskou klßvesnicφ od Milana Zamazala (pdm@freesoft.cz) v jeho v²bornΘm poΦe╣╗ovacφm balφku emacs-czech. ┌pln∞ ko╣er by asi bylo nainstalovat Φeskou klßvesnici do systΘmu, ale jß s tφm mßm po°ßd v X window systΘmu problΘmy a zatφm mi staΦφ mφt Φeskou klßvesnici v Emacsu. (Ta funguje i na konsoli i v prost°edφ X v²born∞.)

Pro sv∙j Emacs 19.34 jsem si nainstaloval emacs-czech-3.8.tar.gz, kter² je k nalezenφ v adresß°i ftp://sunsite.mff.cuni.cz/i18n/Latin2/emacs/emacs-19 nebo na ftp://ftp.fi.muni.cz/pub/localization/emacs/ nebo na oficißlnφm URL http://www.freesoft.cz/software/emacs/czech/.

P°epn∞te se na root-a, rozbalte balφk t°eba v adresß°i /tmp, p°eΦt∞te si README a lehce v╣e nainstalujete. Pozor, nezapome≥te p°ed zadßnφm make upravit Makefile, je tam pot°eba zm∞nit nastavenφ na

LISPDIR=/usr/share/emacs/site-lisp a
INFODIR=/usr/info

D∙le╛itΘ je (jak se pφ╣e v dokumentaci) takΘ upravit soubor /usr/info/dir. P°idejte si n∞kam na zaΦßtek °ßdek

* emacs-czech:(emacs-czech.info). ╚e╣tina do Emacsu

p°esn∞ tak, jak je napsßno. Tφm je skonΦena instalace Φe╣tiny pod superu╛ivatelem a poslednφ v∞c, kterß je pot°eba ud∞lat (u╛ jako normßlnφ u╛ivatel), je p°idat si do va╣eho souboru /.emacs nßsledujφcφ °ßdky. Ano, to u╛ byste prßv∞ te∩ m∞li d∞lat se mnou :-).

$ cd
$ emacs -nw .emacs

;;; .emacs
(load "czech")
(if (not window-system)
	 (setq cz-redefine-alt-digits t))

V²born∞, jen tak dßl... Nezapome≥te soubor ulo╛it C-x C-s. Tak, te∩ kdy╛ skonΦφte a znovu nastartujete Emacs, m∞li byste bez problΘm∙ vid∞t i psßt ΦeskΘ znaky. Ned∞ste se, ╛e zßpisu naho°e nerozumφte, jß jsem mu z poΦßtku takΘ nerozum∞l a nic tak hroznΘho se ned∞lo. Intuitivn∞ ka╛d² vidφ, ╛e komentß° se uvozuje jednφm nebo vφce st°ednφky (;) a ╛e prvnφ °ßdek aktivuje Milan∙v modul s Φe╣tinou a poslednφ °ßdek pro nßs p°ipravφ ·pravu pro Emacs spu╣t∞n² na konsoli, kde je mal² problΘm s numerick²m blokem.

╚e╣tina v X window systΘmu

Krom∞ v╣eho zmφn∞nΘho v minulΘ kapitole musφte je╣t∞ nainstalovat do X window systΘmu alespo≥ jeden font ISO Latin 2. Toto u╛ bohu╛el p°esahuje rßmec toho textu, tak╛e to ponechßvßm va╣φ aktivit∞. Nenφ to ale nic slo╛itΘho :-) M∙j tip: zkuste nßvod http://www.penguin.cz/czech-howto/.

KonfiguraΦnφ soubor ~/.emacs

Soubor ~/.emacs Φte Emacs podobn∞ jako jinΘ programy v╛dy na zaΦßtku p°i startu, a tak je v²hodnΘ si do n∞j p°idat ve╣kerΘ va╣e soukromΘ nastavenφ - tedy i Φe╣tinu. Bude nejspφ╣ postupn∞ p°ib²vat s tφm, jak budete nßroΦn∞j╣φ a nßroΦn∞j╣φ. To je dob°e. Tak, te∩ m∙╛ete otev°φt

$ emacs -nw abeceda-lat2.txt

a proto╛e ho z°ejm∞ nemßte, zkuste si p∞kn∞ napsat abecedu, jestli to v∙bec jde. V po°ßdku.

╚eskß a US klßvesnice se p°epφnß pomocφ klßvesy Pause nebo ekvivalentn∞ pomocφ sekvence C-x z z, pokud t°eba nemßte na va╣φ klßvesnici momentßln∞ Pause. Ve stavovΘ °ßdce dole vidφte zapφnat a vypφnat indikaci CZ. Funguje mrtvß klßvesa a na konsoli se Φφslice v tΘto konfiguraci pφ╣φ pomocφ M-<Φφslice>. V systΘmu X funguje normßln∞ numerick² blok.

Dokumentace

Toto je nastavenφ, kterΘ vyhovuje nap°φklad mn∞, ale je jasnΘ, ╛e n∞komu t°eba nesedφ. Pokud jste sprßvn∞ instalovali, m∙╛ete se podφvat na dokumentaci k balφku emacs-czech. Ta je psßna v hypertextovΘm systΘmu Info a v Emacsu je samoz°ejm∞ dostupnß a to takto:

C-hi spu╣t∞nφ Info
h spustφ (tak°ka) interaktivnφ v²uku pou╛itφ Info
TAB skßΦe mezi kotvami
╣ipky pohyb v dokumentu
PgUp PgDn pohyb v dokumentu
Space DEL pohyb v dokumentu
Enter skok skrz kotvu, na kterΘ je kursor
u nahoru o jednu ·rove≥ (dokumenty tvo°φ strom)
d nahoru do ·vodnφho menu Info dokumentace
m <jmΘno_sekce> Enter
  skok p°φmo do sekce <jmΘno_sekce>
q ukonΦenφ prohlφ╛enφ Info dokumentace

Tyto klßvesy by vßm pro zaΦßtek m∞ly staΦit a samoz°ejm∞ projd∞te si zmφn∞n² tutorial C-h i h a experimentujte. Kdy╛ si tedy spustφte Info C-h i, m∞li byste vid∞t °ßdek

* emacs-czech:(emacs-czech.info). ╚e╣tina do Emacsu

Napi╣te m emacs-czech Enter a u╛ si Φtete dokumentaci k balφku emacs-czech. Dokumentace mß v Emacsu u╛ tradiΦn∞ velmi vysokou ·rove≥ a opravdu se z nφ dß ledacos nauΦit. Mezi zßkladnφ velkΘ vymo╛enosti Emacsu pat°φ

Obrovskß konfigurovatelnost.

Tak╛e jen s ·ctou ╛asn∞me, kolik mo╛nostφ konfigurace i tento balφk mß. Nap°φklad mo╛nost vytvo°it si va╣i vlastnφ klßvesnici, t°φd∞nφ, konverze znakov²ch sad atd. Velmi praktickΘ v∞ci, kdy╛ vßm r∙zn∞ lidΘ posφlajφ e-maily a soubory p°evß╛n∞ v k≤dovßnφ Win1250 - pak staΦφ v Emacsu dva t°i akordy a hle text je v Latin 2 a m∙╛eme ho lidsky Φφst a ne hßdat, jestli "ΦtvereΦek je nebo °".

Pokud vßm toto nastavenφ nevyhovuje, zano°te se do Info dokumentace a Φtete a Φt∞te a experimentujte s nastavenφm. Podobn∞ jako k balφku emacs-czech, kter² jsme prßv∞ nainstalovali, je v systΘmu Info dostupnß velmi podrobnß dokumentace i k vlastnφmu Emacsu. Zkuste C-h i d m emacs Enter a jste tam. Zde najdete odpov∞∩ skoro na v╣echno, co vßs zajφmß a z Φeho jß vßm tady °φkßm jen zlomky. ToΦφ se vßm hlava, kolik toho je, ╛e? Mn∞ se takΘ toΦila. Ale nemusφte to Φφst v╣echno najednou, ne :-)?

Tak, te∩ s klidn²m srdcem opus╗te dokumentaci Info pomocφ klßvesy q a budeme se v∞novat buffer∙m, jednΘ ze zßkladnφch abstrakcφ v Emacsu.

Buffery

Emacs umis╗uje text do struktury/kontejneru, kterΘmu se °φkß buffer. (Zatφm m∞ nenapadl dobr² p°eklad, tak╛e se tφmto omlouvßm jazykov²m purist∙m - budu pou╛φvat hrub∞ buffer.) P°i b∞hu Emacsu buffery vznikajφ a zanikajφ podle pot°eby. Na obrazovce v pracovnφ oblasti se zobrazujφ okna (window), kde v ka╛dΘm okn∞ se zobrazuje prßv∞ jeden buffer. Je mo╛nΘ, ╛e se n∞jak² dan² buffer prßv∞ nezobrazuje v ╛ßdnΘm okn∞ a takΘ je mo╛nΘ, ╛e se zobrazuje ve dvou a vφce oknech zßrove≥. Pro jednoduchost zatφm p°edpoklßdejme, ╛e mßte na obrazovce jedno velkΘ okno a to nßm zatφm vystaΦφ.

AΦkoliv nejtypiΦt∞j╣φ buffer je samoz°ejm∞ buffer vznikl² naΦtenφm n∞jakΘho souboru, m∙╛ete se p°epφnat a dφvat/pracovat i v ostatnφch (vzpomφnßte na prohlφ╛enφ dokumentace Info - to byly takΘ buffery, kterΘ vßm subsystΘm Info zobrazoval a nechal vßs jimi prochßzet).

Podφvejme se na zßkladnφ buffery, se kter²mi se budete v Emacsu Φasto setkßvat. T°eba hned na zaΦßtku p°i startu Emacsu tφmto zp∙sobem

$ emacs -nw

se ocitnete v bufferu nazvanΘm *scratch* ("zelenß louka"). Je to proto, abyste se nedφvali do prßzdna a mohli zaΦφt t°eba n∞co psßt. Tφmto bufferem se neznepokojujte, automaticky se vytvß°φ a v∞t╣inou ho v∙bec nepou╛φvßte. Dal╣φm je buffer *Messages*, kam Emacs pφ╣e zprßvy, kterΘ vznikly p°i va╣φ prßci a zobrazovaly se v komunikaΦnφm °ßdku dole, ne╛ byly p°epsßny jinou hlß╣kou. ObΦas se hodφ podφvat se, co ╛e za chybovΘ/varovnΘ hlß╣ky se vlastn∞ vypisovaly. Zde jsou p°ehledn∞ p°φkazy pro prßci s buffery a okny:

C-x k zru╣ tento buffer (kill-buffer)
C-x 1 chci jen jedno okno s tφmto bufferem (delete-other-windows)
C-x 2 rozd∞l okno na 2 okna pod sebou
C-x C-b p°epni m∞ do bufferu Buffer List, kter² obsahuje seznam viditeln²ch buffer∙, kterΘ prßv∞ te∩ v Emacsu existujφ. Velmi praktickß v∞c, zvlß╣t∞ kdy╛ editujete t°eba 10 soubor∙, zßrove≥ Φtete po╣tu a podobn∞. V tomto bufferu se m∙╛ete normßln∞ pomocφ ╣ipek a podobn∞ pohybovat, a pokud stisknete Enter p°esunete se do k²╛enΘho bufferu.
C-x b P°epne vßs do dal╣φho bufferu (switch-to-buffer)
C-x o P°epne vßs do dal╣φho okna (pokud mßte na obrazovce vφc ne╛ jedno okno samoz°ejm∞) (other-window)
C-M-v Posu≥ text ve vedlej╣φm okn∞ (scroll-other-window). Tento p°φkaz vypadß pom∞rn∞ zb∞sile, ale uvidφte, ╛e je krajn∞ praktick².

Vyzkou╣ejte si p°eskakovßnφ mezi jednotliv²mi buffery pomocφ C-x C-b, potom vybrat pomocφ ╣ipek a Enter. P°eskakovßnφ mezi jednotliv²mi buffery je jedna z nejΦast∞j╣φch operacφ, proto si ji dob°e prozkou╣ejte.

Minimßln∞ je╣t∞ p°φkaz g je v bufferu Buffer List velmi u╛iteΦn², znamenß obnov obsah tohoto bufferu. Pokud vßs zajφmajφ i dal╣φ p°φkazy v bufferu *Buffer List*, stiskn∞te podle rady ve stavovΘ °ßdce ?. Obrazovka se vßm rozd∞lφ vedvφ a v dolnφ Φßsti u╛ Φtete dokumentaci pou╛itφ tohoto bufferu. Podle rady v dolnφ °ßdce stiskn∞te n∞kolikrßt C-M-v a a╛ budete mφt Φtenφ dost, C-x 1 a je to. Toto je velmi Φastß operace. ╚asto vßm toti╛ r∙znΘ subsystΘmy Emacsu ve chvφli, kdy je vφce mo╛nostφ volby, p°ipravφ pro v∞t╣φ pohodlφ mo╛nosti (completion==dopl≥ovßnφ) tφmto zp∙sobem do vedlej╣φho okna a v²╣e zmφn∞nΘ kombinace klßves vßm umo╛nφ si nabφdku prohlΘdnout a potom nadbyteΦnΘ okno zru╣it.

Soubory

Samoz°ejm∞ nejvφce buffer∙ bude obsahovat soubory, kterΘ budete editovat. Poj∩me rovnou k p°ehlednΘ tabulce nejpou╛φvan∞j╣φch akcφ:

C-x C-f <v²b∞r-souboru> Enter
  NaΦtenφ existujφcφho souboru nebo vytvo°enφ novΘho souborovΘho bufferu (find-file)
C-x C-v <v²b∞r-souboru> Enter
  NaΦtenφ souboru jako nßhrada za tento buffer (find-alternate-file). Toto je ·╛asnß funkce. Popφ╣u reßln² p°φklad. Cht∞l jsem editovat soubor Makefile. Jako sprßvn² lenoch jsem zadßval C-x C-f MA Space Enter. P°elo╛eno do Φe╣tiny - v dialogu v²b∞ru souboru jsem cht∞l napsat jako obvykle tak maximßln∞ 2 znaky ze jmΘna souboru a doplnit automaticky mezernφkem nebo tabulßtorem. Samoz°ejm∞ jsem mφsto Ma zadal MA, tak╛e neboh² Emacs usoudil, ╛e chci nov² soubor a vytvo°il mi jej. Jß chci ale opravdu ten star² dobr² Makefile, tak╛e p°esn∞ v tuhle chvφli u╛iji C-x C-v <v²b∞r-souboru> a u╛ edituji ten soubor kter² jsem cht∞l.
C-x C-s Ulo╛ tento buffer (save-buffer)
C-x s Ulo╛ v╣echny editovanΘ buffery, kterΘ to pot°ebujφ (save-some-buffers)
C-x k Zru╣ tento buffer (kill-buffer)
C-x C-w <novΘ-jmΘno>
  Zapi╣ tento buffer pod nov²m jmΘnem (write-file)
C-x C-c UkonΦenφ seance editoru Emacsu (save-buffers-kill-emacs)

Tak╛e od te∩ u╛ nebudeme zbyteΦn∞ startovat a ukonΦovat Emacs znovu a znovu pro ka╛d² soubor, ale nastartujeme ho prost²m

$ emacs -nw

a pomocφ p°φkaz∙, kterΘ u╛ umφme, m∙╛eme opracovßvat (jß sßm intern∞ °φkßm soustru╛it :-)) spousty soubor∙ za den.

P°ipomφnßm, ╛e nßzvy v zßvorkßch jsou jmΘna funkcφ v Emacsu. Ka╛dß operace v Emacsu je realizovßna funkcφ, kterß se n∞jak jmenuje. To, ╛e t°eba klßvesovß sekvence C-x C-c provede ulo╛enφ zm∞n∞n²ch soubor∙ a konec Emacsu (save-buffers-kill-emacs), je v∞c navßzßnφ (key bindings). Proto se sna╛φm, kde to jde, zmφnit jmΘno funkce. Osv∞tlφm to na p°φkladu: ╪ekn∞me, ╛e jste z n∞jakΘho d∙vodu zvykl²(-ß) na to, ╛e klßvesa F10 ukonΦφ editor a nelφbφ se vßm, ╛e standardn∞ Emacs ukonΦujete pomocφ C-x C-c. V Emacsu to nenφ ╛ßdn² problΘm. StaΦφ p°ipsat n∞kam do souboru ~/.emacs nßsledujφcφ:

 (global-set-key [f10] 'save-buffers-kill-emacs)

Zßv∞rem mal² dßrek. Proto╛e princip lokality a ke╣ovßnφ platφ i pro prßci se soubory (mßm vyzkou╣eno), je velmi praktickΘ ud∞lat si na jednu klßvesu p°epnutφ do posledn∞ editovanΘho bufferu. Tato funkce p°φmo v Emacsu nenφ, ale zde je °e╣enφ, kterΘ jsem p°ed lety n∞kde v News-ovΘ skupin∞ gnu.emacs.help vid∞l (a aktivn∞ si ho nakopφroval :-)). Pokud m∙╛ete Φφst News, pak vßm tuto skupinu v zaΦßtcφch velmi doporuΦuji. Sßm jsem se tam Φtenφm p°φsp∞vk∙ p°iuΦil mnohΘmu. Jen poznßmka - p°ed tφm ne╛ po╣lete svoji otßzku, otev°ete si dokumentaci a hledejte alespo≥ 5 minut + projd∞te si FAQ (C-h F). Z 80% tam v╛dycky najdete odpov∞∩ a u╣et°φte tφm u╛ tak p°etφ╛en²m odbornφk∙m Φas a energii na vlastnφ vylep╣ovßnφ programu. ╪e╣enφ je nßsledujφcφ. Op∞t do ~/.emacs si p°idejte toto:

;;;--------------
(defun toggle-buffers ()
  "Steps to the next buffer in list,
   putting the current buffer
   at the top of the selection list."
  (interactive)
  (switch-to-buffer (other-buffer))
)
(global-set-key [f5] 'toggle-buffers)

Anebo m∙╛ete pou╛φt definici klßvesovΘho makra, kterß je nepatrn∞ mΘn∞ robustnφ, ale jednodu╣╣φ:

(global-set-key [f5] "\C-xb\r")

A p°i p°φ╣tφm startu bude fungovat klßvesa F5 jak jsme cht∞li. Tak╛e na mφsto C-x C-b ╣ipka_dol∙ Enter staΦφ te∩ u╛ jen F5. Podobn²m zp∙sobem se dß ud∞lat spousta kouzel, kterß ╣et°φ vß╣ Φas a mentßlnφ energii :-) *


- p°edchozφ Φßst - nßsledujφcφ Φßst - prvnφ Φßst - - p°edchozφ Φlßnek - nßsledujφcφ Φlßnek - obsah - ·vodnφ strßnka -