<!doctype linuxdoc system>
<!-- $Id: emacs-si.sgml,v 1.7.1.18 2000/04/27 11:39:54 kosir Exp $ -->
<article>
<title>Spis HOWTO za začetnike v Emacsu</title>
<author>
Jeremy D. Zawodny: <htmlurl url="mailto:jzawodn@wcnet.org" name="jzawodn@wcnet.org">
</author>
<date>
14. oktober, 1999 ($Različica: 1.7 $)
</date>

<abstract>

Ta spis seznanja uporabnika operacijskega sistema Linux z
urejevalnikom Emacs. Predpostavlja, da uporabnik pozna urejevalnik
<tt>vi</tt> ali podobnega. Najnovejša različica tega spisa je dostopna v
spletu na naslovu <htmlurl url = "http://www.wcnet.org/jzawodn/emacs/"
name = "http://www.wcnet.org/jzawodn/emacs/">.

</abstract>

<toc>

<!-- ********************************************* -->

<sect>Uvod <label id="uvod">

<sect1>Copyright

<p>Copyright &copy; 1998--1999 Jeremy D. Zawodny. Dovoljenje za
razširjanje in spreminjanje tega dokumenta podeljuje splošno dovoljenje GNU
(General Public License). Kopija dovoljenja je dostopna na strani
<htmlurl url = "http://www.gnu.org/copyleft/gpl.html" name =
"http://www.gnu.org/copyleft/gpl.html">

</sect1>

<sect1>Ciljna skupina in namen

<p>Spis je namenjen uporabnikom sistema Linux, tistim, ki bi se radi
naučili uporabljati urejevalnik Emacs. Nastajati je začel kot
kratka predstavitev na toleškem
območnem srečanju uporabnikov Linuxa (Toledo Area Linux User Group)
<htmlurl url = "http://www.talug.org/" name =
"http://www.talug.org/">. Pozneje pa se je razrasel zaradi pomoči
skupnosti, o čemer priča tudi razdelek z zahvalami.

<p>Posebej moram poudariti, da ni v spisu skoraj nič, kar bi veljalo
le za Linux, vse se nanaša na vse vrste Unixov in celo na Emacs,
ki teče v okolju Microsoft Windows. A ker je ta spis del linuxovskega
dokumentacijskega projekta (Linux Documentation Project), vztrajam, da je 
namenjen uporabnikom Linuxa, saj je nastal posebej zanje.

<p>Tisti, ki vam je ime GNU/Linux ljubše kakor preprosto
,,Linux'' (preberite si <htmlurl
name="http://www.gnu.org/gnu/linux-and-gnu.html"
url="http://www.gnu.org/gnu/linux-and-gnu.html">, pa boste izvedeli,
zakaj naj bi sploh kdo razločeval med tem dvojim), pa v mislih z nizom
GNU/Linux nadomestite vsako omembo Linuxa v tem spisu. Ne
nasprotujem utemeljitvi in bistvu vašega pomisleka, vendar ne čutim
potrebe, da bi zapisal ,,GNU/Linux''.

</sect1>

<sect1>Kaj je Emacs?

<p>Emacs pomeni različnim ljudem različno. Odvisno od tega,
koga boste vprašali, boste morebiti dobili naslednje odgovore:

<itemize>

<item>urejevalnik besedil,
<item>odjemalec za elektronsko pošto,
<item>pregledovalnik novičarskih skupin,
<item>program za stavljenje besedila,
<item>vera,
<item>integrirano razvojno okolje,
<item>karkoli bi si želeli, da je!

</itemize>

<p>Pretvarjajmo se, da je Emacs urejevalnik besedila, in
sicer neverjetno zmogljiv urejevalnik besedila, pozneje pa bomo
poglobljeno obravnavali to vprašanje. Emacs je napisal Richard Stallman
(ustanovitelj fundacije za prosto programje, Free Software Foundation
<htmlurl url="http://www.fsf.org/" name="http://www.fsf.org/">, in
projekta GNU <htmlurl url="http://www.gnu.org/"
name="http://www.gnu.org/">) in ga še vedno vzdržuje.

<p>Emacs je eden najbolj razširjenih in zmogljivih urejevalnikov v
Linuxu (in Unixu) in je po priljubljenosti takoj za urejevalnikom
<bf>vi</bf>. Slovi po velikanskem naboru funkcij, zmožnosti preprostega
prilagajanja in po tem, da v njem ni napak. Obsežni nabor funkcij in
zmožnost prilagajanja sta posledica tega, kako je bil Emacs
načrtovan in izveden. Ne da bi se nameraval spuščati v podrobnosti, trdim, da
Emacs ni <bf>le</bf> urejevalnik. Velik del ga je napisanega v
programskem jeziku <bf>lisp</bf>. Jedro Emacsa je v jeziku C napisan
popolnoma funkcionalen tolmač za jezik lisp in le najosnovnejši in
nizkonivojski del predstavlja prevedena koda C, večina Emacsove kode
pa je napisana v jeziku lisp. Trdimo lahko, da je v Emacs vgrajen
celoten programski jezik, njegovo kodo pa lahko po potrebi
spreminjamo, prilagajamo, dodajamo in tako prikrojujemo vedenje Emacsa.

<p>Emacs je hkrati tudi eden najstarejših urejevalnikov. Dejstvo,
da ga zadnjih dvajset let (?) uporabljajo tisoči programerjev, je
razlog, da je zanj na voljo veliko dodatnih paketov. Ti paketi
vam omogočajo, da postorite tisto, o čemer se Stallmanu, ko je Emacs
začel pisati, še sanjalo ni. Več o tem pa v nadaljevanju.

<p>Na voljo so vam številna spletišča in spisi, ki vam dajo boljši pregled
nad Emacsom, njegovo zgodovino in drugim kakor pisanje, ki je pred vami. Raje
kot da bi pisaril o že znanem, vam svetujem, da si oglejte
nekatera od mest v razdelku <ref id = "drugi_viri" name =
"Drugi viri">.

<sect2>Prilagoditve in različice

<p>Omeniti je treba, da imamo dva različna urejevalnika: GNU
Emacs in XEmacs. Oba izvirata iz skupnega prednika in večina funkcij jima
je skupna. To besedilo se nanaša na GNU Emacs (izrecno na različico
20.3), a večina zapisanega velja tudi za XEmacs in zgodnejše različice
GNU Emacs. V besedilu se sklicujem preprosto na ,,Emacs'' in to 
upoštevajte.

</sect2>

<sect2>Kako dobiti Emacs?

<p>Emacsa ni težko dobiti. Če uporabljate razširjeno distribucijo
Linuxa, kot so Debian, RedHat, Slackware ali podobne, ji je Emacs
zelo verjetno že priložen kot paket, ki ga namestimo z našega sredstva za
distribucijo. Če Emacsa nimate, si lahko priskrbite njegovo izvirno kodo in jo
sami prevedete. Obiščite spletno stran <htmlurl url =
"http://www.gnu.org/software/emacs/emacs.html" name =
"http://www.gnu.org/software/emacs/emacs.html">, na katerem boste našli
točna navodila, kako ga dobiti.

</sect2>

</sect1>

</sect>

<!-- ********************************************* -->

<sect>Uporaba Emacsa <label id="uporaba_emacsa">

<sect1>Zagon in izhod iz Emacsa

<p>Kot nov uporabnik bomo Emacs verjetno najprej hoteli pognati in
preskusiti. A ko bomo enkrat v njem in ga bomo želeli zapustiti, tega
najbrž sprva ne bomo znali. Če ga nismo še nikoli uporabili, ga
poskusimo pognati prav zdaj. V svoji ukazni lupini za pozivnikom
vpišimo <tt>emacs</tt> in pritisnimo tipko Enter. Emacs bi se moral
zagnati. Če se ne zažene, bodisi ne leži na poti do programov bodisi ni
nameščen.

<p>Ko pa smo uspešno pognali Emacs, se moramo naučiti, kako ga
zapustiti. Vtipkati moramo ukaz <tt>C-x C-c</tt>. Pisava <tt>C-x</tt>
pomeni, da pritisnemo tipko <tt>Ctrl</tt>, jo pridržimo, nato
pritisnemo še tipko <tt>x</tt>, pa popustimo <tt>x</tt> in še
<tt>Ctrl</tt>. V zgornjem primeru moramo za prvim delom pritisniti in
pridržati še tipko <tt>Ctrl</tt> in pritisniti <tt>c</tt>, da
zapustimo urejevalnik.

<p>Morebiti se nam bodo zdeli Emacsovi ukazi sprva čudni, nenavadni in
celo nerodni, še posebej, če smo vajeni urejevalnika <tt>vi</tt>. V
nasprotju z urejevalnikom <tt>vi</tt> Emacs nima posebnih načinov za
vnašanje besedila in ukazov.

<p>Na kratko: ukaz <tt>emacs</tt> požene urejevalnik Emacs. Z
Emacsovim ukazom <tt>C-x C-c</tt> urejevalnik zapustimo.

<sect2>Kaj vidimo?

<p>Ko poženemo Emacs, njegov izpis zasede vse okno X ali zaslon, če ga
poganjamo v konzoli. Na vrhu opazimo menujsko letev, na sredini 
nekaj besedila in nekaj vrstic na dnu.

<p>Zaslon je podoben tej skici z znaki:

<verb>
+----------------------------------------------------------------------+
|Buffers Files Tools Edit Search Mule Help                             |
|                                                                      |
|Welcome to GNU Emacs, one component of a Linux-based GNU system.      |
|                                                                      |
|                                                                      |
|                                                                      |
| ...                                                                  |
|                                                                      |
|---1:---F1  *scratch*         (Lisp Interaction)--L1--All-------------|
|For information about the GNU Project and its goals, type C-h C-p.    |
+----------------------------------------------------------------------+
</verb>

Različica v slovenskem jeziku pa je taka:
<verb>
+----------------------------------------------------------------------+
|Buffers Files Tools Edit Search Mule Help                             |
|                                                                      |
|Dobrodošli v GNU Emacs, sestavnem delu sistema GNU v Linuxu.          |
|                                                                      |
|                                                                      |
|                                                                      |
| ...                                                                  |
|                                                                      |
|---1:---F1  *scratch*         (Lisp Interaction)--L1--All-------------|
|Pritisnite C-h C-p, da dobite opis projekta GNU in njegovega namena.  |
+----------------------------------------------------------------------+
</verb>

<p><bf>Opomba:</bf> Emacs navadno zasede celotno okno ali zaslon.
Zgornjo skico sem okrnil, da bi jo lahko prikazal na omejenem
prostoru. Ko bomo prvič pognali Emacs, bomo opazili pozdravno
sporočilo. Da bi prihranil prostor, sem njegovo vsebino izpustil in jo
nadomestil z znaki ,,<tt>...</tt>''. Pozdravno sporočilo navaja
različico Emacsa, ki ga uporabljamo, in nas vabi, da si ogledamo
dostopno pomoč na zvezi.

<sect3>Menujska letev

<p>Vrhnja vrstica v Emacsovem vmesniku je menujska letev (ang. menu
bar). Če poganjamo Emacs v oknih X, se bodo izbire na menuju vedle kot običajni menuji (ang. pull-down menu), do katerih pridemo 
z miško. Drugače pa moramo za dostop do menujev uporabiti tipkovnico z
ustreznimi bližnjicami tipk, o čemer tu ne bomo govorili.

</sect3>

<sect3>Vrstica stanja in pogovorni vmesnik

<p>Zgornja od zadnjih dveh vrstic Emacsovega vmesnika je 
letev stanja (ang. status bar). Na njej so podatki o vmesniku, v katerem delamo,
o načinu dela v trenutnem vmesniku in podobne koristne
informacije. Zaenkrat se zadovoljimo s tem, da se zavedamo obstoja te
letve.

<p>Najnižja vrstica se imenuje <bf>pogovorni vmesnik</bf>
(ang. mini-buffer). Od osrednjega vmesnika (ang. main buffer) ga na
zaslonu loči pravkar opisana letev stanja. Pogovorni vmesnik si
lahko predstavljamo kot Emacsovo ukazno vrstico. Vanj vnašamo ukaze, ki
jih dajemo Emacsu, in v njem nam Emacs izpisuje svoja sporočila in
odgovore na naše ukaze.

<p>Ugotovili boste, da tistemu, kar sem pravkar imenoval 
letev stanja (ang. status bar), Emacsova dokumentacija pravi načinovna
vrstica (ang. mode line). Tudi Emacs prikazuje podatke o
načinu ali načinih dela v trenutnem vmesniku pa tudi trenutni datum
in čas, zaporedno številko vrstice, velikost datoteke, torej skoraj
vse, kar bi si želeli videti v tej vrstici.

</sect3>

</sect2>

</sect1>

<sect1>Nekaj o terminologiji

<p>Ta razdelek obravnava najosnovnejšo terminologijo
Emacsa. Treba jo je poznati, da bomo lahko brali o Emacsu in ga
uporabljali.

<sect2>Vmesniki in datoteke

<p> Datoteka, ki jo
odpremo v Emacsu, v primerjavi z nekaterimi drugimi urejevalniki ne ostane odprta ves čas dela. Namesto tega jo Emacs
prebere v <bf>vmesnik</bf> (ang. buffer) v pomnilniku. Ko urejamo
datoteko, se njena vsebina na disku ne spremeni, dokler vsebine
vmesnika na shranimo na disk. Tako delo ima prednosti in
slabosti, a trenutno je pomembno le to, da razumemo ta pristop.

<p>Posledica tega je, da isto besedo uporabljamo v Emacsovi
dokumentaciji, načinih, paketih in tako naprej. Pomeni nam trenutno
vsebino datoteke v pomnilniku. Eh, omeniti je treba, da vmesnik ni
nujno povezan s katerokoli datoteko na disku. Velikokrat Emacs
ustvari vmesnik, v katerega bo shranil izhod ukazov, ki smo jih
izvedli. Nekateri vmesniki bodo vsebovali izpis ukaza, seznam izbir,
med katerimi lahko izbiramo, in podobno.

</sect2>

<sect2>Točka in območje

<p>V Emacsovem žargonu bomo velikokrat slišali za <bf>točko</bf>
(ang. point) ali o njej brali. Na splošno je točka utripalka
(ang. cursor). Natančen razloček med točko in utripalko na začetku
verjetno ni odločilen. Če vas muči radovednost, pa si predstavljajte razliko
takole: utripalka je vidni prikaz točke. Utripalka je vselej vidna na
določenem mestu trenutnega vmesnika. Točka pa, nasprotno, biva v
prostoru <em>med</em> dvema znakoma trenutnega vmesnika. Če vidimo
utripalko na črki ,o' besede ,,zob'', to pomeni, da je točka v resnici
med črkama ,z' in ,o'.

<p> Emacs tako kot številni sodobni urejevalniki omogoča urejanje vmesnika z
naslednjimi funkcijami: zamikanje (ang. indent), črkovanje
(ang. spell-check), preoblikovanje (ang. reformat), izrezovanje
(ang. cut), prepisovanje (ang. copy), lepljenje (ang. paste) in
podobno na delu besedila trenutnega vmesnika.  Besedilo lahko označimo (ang. mark)
s poudarjanjem (ang. highlight), tako da uporabimo
miško, nato pa izvedemo ukaz le na izbranem območju besedila. Tak del
besedila se v Emacsu imenuje <bf>območje</bf> (ang. region).

</sect2>

<sect2>Okna

<p>Res je, nadaljevanje bo zmedlo marsikoga, ki je že uporabljal
grafični vmesnik. Spomniti pa se moramo, da je bil Emacs razvit,
veliko <em>preden</em> so postali priljubljeni grafični vmesniki in
okenski upravljalniki.

<p><bf>Okno</bf> (ang. window) v Emacsu je območje na zaslonu, v njem
pa je prikazan vmesnik. Ko Emacs prvič poženemo, je na zaslonu le
eno okno. Nekateri ukazi (denimo pomoč ali dokumentacija) v Emacsu na Emacsovem zaslonu 
odpro dodatna začasna okna.

<p>Emacsovo okno nima nič skupnega z okni X v smislu grafičnega
vmesnika. Odpremo lahko dodatna okna X, v katerih prikažemo Emacsove
vmesnike, denimo za vzporedno primerjavo vsebine dveh datotek, ta nova
okna X pa se imenujejo v Emacsovem žargonu <bf>okviri</bf>. Berite naprej!

</sect2>

<sect2>Okviri

<p>V Emacsu je <bf>okvir</bf> (ang. frame) ločeno okno X, ki prikazuje
neki Emacsov vmesnik. A vsa so del iste Emacsove seje. Obnašajo se
skoraj tako, kot če v Netscapovem Navigatorju uporabimo ukaz Alt+N.

</sect2>

</sect1>

<sect1>Osnovno o tipkovnici

<p>Ta razdelek opisuje osnove igranja na tipkovnico v Emacsu. Kot pri večini zmogljivih urejevalnikov nas tudi pri Emacsu od vsega, kar lahko v njem
postorimo, loči le nekaj pritiskov na tipke.

<p>Če ste uporabnik urejevalnika <tt>vi</tt>, ste se nekaj časa morali
privajati na tipke <tt>k, j, l, h</tt>, s katerimi se v njem pomikamo
za vrstico navzgor ali navzdol ali za znak naprej ali
nazaj. Priznajmo, da smo potrebovali nekaj ur ali tednov, da smo se
jim privadili in se začeli z njimi brez težav premikati po
datoteki.

<p>Emacs se v tem prav nič ne razlikuje. Tudi tu se moramo naučiti različnih
pritiskov na tipke in ukazov. Kakor v <tt>vi</tt> se moramo naučiti le
nekaj osnov, pa že lahko postorimo večino dela. Sčasoma se lahko
priučimo tudi drugih ukazov in si razširimo znanje, tako da
znamo vedno hitreje opraviti delo.

<sect2>Ukazne tipke (Meta, Esc, Control in Alt)

<p>Kot se bomo kmalu naučili, Emacs zelo pogosto uporabljamo z
večtipkovnimi kombinacijami, akordi. Ker Emacs ni načinovni
urejevalnik (ang. modal editor), kakršen je <tt>vi</tt>, nam ni
treba pomniti, kdaj smo v ,,ukaznem'' (ang. command mode) ali
,,urejevalnem'' načinu (ang. editing mode), da bi premaknili utripalko
ali izvedli ukaz. Zato večinoma le pritisnemo pravo zaporedje ukazov
in Emacs nas (navadno) takoj uboga.

<p>Tipke, ki jih Emacs uporablja najpogosteje, so v dokumentaciji
navedene takole: <tt>C</tt> za tipko Control ali Ctrl in <tt>M</tt> za
tipko Meta. Večina sodobnih osebnih računalnikov ima eno ali
več tipk, ki so označene s <tt>Ctrl</tt>, le redki imajo tipko z
oznako <tt>Meta</tt>. V mislih vselej nadomestimo tipko Meta z eno od
tipk <tt>Esc</tt> ali <tt>Alt</tt>.  Večinoma se
tipki Esc in Alt vedeta enako.

<p>Kadarkoli potemtakem vidite v Emacsovi dokumentaciji sklic na
<tt>C-x f</tt>, to pomeni ,,pritisnite Control-x in zatem tipko f''. In
če vidite omenjeno kaj takega kot <tt>M-x shell</tt>, to v resnici
pomeni ,,pritisnite alt-x in vpišite besedo shell''.

<p>Za začetnika zelo koristen ukaz je <tt>M-x apropos</tt> ali,
krajše, <tt>C-h a</tt>. Ukaz apropos preišče Emacsovo dokumentacijo
na zvezi in poišče vse funkcije, katerih imena ustrezajo regularnemu
izrazu, ki smo ga vpisali. Po tej poti na primer zlahka poiščemo vse
ukaze, ki so povezani z okviri (ang. frame). Preprosto vnesemo
<tt>C-h a</tt> in vpišemo <tt>frame</tt>.

</sect2>

<sect2>Premikanje po vmesniku

<p>Zdaj ko vemo, kaj pomenijo čudne okrajšave zaporedij tipk, je
čas, da si ogledamo seznam najpogostejših ukazov za premikanje po
vmesniku:

<verb>
tipke       učinek
-----------------------------------
C-p         za vrstico navzgor 
C-n         za vrstico navzdol 
C-f         za znak naprej 
C-b         za znak nazaj 
C-a         začetek vrstice
C-e         konec vrstice
C-v         za celotno stran navzdol 
M-v         za celotno stran navzgor 
M-f         za besedo naprej 
M-b         za besedo nazaj 
M-<         začetek vmesnika
M->         konec vmesnika
C-g         ustavi trenutni ukaz
-----------------------------------
</verb>

<p>In natanko tako, kot bi si tudi želeli, smerne tipke (tiste s puščicami) navadno
delujejo v skladu z našimi pričakovanji. Tipka <tt>vračalka</tt>
(ang. backspace) pa morebiti ne. A to je druga zgodba. <tt>:-(</tt>

</sect2>

<sect2>Najpomembnejši ukazi

<p>Zdaj ko se znamo premikati po vmesniku, ali smo že
pripravljeni tudi za odpiranje in shranjevanje datotek? Morebiti celo
za iskanje? Da, tu bomo našli teh nekaj najpomembnejših ukazov.

<p>Preden pa se zapodimo med ukaze, naj na kratko pojasnim, kako
delujejo.

<p>Vsi ,,ukazni akordi'' v Emacsu (ti, ki jih zapišemo kot
<tt>M-nekaj</tt> ali <tt>C-nekaj</tt>) so v resnici le bližnjice do
funkcij, ki so del Emacsa. Vsako izmed funkcij lahko pokličemo po 
imenu, tako da vpišemo <tt>M-x ime-funkcije</tt> in pritisnemo
<tt>Enter</tt>. Če pa je na tipkovnico prilepljena bližnjica do te
funkcije, zadošča, da uporabimo bližnjico.

<p>Emacsova funkcija, ki shrani vsebino vmesnika na disk, se imenuje
<tt>save-buffer</tt>. Privzeto je pripeta na akord <tt>C-x
C-s</tt>. Če želimo shraniti vsebino vmesnika, pritisnemo akord
ali pa vpišemo <tt>M-x save-buffer</tt> in dosežemo popolnoma enak
učinek.

<p>Vsem najpogosteje rabljenim funkcijam so vnaprej prirejeni
akordi. Nekaj jih navajamo spodaj.

<verb>
akord       funkcija           opis
-------------------------------------------------------------------
C-x C-s     save-buffer        shrani trenutni vmesnik na disk
C-x u       undo               razveljavi zadnji ukaz
C-x C-f     find-file          odpri datoteko na disku
C-s         isearch-forward    poišči niz znakov v smeri naprej
C-r         isearch-backward   poišči niz znakov v smeri nazaj
            replace-string     poišči niz znakov in ga zamenjaj
            replace-regexp     poišči regularni izraz in ga zamenjaj
C-h t       help-with-tutorial poženi učenje Emacsa s prvim berilom
C-h f       describe-function  izpiši opis funkcije
C-h v       describe-variable  izpiši opis spremenljivke
C-h x       describe-key       izpiši pomen akorda
C-h a       apropos            poišči dokumentacijo z regularnim izrazom
C-h F       view-emacs-FAQ     prikaži odgovore na pogosta vprašanja o Emacsu
C-h i       info               izpiši dokumentacijo o Emacsu
C-x r m     bookmark-set       označi trenutno mesto z zaznamkom
C-x r b     bookmark-jump      skoči na zaznamek
-------------------------------------------------------------------
</verb>

<p>Ko bomo uporabljali te funkcije, bomo opazili, da mnoge od nas
pričakujejo vnos. Tega vselej vnesemo v pogovornem oknu, kar spominja
na ukaze <tt>:</tt> v <tt>vi</tt>.

<p>V Emacs je vgrajeno dobesedno na stotine funkcij, ki so vse
dosegljive. Zgornji seznam je le izvleček ukazov, ki jih uporabljam
najpogosteje. Če nas zanimajo podrobnejši opisi, kaj te funkcije počno, in želimo popolnejši seznam, pa si moramo ogledati neposredno pomoč.

</sect2>

<sect2>Dopolnjevanje s tipko Tab

<p>Podobno kot številne priljubljene ukazne lupine v Unixu (bash, csh,
tcsh...) tudi Emacs omogoča dopolnjevanje imen ukazov s tipko
<tt>Tab</tt>. Resnici na ljubo je treba priznati, da dopolnjevanje
ukazov v lupini bash posnema Emacs. Če ga uporabljamo v lupini,
se nam bo prikupilo tudi v Emacsu.

<p>Poskusimo ga uporabiti tako, da vnesemo <tt>M-x search</tt> in nato
pritisnemo <tt>Tab</tt>. Emacs bo imenu dodal pomišljaj in tako
označil, da je cel kup imen, ki se začno s tem nizom in imajo
pomišljaj. Ponovimo pritisk na tipko <tt>Tab</tt> in Emacs bo
prikazal vsa imena, ki se začno z izpisanim nizom. Opazimo, da Emacs
za ta seznam odpre <em>novo okno</em>. Emacs začasno prepolovi
prikazovalnik na dve okni. V enem je vmesnik, ki ga urejamo, v drugem pa
seznam vseh dopolnjenih imen, ki se začno na ,,search-''. Če
pritisnemo ukaz za prekinitev <tt>C-g</tt>, zapustimo okno z
izbiranjem in se vrnemo v prvotni vmesnik.

</sect2>

</sect1>

<sect1>Prvo berilo, pomoč in strani info

<p>V Emacs je za novince vgrajeno prvo berilo, ki nas popelje prek
osnovnih ukazov za urejanje in funkcij, ki jih vsi uporabljamo. Tečaj
nas tudi nauči, kako uporabljamo druge sisteme pomoči v Emacsu.

<p>Priporočam, da si vzamemo čas in se sprehodimo po prvem berilu,
če se želimo Emacsa res naučiti. Kot prikazuje zgornja preglednica,
poženemo prvo berilo z akordom <tt>C-h t</tt>. Prvo berilo je
namenjeno novincem, ki bi se radi sami izobrazili, napisano pa je kot
začetniški tečaj.

<p>Če poganjamo Emacs v oknih X, bomo opazili, da je skrajni menu na
menujski letvi označen s Help. Ko raziskujemo, kaj nam Help ponuja,
najprej opazimo, da nekaj postavk na menuju na desni strani
navaja akorde ukazov, s katerim jih na hitro poženemo.

<p>Za konec si oglejmo še, koliko dokumentacije je na
voljo v Emacsu. Vpišimo <tt>M-x info</tt> ali <tt>C-h i</tt>, kar
požene sistem Info, brskalnik po dokumentaciji v Emacsu.

</sect1>

</sect>

<!-- ********************************************* -->

<sect>Načini v Emacsu

<p>Načini (ang. mode) v Emacsu so povezana pravila obnašanja in sklopi
funkcij, ki jih lahko vklapljamo ali izklapljamo in tako prilagodimo
Emacs za rabo v različnih okoliščinah. Z načini dosežemo to, da je
Emacs lahko enako primeren za pisanje dokumentacije, za programiranje
v raznolikih jezikih (C, C++, perl, python, java in še številnih drugih),
za izdelavo domače strani, za elektronsko dopisovanje, za branje
novičarskih skupin, za vodenje seznama zmenkov in celo za
igranje iger.

<p>Načini v Emacsu so preprosto knjižnice s kodo v lispu, s katero
razširjamo, prilagajamo, spreminjamo ali kako drugače izboljšujemo
Emacs.

<sect1>Dve vrsti načinov
<p>
Imamo dve vrsti načinov: glavne načine (ang. major mode) in
podnačine (ang. minor mode). Dokler se ne poglobimo vanje, razlika med njimi ni najbolj očitna,
a poskusimo jo opisati.

<p>Vsak vmesnik je v nekem trenutku le v enem glavnem načinu, poleg
tega pa je lahko v več podnačinih. Glavni načini so na splošno vezani
na programsko okolje ali posebna velika opravila, podnačini pa so manjše prilagoditve in manj specifični priročni programi, ki
jih lahko sproti uporabljamo pri različnih večjih opravilih.

<p>Tole je zvenelo precej abstraktno, zato raje ponazorimo z zgledom.
Ko pišem neformatirano besedilo, uporabljam glavni način, imenovan
<tt>text-mode</tt>. Ta način je bil mišljen za pripravo
neformatiranega besedila, kot so datoteke README. Način razume,
kako mora prepoznavati besede in odstavke in kaj uporabnik pričakuje
pri uporabi običajnih tipk za navigacijo.

<p>Ko pišem besedilo, ki ga bodo ljudje brali, si navadno želim, da bi bilo 
tudi videti lepo. Besedilo mora biti ovito (ang. word-wrapped),
tako da vrstice niso predolge, in podobno. Da omogočim ovijanje
besedila, poženem podnačin <tt>auto-fill</tt>. Podnačin poskrbi, da se
vrstice po ,,pričakovanju'' samodejno pravilno prelomijo, ko vnašam
besedilo. Ker je to podnačin, ga lahko uporabim tudi v drugih glavnih
načinih. Moje ,,pričakovanje'', kaj naj bi se zgodilo ob koncu vrstice,
pa je v <tt>text-mode</tt> drugačno kot takrat, ko sem na primer v
načinu <tt>java-mode</tt>. Prav gotovo si ne želim, da bi bila javanska
koda ovita enako kakor besedilo v slovenščini. Pa vendar
<em>hočem</em>, da je v komentarjih javanske kode besedilo ovito!
Podnačin <tt>auto-fill</tt> je dovolj pameten, da bo to sam razrešil.

<p>Ustvarjalci različnih načinov v Emacsu so se zelo potrudili in 
poskrbeli, da je tisto, kar sodi k podnačinom, tudi res
podnačin.

<p>Če si ogledamo skico Emacsovega zaslona, opazimo, da načinovna
vrstica kaže, v katerem načinu ali načinih je Emacs v danem vmesniku.  V
prikazanem primeru je Emacs v načinu ,,Lisp Interaction'', tj. 
privzeti način. Način je uporaben le za pisanje kode v lispu, a ker je
večina Emacsa izvedena v njem, taka odločitev za privzeti način prav
gotovo ni slaba, ali pač?

</sect1>

<sect1>Načini za programiranje

<p>Najpomembneje pa je, da so Emacs ustvarili programerji za programerje. Na
voljo so visoko kakovostni načini za skoraj vsakega od razširjenih
programskih jezikov in tudi za nekaj manj pogostih. Tu bom na
kratko opisal le nekatere od njih.

<p>Za večino programskih načinov je značilnih nekaj skupnih lastnosti.
Pogosto bodo ti načini:

<itemize>

<item>skladenjsko barvali (ang. syntax highlight) jezikovne prvine,

<item>samodejno zamikali in formatirali kodo v skladu s programskim
jezikom,

<item>podpirali pomoč, občutljivo za kontekst in odvisno od programskega jezika, 

<item>samodejno podpirali vmesnik do našega razhroščevalnika,

<item>na menujsko letev dodajali nove menuje za podporo jeziku.

</itemize>

<p>Poleg tega je kar nekaj načinov, ki niso povezani z jezikom in
pomagajo pri nalogah, ki so skupne številnim programskim jezikom. Pri
tem mislim na podporo programom za nadzor različic, samodejno
dodajanje komentarjev v kodo, izdelavo datotek Makefile, osveževanje
dnevniških zapisov (ang. change log) in podobno.

<p>Če združimo vse te načine in upoštevamo zrelost in stabilnost
Emacsove kode, ugotovimo, da je izdelek primerljiv s komercialnim
paketom integriranih razvojnih okolij (ang. integrated development
environment, IDE) za jezike, kot sta C++ in java. Poleg tega je
Emacs na voljo brezplačno, seveda!

<sect2>C, C++ in java

<p>Zaradi c-jevske skladnje sta jezika C++ in java jeziku C precej
podobna, in tudi način, ki podpira vse tri jezike, poleg njih pa še
objective-C in IDL, je le en sam. Paket, v katerem je način podprt,
je zelo zrel in lepo zaokrožen in ga dobimo s standardno distribucijo
Emacsa. Imenuje se <tt>cc-mode</tt> ali tudi <tt>CC Mode</tt>.

<p>Če iščemo najnovejšo različico ali če nas zanimajo
podrobnosti, obiščimo spletno stran <htmlurl
url="http://www.python.org/emacs/"
name="http://www.python.org/emacs/">.

</sect2>

<sect2>Perl

<p>V Emacs sta vgrajena dva načina za urejanje kode v perlu. Prvi se
imenuje <tt>perl-mode</tt> (kot bi seveda pričakovali), drugi pa
<tt>cperl-mode</tt>. Ne poznam zgodovinskih okoliščin in razlogov,
zakaj sta nastala dva načina, tudi dokumentacija jih ne omenja.
Zdi pa se, da je bil <tt>perl-mode</tt> razvit najprej. Je manj
zmogljiv kot <tt>cperl-mode</tt> in ne prepozna nekaterih bolj zavitih
perlovih jezikovnih tvorb.

<p>Osebno uporabljam in priporočam <tt>cperl-mode</tt>, ki kaže, da 
ga vzdržujejo precej pogosto, ima pa tudi skoraj prav vse funkcije, ki
bi si jih želeli. Najnovejša različica je dostopna na strani:
<htmlurl url="ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs"
name="ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs">.

<p>Ne verjemite mi slepo na besedo. Raje preskusite oba načina in se
odločite za tistega, ki vam bolj ustreza.

</sect2>

<sect2>Python

<p>Python, zelo priljubljen skriptni jezik, ima tudi Emacsov način, s
katerim je podprt. Ta način se <em>ne</em> razširja
z GNU Emacs, ampak le z XEmacs. Deluje pa v obeh urejevalnikih prav
dobro.

<p>Paket za podporo načinu <tt>python-mode</tt> dobimo z
uradne pythonove spletne strani <htmlurl
url="http://www.python.org/emacs/python-mode/"
name="http://www.python.org/emacs/python-mode/">.

</sect2>

<sect2>Drugi načini

<p>Poleg že naštetih so programerjem na voljo še številni drugi
načini. Ti načini pomagajo pri:

<itemize>

<item>ukaznih lupinah (Bash, sh, ksh, csh...),
<item>awk, sed, tcl...
<item>datotekah Makefile,
<item>dnevniških zapisih (ang. change logs),
<item>dokumentaciji,
<item>razhroščevanju.

</itemize>

<p>Na voljo pa je še veliko več. Zadnji razdelek tega spisa pojasnjuje, kje 
 najdemo druge načine in dodatke za Emacs.

</sect2>

</sect1>

<sect1>Pisanje

<p>Čudoviti Emacsovi načini <em>niso</em> omejeni le za pomoč pri
pisanju kode. Tudi pisci vsakovrstne dokumentacije lahko s pridom
uporabljamo obširen nabor Emacsovih načinov.

<sect2>Črkovanje (način <tt>ispell</tt>)

<p>Avtorji različnih vrst dokumentacije od časa do časa potrebujemo
orodje za preverjanje pravilnosti črkovanja (ang. spellchecking). Če
smo namestili program <bf>GNU ispell</bf>, lahko uporabimo ukaz
<tt>M-x ispell</tt> in poženemo črkovanje trenutnega vmesnika. Če
črkovalnik najde besedo, ki je ne pozna, predlaga za zamenjavo podobne
besede iz slovarja in nam omogoči, da izmed njih izberemo eno ali
nobene. Po zmožnostih je podoben številnim razširjenim neprostim
črkovalnim paketom.

</sect2>

<sect2>HTML (način <tt>html-helper</tt>)

<p>Če moramo od časa do časa ali celo pogosteje pripraviti spis v
zapisu HTML, bomo morebiti uporabili način
<tt>html-helper-mode</tt>. Paket je dostopen na strani <htmlurl
url="http://www.santafe.edu/~nelson/tools/"
name="http://www.santafe.edu/~nelson/tools/">, tako kot tudi spremna
dokumentacija in dodatki.

<p>Kot kaže ime paketa, način <tt>html-helper-mode</tt> predvsem
pomaga tistim piscem, ki se lotevajo pisanja dokumentov v zapisu HTML
na roko, po starem.

</sect2>

<sect2>TeX (<tt>tex-mode</tt>)

<p>Če pišemo v TeXu, je priročno, da nam Emacs sproti barva ukaze,
besedilo v nekaterih oklepajih in kar je še take oblikovne krame. Način
<tt>tex-mode</tt> se potrudi in stori to samodejno.

<p>Čeprav ne pišem več pogosto v TeXu, mi je nekdaj ta način zelo
pomagal, da je postalo moje pisanje preglednejše.

</sect2>

<sect2>SGML (<tt>sgml-mode</tt>)

<p>Spis, ki ga prav zdaj berete, je bil pripravljen v jeziku SGML in 
pozneje zelo verjetno pretvorjen v drug zapis, v katerem ga prebirate. Način
<tt>sgml-mode</tt> podpira osnove dokumentov SGML: preverjanje njihove
skladenjske pravilnosti, skladenjsko barvanje, premikanje po značkah
in še marsikaj. Način je del standardne distribucije
Emacsa.

</sect2>

</sect1>

<sect1>Drug načini

<p>Poleg naštetih je seveda še kup drugih načinov, ki nam
olajšujejo življenje. Vzorec bolj priljubljenih za pokušino:

<sect2>Nadzor različic (način <tt>vc</tt>)

<p>Način <tt>vc</tt> je vmesnik do razširjenih sistemov za nadzor
različic (RCS, SCCS in CVS). Omogoča preprost vnos in povrnitev
nadzorovanih datotek, pomaga upravljati različice in izdaje
programov ter podobno. Je del standardne distribucije Emacsa in je
obširno opisan v Emacsovi dokumentaciji.

</sect2>

<sect2>Način za ukazno lupino

<p>Zakaj bi morali skočiti v drugo okno X ali navidezno konzolo zgolj
zato, ker bi radi pognali nekaj ukazov v ukazni lupini?
Storimo to v Emacsu in si prihranimo trud. <tt>:-)</tt>

<p>Ukaz <tt>M-x shell</tt> v Emacsovem vmesniku požene ukazno lupino.
V njej lahko postorimo skoraj vse, kar lahko postorimo v pravi ukazni lupini. Ne
moremo pa poganjati programov, ki zahtevajo celotno okno; taka sta na
primer <tt>vi</tt> ali <tt>pine</tt>. Emacs se s pravo ukazno lupino
pogovarja v ozadju.

<p>Ker je ta način del standardne distribucije, najdemo navodila za
rabo v priloženi dokumentaciji.

</sect2>

<sect2>Telnet in FTP

<p>Zakaj bi morali preklopiti v drugo okno X ali navidezno konzolo
zgolj zato, ker bi radi pognali programa telnet ali ftp? Tudi
za to ni pravega razloga, oboje lahko postorimo v Emacsu in si
prihranimo trud. (Ste opazili, da sem se začel ponavljati?)

<p>Enako kot ukazno lupino v Emacsu poženemo tudi programa telnet ali
ftp. Uporabimo ukaza <tt>M-x telnet</tt> ali <tt>M-x ftp</tt> in ju
preskusimo sami. Dokumentacija pa nam bo pomagala razreševati zoprne podrobnosti.

</sect2>

<sect2>Man

<p>Zakaj bi morali preklopiti v drugo okno X ali navidezno konzolo
zgolj zato, ker bi radi prebrali strani man? To lahko storimo
iz Emacsa in si prihranimo trud. (Obljubljam, da se ne bom več
ponavljal.)

<p>Enako kot ukazno lupino v Emacsu poženemo tudi pregledovalnik
strani man. Uporabimo ukaz <tt>M-x man</tt> in ga preskusimo. Več 
si lahko preberemo v dokumentaciji.

</sect2>

<sect2>Ange-FTP

<p>Citat iz navodil za <tt>ange-ftp</tt>:

<quote>
Ta paket se trudi, da bi bil dostop iz GNU Emacs do datotek in imenikov
prek protokola FTP čim bolj preprost in pregleden. Podmnožica
skupnih rutin za delo z datotekami je razširjena za delo s programom
FTP.
</quote>

<p>To pomeni, da datoteke v oddaljenih sistemih uporabljamo, kot da bi
bile v lokalnem sistemu. Če moramo urediti datoteko v drugem sistemu,
Emacsu z imenom sistema na poti do datoteke povemo, kje naj jo odpre,
Emacs pa bo poskrbel za vse drugo in dobil datoteko iz oddaljenega
sistema. Ko datoteko shranimo z običajnim ukazom <tt>C-x C-s</tt>, bo
<tt>ange-ftp</tt> prestregel klic funkcije za shranjevanje in sam
datoteko zapisal v oddaljeni sistem.

<p>Skladnja za označevanje datotek je takole razširjena... Datoteko
,,moja-datoteka.txt'' uporabnice ,,metka'' v njenem imeniku
,,naloga/podatki'' oddaljenega sistema ,,kjer.koli.si'' odpremo z
ukazom <tt>C-x f</tt>, tako da za pot navedemo:

<quote><tt>/metka@kjer.koli.si:naloga/podatki/moja-datoteka.txt</tt></quote>

<p>Tudi ta paket je del standardne distribucije Emacsa in obširnejša
navodila zanj najdemo v Emacsovi standardni dokumentaciji.

<p>Zahvaljujem se Etiennu Grossmannu (<htmlurl name =
"etienne@anonimo.isr.ist.utl.pt" url =
"mailto:etienne@anonimo.isr.ist.utl.pt">) za zgornji zgled.

</sect2>

</sect1>

</sect>

<!-- ********************************************* -->

<sect>Emacs po meri<label id="emacs_po_meri">

<p>Emacs si ukrojimo po meri, tako da spremenimo kodo v lispu.
Nastavimo lahko spremenljivke, ki vplivajo na vedenje Emacsa, ali
dodamo nove funkcije, s katerimi dosežemo nove učinke ali pa z njimi
nadomestimo obstoječe funkcije.

<sect1>Začasno prilagajanje

<p>Če si skušamo Emacs prilagoditi, bomo zelo verjetno najprej
želeli, da bi bile spremembe le začasne. Če ga namreč pri prilagajanju
(ang. customization) zelo močno polomimo, Emacs samo zapustimo
z običajnim ukazom <tt>C-x C-c</tt> in spet poženemo.

Ko pa se odločimo, katere spremembe želimo ohraniti, jih
lahko dodamo v svojo osebno datoteko <tt>.emacs</tt> in njihov učinek
se bo poznal ob vsakem zagonu Emacsa. O tem govorimo v naslednjih
razdelkih.

<sect2>Prirejanje vrednosti spremenljivkam

<p>Emacs najpreprosteje spremenimo, tako da spremenljivkam, od katerih
je odvisno njegovo obnašanje, določimo prave vrednosti. Lispova koda, s
katero spremenljivki priredimo vrednost, je videti takole:

<verb>
(setq ime-spremenljivke nova-vrednost)
</verb>

<p>Pri tem je <tt>ime-spremenljivke</tt> ime spremenljivke, ki ji
prirejamo vrednost, <tt>nova-vrednost</tt> pa vrednost, ki jo
prirejamo (V lispovem žargonu pravimo, da spremenljivko povežemo z
vrednostjo.) Lispova funkcija <tt>setq</tt> ustreza prireditvenemu
operatorju (navadno predstavljenim z znakom <tt>=</tt>) v drugih
programskih jezikih.

<p><bf>Opomba:</bf> Na tem mestu preskakujem številne podrobnosti, da bi
ostal razumljiv. Mnogi poleg te uporabljamo še podobne lispove
funkcije, kot je <tt>set</tt> ali celo <tt>setq-default</tt>. Če
vam zares zanima, čemu so namenjene, si oglejte Emacsov
priročnik o jeziku lisp.

<p>Oglejmo si vrstico iz moje datoteke <tt>.emacs</tt>:

<verb>
(setq-default transient-mark-mode t)
</verb>

<p>Spremenljivka <tt>transient-mark-mode</tt> nadzoruje, ali bo
območje, ki ga izberemo, označeno poudarjeno ali ne. V številnih
uporabniških programih v GUI s klikom z miško in premikom miške označujemo besedila, pri tem pa postane besedilo označeno z inverznim videom
ali ustreznimi barvami. Emacs stori podobno, če je spremenljivka
<tt>transient-mark-mode</tt> nastavljena na neprazno (ang. non-nil)
vrednost.

<p><em>Kakšno</em> vrednost?

<p>Počasi. Potrebna je kratka zastranitev. Večina programskih jezikov
pozna logični vrednosti resnično in neresnično. V jezikih C in C++ je
logična vrednost spremenljivke enaka resnično, če je njena vrednost
različna od nič. V perlu je logična vrednost enaka resnično, če je
vrednost spremenljivke različna od nič ali od
null. ???????Prevod???????  V lispu gre za enako zamisel, le imena in
oznake so drugačni.

<p>Logična vrednost resnično je v lispu navadno označena kot
<tt>t</tt> in neresnično (ali null) kot <tt>nil</tt>. Enako kot v
drugih jezikih je vsaka vrednost, ki je različna od neresnično, vzeta
kot resnično.

<p>Če si želimo ogledati popoln opis, na kaj vse vpliva spremenljivka
<tt>transient-mark-mode</tt>, uporabimo pomoč na zvezi. Vpišimo
<tt>C-h v</tt> ali <tt>M-x describe-variable</tt> in nato
<tt>transient-mark-mode</tt>. Če smo leni, si lahko pomagamo s tipko
za dopolnjevanje <tt>Tab</tt>. Vpišimo le začetni kos imena
spremenljivke in pritisnimo tipko <tt>Tab</tt>. Če smo že zapisali
dovolj velik del njenega imena, da jo lahko Emacs enoznačno določi, bomo
takoj dobili njeno ime izpisano v celoti.

<p>Druga spremenljikva, ki jo pogosto nastavljamo, je
<tt>fill-column</tt>.  Spremenljivka pove, kako širok je zaslon, da
more Emacs v načinu <tt>auto-fill-mode</tt> glede na to primerno
ovijati besedilo. Če si želimo kar najnazorneje ogledati njen učinek, jo
nastavimo na absurdno majhno vrednost:

<verb>
(setq fill-column 20)
</verb>

<p>A zgolj zapis tega izraza še ne stori nič. Emacsu moramo povedati,
naj zapisani ukaz tudi <bf>izvede</bf> (ang. evaluate). Utripalko
postavimo na konec izraza in vtipkajmo <tt>C-x C-e</tt>. To pokliče
funkcijo <tt>eval-last-sexp</tt>, če vas že zanima. Ko to storimo,
opazimo, da se je v pogovornem oknu na dnu zaslona izpisala
vrednost <tt>20</tt> (ali karkoli že ste uporabili za nastavitev). To je
tudi vrednost funkcije, ki smo jo pravkar uporabili.

<p>Da bi se prepričali, kako ovijanje po novem deluje, vpišimo stavek ali
dva. Če imamo omogočen podnačin <tt>auto-fill-mode</tt> (a ga
verjetno nimamo), opazimo, da se besedilo ovija pred 20.
stolpcem. Drugače pa zatem, ko smo vnesli nekaj besedila, pritisnemo
<tt>M-q</tt>. To pokliče funkcijo <tt>fill-paragraph</tt>, ta pa
ovije besedilo zadnjega odstavka.

</sect2>

<sect2>Zveze z datotekami

<p>Emacs lahko tako prilagodimo, da bo določeno opravilo samodejno
opravil vsakič, ko odpremo datoteko določene vrste. To je podobno
nekaterim GUI, ki samodejno poženejo namenski program
(ang. application) vsakič, ko kliknemo ikono datoteke določenega
vrste. Ali želimo, na primer, da Emacs samodejno preklopi glavni način v
<tt>text-mode</tt> vsakič, ko odpremo datoteko s končnico
<tt>.txt</tt>? V resnici se je to že zgodilo. <tt>:-)</tt> No, pa
naročimo Emacsu, naj datoteko ,,README'' vselej odpre v načinu
<tt>text-mode</tt>.

<verb>
(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))
</verb>

<p>Hmm?

<p>Da se ne bi poglabljali v programiranje v lispu, ki za občutek
razumevanja ni nujno potrebno, škodi pa tudi ne, če se ga naučimo,
naj zaenkrat zadošča, če povemo, da spremenljivka <tt>auto-mode-alist</tt>
obsega seznam parov. Vsak par je sestavljen iz regularnega izraza in
iz imena Emacsovega načina. Če ime datoteke, ki jo odpiramo, ustreza
kateremu od regularnih izrazov (v našem primeru nizu ,,README''), bo
Emacs pognal način, ki smo ga podali.

<p>Na prvi pogled zamotana skladnja zgornjega zgleda je taka zato, ker dodajamo seznamu parov nov par. Najbrž ne bi hoteli, da
spremenljivki <tt>auto-mode-alist</tt> zgolj priredimo novo vrednost
in pri tem izgubimo vse že nastavljene pare.

<p>In če bi želeli, da Emacs samodejno uporabi način
<tt>html-helper-mode</tt> vsakič, ko odpremo datoteko s končnico
<tt>.html</tt> ali <tt>.htm</tt>, bomo v svojo datoteko .emacs dodali
vrstici:

<verb>
(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.htm$" . html-helper-mode) auto-mode-alist))
</verb>

<p>Število možnosti je res neomejeno.

</sect2>

</sect1>

<sect1>Uporaba datoteke <tt>.emacs</tt>

<p>Po tem, ko smo v Emacsu že preživeli nekaj časa in dobili občutek,
kaj lahko storimo s prilagajanjem, bomo morebiti želeli prilagoditve
spremeniti v trajne (ali jih vsaj ohraniti do naslednje spremembe). Če uporabljamo
Emacs vsak dan, bomo opazili, da se velikost datoteke .emacs s časom
povečuje. To je <em>zelo dobro</em>, saj kaže, da smo ugotovili, kako
naj Emacs učinkovito služi našim <bf>željam</bf>. Velika škoda je,
da se enako ne vede še več programov.

<p>Vsakič, ko poženemo Emacs, ta
najprej v našem domačem imeniku poišče datoteko <tt>.emacs</tt>.  V
njej je koda v lispu, ki jo želimo pognati ob vsakem zagonu programa
Emacs, s tem pa omogočimo prilagajanje, o katerem smo pravkar
govorili.

<p>Še en zgled iz moje datoteke <tt>.emacs</tt>:

<verb>
(setq inhibit-startup-message t)
</verb>

<p>Spremenljivka <tt>inhibit-startup-message</tt> odloča, ali bo Emacs
ob zagonu izpisal pozdravno sporočilo ali ne. Ko bomo Emacs
uporabljali že nekaj časa, nam bo pozdravljanje verjetno šlo
pošteno na živce. Sam sem znal uporabiti pomoč in poiskati način, kako
pozdravljanje izklopim.

<p>Za nalogo v domačem imeniku ustvarimo datoteko <tt>.emacs</tt> in
vanjo dodajmo navedeno vrstico. Zapustimo Emacs in ga spet poženimo. Pozdravnega sporočila ob novem zagonu ne bi smelo biti.

<p>Pogosto bomo v zvezi z Emacsom ali katerim
od spremnih
paketov prebrali nasvet, kako lahko s primerno kodo v datoteki
<tt>.emacs</tt> prilagodimo delovanje.

<p>V datoteki z odgovori na najpogostejša vprašanja, dosegljivi z
<tt>C-h F</tt>, je nekaj predlogov v zvezi s prilagajanjem, ki nas bodo morebiti zanimali.

</sect1>

<sect1>Paket za prilagajanje

<p>Ko je Emacs rasel in se vse bolj razvijal, se je nekdo
domislil, da ,,mora biti za novince še kak lažji način, da bi si ga
prilagodili''.  Nastal je paket za prilagajanje <tt>customize</tt>.

<p>Paket ponuja preprostejše prilagajanje delov Emacsa. Preskusimo
ga tako, da na glavnem menuju <tt>Help</tt> obiščemo podmenu
<tt>Customize</tt> ali pa vtipkamo <tt>M-x customize</tt>.

<p>Možnosti za prilagajanje so razvrščene v logične skupine, denimo
,,Editing'', ,,Programming'', ,,Files'' in podobno. Nekatere skupine
imajo nove podskupine.

<p>Če si Emacs prilagodimo s tem vmesnikom, bo spremembe
vpisal v našo datoteko <tt>.emacs</tt>. To je zelo priročno, saj si
jih lahko ogledamo in po potrebi sami popravimo.

<p><em>Ker ne uporabljam vmesnika za prilagajanje ,,Customize'', žal
ne morem veliko povedati o njem.</em>

</sect1>

<sect1>Zaslon oken X

<p>Kot vsak lepo vzgojen namenski program tudi Emacs upošteva sredstva
(ang. resource) oken X. S tem poudarjamo, da lahko začetne nastavitve,
denimo za barve, geometrijo okna in podobne lastnosti oken X,
opravimo enako kot pri programih <tt>xterm</tt>,
<tt>nxterm</tt> in sorodnih.

<p>Za ponazoritev navajam ustrezne vrstice iz svoje datoteke
<tt>~/.Xdefaults</tt>:

<verb>
emacs*Background: DarkSlateGray
emacs*Foreground: Wheat
emacs*pointerColor: Orchid
emacs*cursorColor: Orchid
emacs*bitmapIcon: on
emacs*font: fixed
emacs.geometry: 80x25
</verb>

<p><bf>Opomba prevajalca:</bf> Uporabniki, ki pišemo v razporedu
ISO-8859-2, imenovanem tudi Latin-2, bomo raje uporabili enakovredno
pisavo s šumniki, če jo seveda imamo nameščeno v sistem:

<verb>
emacs*font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-2
</verb>

<p>Za obširnejša navodila o sredstvih X si moramo ogledati strani
man, ki so posvečene oknom X, <tt>man X</tt>.

<p>Chris Gray (<htmlurl name="cgray4@po-box.mcgill.ca"
url="mailto:cgray4@po-box.mcgill.ca">) pripominja:

<quote>Zdi se, da se v distribuciji Debian datoteka
<tt>~/.Xdefaults</tt> ne uporablja. Namesto vanjo lahko postavimo
ukaze z enakim uspehom v datoteko <tt>/etc/X11/Xresources/emacs</tt>,
pa bomo dobili enako pisane barve kakor takrat, ko smo uporabljali
RedHat.
</quote>

</sect>

<!-- ********************************************* -->

<sect>Priljubljeni paketi <label id="priljubljeni_paketi">

<p>Poleg številnih Emacsovih načinov je na voljo še veliko dodatnih
<bf>paketov</bf> (ang. package). Imenujem jih paketi, ker so več kot
le novi načini. Navadno zajemajo posebne priročne programe
(ang. utility) ali pa so tako obsežni, da bi bila oznaka ,,načini'' do
njih krivična. V nekaterih primerih pa gre za tako programsko opremo, ki
razširja ali združuje druge Emacsove načine ali pakete. Definicija ni
popolnoma jasna, a zadošča taka, kot je.

<sect1>VM (poštni program)

<p>Navedek iz odgovorov na najpogostejša vprašanja o VM:

<quote>
VM (View Mail) je podsklop v Emacsu za branje in odpošiljanje pisem
znotraj Emacsa. V njem so ukazi, ki jih pričakujemo in potrebujemo za
delo s pošto, na primer pripravo odgovorov na pisma, shranjevanje
 pisem v mape, brisanje pisem in podobno. Poleg teh so na voljo še ukazi
za pripravo izvlečkov in povzetkov (ang. digest), posredovanje prejetih
sporočil drugim, urejanje sporočil po različnih merilih...
</quote>

<p>Ko sem začenjal delati z Emacsom, sem nekaj časa uporabljal VM. Zdelo se
mi je, da je pravi nadomestek za Pine, Elm ali večino podobnih poštnih
programov. A za branje pošte in novic želim uporabljati le en
program. VM se razvija še danes in je dobro podprt.

<p>Na voljo je na spletni strani <htmlurl
url="http://www.wonderworks.com/vm/"
name="http://www.wonderworks.com/vm/">.

</sect1>

<sect1>Gnus (program za pošto in novice)

<p>Navedek iz priročnika za GNUS:

<quote>
Gnus je laboratorij za branje sporočil. Omogoča nam, da si skorajda vse ogledamo, kot bi bilo novica v novičarski skupini. Z njim
lahko beremo elektronsko pošto, pregledujemo imenike ali uporabljamo
program ftp. Z njim celo beremo novičarske skupine.
</quote>

<quote>
Gnus poskuša ponuditi uporabnikom, ki berejo novičarske skupine,
tisto, kar daje Emacs uporabnikom, ki urejajo besedilo. Gnus
uporabnika pri tem nikakor ne omejuje in mu pomaga razširiti Gnus, da
se vede po uporabnikovih željah. Program ne sme upravljati ljudi,
ti morajo imeti možnost, da s programom storijo ali starejo, karkoli
želijo!
</quote>

<p>Najbrž ste opazili, da trenutno uporabljam za branje pošte in
novičarskih skupin paket GNUS. GNUS se še vedno razvija in je dobro
podprt.

<p>Na voljo je na spletni strani: <htmlurl url="http://www.gnus.org/"
name="http://www.gnus.org/">.

</sect1>

<sect1>BBDB (rollodex)

<p>BBDB je ime za Insidious Big Brother Database, program vrste
rollodex. Deluje dobro v povezavi z drugimi Emacsovimi programi za
pošto (tudi z VM in GNUS).

<p>Na voljo je na spletni strani: <htmlurl
url="http://pweb.netcom.com/~simmonmt/bbdb/index.html"
name="http://pweb.netcom.com/~simmonmt/bbdb/index.html">.

</sect1>

<sect1>AucTeX (še en način za TeX)

<p>AucTeX je še en način urejanja datotek TeX.

<p>Navedek s spletne strani za AucTeX:

<quote>
AUC TeX je razširljivi paket za pisanje in oblikovanje datotek v
zapisu TeX za večino različic urejevalnika GNU Emacs. Podprti so številni različni paketi s texovimi makroukazi, tudi s paketi AMS
TeX, LaTeX in TeXinfo.
</quote>

<p>Na voljo je na spletni strani: <htmlurl
url="http://sunsite.auc.dk/auctex/"
name="http://sunsite.auc.dk/auctex/">.

</sect1>

</sect>

<!-- ********************************************* -->

<sect>Drugi viri<label id="drugi_viri">

<p>Ta razdelek govori o knjigah, spletnih straneh, novičarskih
skupinah, seznamih elektronskih naslovov in podobnih krajih, na katerih je
najti gradivo o Emacsu.

<sect1>Knjige

<p>Na voljo je le nekaj zares dobrih knjig za učenje Emacsa.  Poleg
tega bomo ugotovili, da je v številnih knjigah o Linuxu in Unixu tudi poglavje, posvečeno Emacsu (in urejevalniku <tt>vi</tt>).

<sect2>Learning GNU Emacs

<p>Avtorji: Debra Cameron, Bill Rosenblatt, Eric S. Raymond

<p>Izdajatelj: O'Reilly &amp; Associates - <htmlurl
url="http://www.ora.com/" name="http://www.ora.com/">

<p>Knjigo lahko kupimo s popustom pri Amazon.com z njihovim
družabniškim programom: <htmlurl
url="http://www.amazon.com/exec/obidos/ASIN/1565921526/jeremydzawodny"
name="http://www.amazon.com/exec/obidos/ASIN/1565921526/">

<p><bf>Komentar:</bf> To je verjetno najboljša knjiga za
novince. Potem ko smo si ogledali pričujoči HOWTO in se sprehodili po
odgovorih na najpogostejša vprašanja, je ta knjiga
najprimernejši in najbolj izčrpen vodnik.

</sect2>

<sect2>Writing GNU Emacs Extensions

<p>Avtor: Bob Glickstein

<p>Izdajatelj: O'Reilly &amp; Associates - <htmlurl
url="http://www.ora.com/" name="http://www.ora.com/">

<p>Knjigo lahko kupimo s popustom pri Amazon.com z njihovim
družabniškim programom: <htmlurl
url="http://www.amazon.com/exec/obidos/ASIN/1565922611/jeremydzawodny/"
name="http://www.amazon.com/exec/obidos/ASIN/1565922611/">

<p><bf>Komentar</bf> Potem ko smo Emacs že nekaj časa uporabljali 
in se odločili, da napišemo lastni način ali pa opravimo kakšno bolj
zahtevno prilagoditev, nam bo ta knjiga morebiti koristila. Četudi
nas ne poskuša naučiti jezika lisp, premore kratek uvod v ta jezik.

</sect2>

<sect2>Programming in Emacs Lisp: An Introduction

<p>Avtor: Robert J. Chassell

<p>Iz datoteke  README:

<quote>
To je osnovni uvod v programiranje v Emacsovem jeziku lisp za vse,
ki niso programerji in jih programiranje morda niti ne zanima, a bi
si radi prilagodili računalniško okolje ali ga razširili.
</quote>

<p>Priročnik je v celoti na voljo za brezimni ftp v strežniku GNU
FTP: <htmlurl url="ftp://prep.ai.mit.edu/gnu/emacs/"
name="ftp://prep.ai.mit.edu/gnu/emacs/">.

<p>Lepo tiskana knjiga je na voljo tudi pri Amazon.com prek njihovega
družabniškega programa: <htmlurl
url="http://www.amazon.com/exec/obidos/ASIN/1882114418/jeremydzawodny/"
name="http://www.amazon.com/exec/obidos/ASIN/1882114418/jeremydzawodny/">.

<p><bf>Komentar:</bf> Knjiga je dober uvodni priročnik v Emacsov lisp
in je primerna tudi za tiste, ki nismo dolgometražni programerji.

</sect2>

<sect2>The GNU Emacs Lisp Reference Manual

<p>Avtor: Richard Stallman

<p>Izdajatelj: The Free Software Foundation - <htmlurl
url="http://www.fsf.org/" name="http://www.fsf.org/">

<p>Priročnik je v celoti na voljo za brezimni ftp v strežniku GNU FTP:
<htmlurl url="ftp://prep.ai.mit.edu/gnu/emacs/"
name="ftp://prep.ai.mit.edu/gnu/emacs/">.

<p><bf>Komentar:</bf> Knjiga je ključni vodnik (ang. definitive guide)
po programskem jeziku Emacs Lisp.

</sect2>

</sect1>

<sect1>Spletišča 

<sect2>EMACSulation

<p>EMACSulation je ime kolumni, ki jo piše Eric Marsden za revijo na
zvezi Linux Gazette, dostopno na spletišču <htmlurl
url="http://www.linuxgazette.com/"
name="http://www.linuxgazette.com/">. Ob pisanju teh vrstic je bil
zadnji članek <htmlurl
url="http://www.linuxgazette.com/issue39/marsden.html"
name="http://www.linuxgazette.com/issue39/marsden.html">. Na koncu
članka so napotki, kje najti prejšnje dele.

</sect2>

</sect1>

<sect1>Novičarske skupine

<p>Povežimo se s svojim krajevnim strežnikom za novičarske skupine in
poiščimo tiste, ki imajo v imenu niz ,,emacs'', pa jih bomo nekaj gotovo
našli. Moj strežnik posreduje naslednje skupine:

<itemize>
<item>comp.emacs
<item>comp.emacs.sources
<item>gnu.emacs
<item>gnu.emacs.bug
<item>gnu.emacs.help
<item>gnu.emacs.sources
</itemize>

</sect1>

<sect1>Seznami elektronskih naslovov

<p>Edini seznam elektronskih naslovov, za katerega vem, da je namenjen
uporabnikom Emacsa, združuje uporabnike različice Emacsa za
Micro$oftov sistem Windows NT. Več o tem na seznamu odgovorov na najpogostejša
vprašanja o NT-Emacs <htmlurl
url="http://www.cs.washington.edu/homes/voelker/ntemacs.html"
name="http://www.cs.washington.edu/homes/voelker/ntemacs.html">.

</sect1>

<sect1>Arhiv za Emacsov lisp

<p>Navedek iz datoteke README iz arhiva za Emacsov lisp:

<quote>
Arhivi za Emacsov lisp v strežniku ftp.cis.ohio-state.edu obsegajo
različne koščke in pakete kode v Emacsovem lispu. Emacsov lisp je
jezik za razširitev urejevalnika GNU Emacs, ki ga izdaja Free Software
Foundation. Čeprav je večina kode za Emacsov lisp zajeta v
distribucijo za GNU Emacs, so mnogi napisali pakete za vmesnike
do drugih sistemov, za boljšo podporo urejanju v programskih jezikih,
ki jih uporabljajo, dodali povsem nove funkcije ali pa spremenili
privzeto vedenje Emacsa. Večino vsebine tega arhiva so pripravili
posamezniki in jo poslali v javnost prek internetnih
seznamov elektronskih naslovov ,,info-emacs'' ali ,,info-gnu-emacs''
in novičarskih skupin ,,comp.emacs'', ,,gnu.emacs'' ali
,,gnu.emacs.sources''.
</quote>

<p>Arhivi so na voljo za brezimni dostop ftp na spletišču 
<htmlurl url="ftp://ftp.cis.ohio-state.edu/pub/emacs-lisp/"
name="ftp://ftp.cis.ohio-state.edu/pub/emacs-lisp/">.

<p><bf>Opomba:</bf> Kolikor vem, arhiv za Emacsov lisp počasi
zastareva. Nove ali osvežene pakete vidim na njem le poredko, čeprav
vem, da so na voljo in da so celo priobčeni v novičarski skupini
<tt>comp.emacs.sources</tt>. (Prosim, popravite me, če se motim.)

</sect1>

</sect>

<!-- ********************************************* -->

<sect>Zahvale <label id="zahvale">

<p> Pri nastajanju tega spisa so pomagali naslednji pisci:
<itemize>

<item>Robert Vollmert <htmlurl name = "rvollmer@gmx.net"
url="mailto:rvollmer@gmx.net" >

<item>Larry Brasfield <htmlurl name = "larrybr@seanet.com"
url="mailto:larrybr@seanet.com">

<item>Etienne Grossmann <htmlurl name =
"etienne@anonimo.isr.ist.utl.pt" url =
"mailto:etienne@anonimo.isr.ist.utl.pt">

<item>Thomas Weinell <htmlurl name = "kf6mli@amsat.org" url =
"mailto:kf6mli@amsat.org">

<item>Adam C. Finnefrock <htmlurl name =
"adam@bigbro.biophys.cornell.edu" url =
"mailto:adam@bigbro.biophys.cornell.edu">

<item>Chris Gray <htmlurl name="cgray4@po-box.mcgill.ca"
url="mailto:cgray4@po-box.mcgill.ca">

<item>Robert J. Chassell <htmlurl name="bob@rattlesnake.com"
url="mailto:bob@rattlesnake.com">

<item>Isaac To <htmlurl name="kkto@csis.hku.hk"
url="mailto:kkto@csis.hku.hk">

<item>Matteo Valsasna <htmlurl name="valsasna@elet.polimi.it"
url="mailto:valsasna@elet.polimi.it">

<item>Tijs van Bakel <htmlurl name="smoke@casema.net"
url="mailto:smoke@casema.net">

</itemize>

</sect>

</article>
