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.
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.
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.
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.
Tole je zvenelo precej abstraktno, zato raje ponazorimo z zgledom.
Ko pišem neformatirano besedilo, uporabljam glavni način, imenovan
text-mode
. 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.
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 auto-fill
. 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 text-mode
drugačno kot takrat, ko sem na primer v
načinu java-mode
. Prav gotovo si ne želim, da bi bila javanska
koda ovita enako kakor besedilo v slovenščini. Pa vendar
hočem, da je v komentarjih javanske kode besedilo ovito!
Podnačin auto-fill
je dovolj pameten, da bo to sam razrešil.
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.
Č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č?
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.
Za večino programskih načinov je značilnih nekaj skupnih lastnosti. Pogosto bodo ti načini:
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.
Č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!
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 cc-mode
ali tudi CC Mode
.
Če iščemo najnovejšo različico ali če nas zanimajo podrobnosti, obiščimo spletno stran http://www.python.org/emacs/.
V Emacs sta vgrajena dva načina za urejanje kode v perlu. Prvi se
imenuje perl-mode
(kot bi seveda pričakovali), drugi pa
cperl-mode
. Ne poznam zgodovinskih okoliščin in razlogov,
zakaj sta nastala dva načina, tudi dokumentacija jih ne omenja.
Zdi pa se, da je bil perl-mode
razvit najprej. Je manj
zmogljiv kot cperl-mode
in ne prepozna nekaterih bolj zavitih
perlovih jezikovnih tvorb.
Osebno uporabljam in priporočam cperl-mode
, 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:
ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs.
Ne verjemite mi slepo na besedo. Raje preskusite oba načina in se odločite za tistega, ki vam bolj ustreza.
Python, zelo priljubljen skriptni jezik, ima tudi Emacsov način, s katerim je podprt. Ta način se ne razširja z GNU Emacs, ampak le z XEmacs. Deluje pa v obeh urejevalnikih prav dobro.
Paket za podporo načinu python-mode
dobimo z
uradne pythonove spletne strani
http://www.python.org/emacs/python-mode/.
Poleg že naštetih so programerjem na voljo še številni drugi načini. Ti načini pomagajo pri:
Na voljo pa je še veliko več. Zadnji razdelek tega spisa pojasnjuje, kje najdemo druge načine in dodatke za Emacs.
Čudoviti Emacsovi načini niso omejeni le za pomoč pri pisanju kode. Tudi pisci vsakovrstne dokumentacije lahko s pridom uporabljamo obširen nabor Emacsovih načinov.
ispell
)Avtorji različnih vrst dokumentacije od časa do časa potrebujemo
orodje za preverjanje pravilnosti črkovanja (ang. spellchecking). Če
smo namestili program GNU ispell, lahko uporabimo ukaz
M-x ispell
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.
html-helper
)Če moramo od časa do časa ali celo pogosteje pripraviti spis v
zapisu HTML, bomo morebiti uporabili način
html-helper-mode
. Paket je dostopen na strani
http://www.santafe.edu/~nelson/tools/, tako kot tudi spremna
dokumentacija in dodatki.
Kot kaže ime paketa, način html-helper-mode
predvsem
pomaga tistim piscem, ki se lotevajo pisanja dokumentov v zapisu HTML
na roko, po starem.
tex-mode
)Č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
tex-mode
se potrudi in stori to samodejno.
Čeprav ne pišem več pogosto v TeXu, mi je nekdaj ta način zelo pomagal, da je postalo moje pisanje preglednejše.
sgml-mode
)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
sgml-mode
podpira osnove dokumentov SGML: preverjanje njihove
skladenjske pravilnosti, skladenjsko barvanje, premikanje po značkah
in še marsikaj. Način je del standardne distribucije
Emacsa.
Poleg naštetih je seveda še kup drugih načinov, ki nam olajšujejo življenje. Vzorec bolj priljubljenih za pokušino:
vc
)Način vc
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.
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. :-)
Ukaz M-x shell
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 vi
ali pine
. Emacs se s pravo ukazno lupino
pogovarja v ozadju.
Ker je ta način del standardne distribucije, najdemo navodila za rabo v priloženi dokumentaciji.
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?)
Enako kot ukazno lupino v Emacsu poženemo tudi programa telnet ali
ftp. Uporabimo ukaza M-x telnet
ali M-x ftp
in ju
preskusimo sami. Dokumentacija pa nam bo pomagala razreševati zoprne podrobnosti.
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.)
Enako kot ukazno lupino v Emacsu poženemo tudi pregledovalnik
strani man. Uporabimo ukaz M-x man
in ga preskusimo. Več
si lahko preberemo v dokumentaciji.
Citat iz navodil za ange-ftp
:
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.
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 C-x C-s
, bo
ange-ftp
prestregel klic funkcije za shranjevanje in sam
datoteko zapisal v oddaljeni sistem.
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 C-x f
, tako da za pot navedemo:
/metka@kjer.koli.si:naloga/podatki/moja-datoteka.txt
Tudi ta paket je del standardne distribucije Emacsa in obširnejša navodila zanj najdemo v Emacsovi standardni dokumentaciji.
Zahvaljujem se Etiennu Grossmannu ( etienne@anonimo.isr.ist.utl.pt) za zgornji zgled.