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 uporabo 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 mnogih drugih), za izdelavo domače strani, za elektronsko dopisovanje, za branje novičarskih skupin, za vodenje seznama naših 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 na kakšen način izboljšujemo Emacs.
Obstajata dve vrsti načinov: glavni načini (ang. major mode) in podnačini (ang. minor mode). Razlika med vrstama ni najbolj očitna, dokler se ne poglobimo vanju, 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 v splošnem vezani na programsko okolje ali posebna velika opravila, medtem ko so podnačini 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 s primerom.
Ko pišem neformatirano besedilo, uporabljam glavni način, imenovan
text-mode
. Ta način je bil načrtovan za pripravo
neformatiranega besedila, kakršno so datoteke README. Način razume,
kako mora prepoznavati besede in odstavke ter kaj uporabnik pričakuje
pri uporabi običajnih tipk za navigacijo.
Ko pripravljam besedilo, namenjeno ljudem, običajno hočem, da bo
tudi njegov videz dober. 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 se zgodi ob zaključku vrstice
pa je v text-mode
različno od tistega, ko sem na primer v
načinu java-mode
. Prav gotovo si ne želim, da bo javanska
koda ovita na enak način, kot je besedilo v slovenskem jeziku. Vendar
pa 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 Emacsovih načinov so se zelo potrudili, da so zagotovili, da so tiste stvari, ki sodijo v podnačine, tudi res podnačini.
Č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'', ki je 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č?
Najvažnejše, Emacs so ustvarili programerji za programerje. Na voljo so visokokakovostni načini za skoraj vsakega od razširjenih programskih jezikov in tudi za nekaj manj pogostih. Tukaj 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 obstaja nekaj načinov, ki niso v povezavi z jezikom, in pomagajo pri nalogah, ki so skupne mnogim programskim jezikom. Pri tem mislim na podporo za programe 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 ter upoštevamo zrelost in stabilnost Emacsove kode, ugotovimo, da je izdelek primerljiv komercialnim paketom integriranih razvojnih okolij (ang. integrated development environment, IDE) za jezike, kot sta C++ in Java. Poleg tega pa 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 ter prihaja s standardno distribucijo
Emacsa. Način se imenuje cc-mode
ali tudi CC Mode
.
Če iščemo njegovo najnovejšo različico ali če želimo zvedeti 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 seveda pričakujemo), drugi pa
cperl-mode
. Ne poznam zgodovinskih okoliščin in razlogov,
zakaj je prišlo do dveh načinov, dokumentacija pa jih tudi 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 se
ga vzdržuje precej pogosto, ima pa tudi skoraj prav vse funkcije, ki
bi si jih kdajkoli želel. Njegova zadnja 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. Kot lahko poročam, se ta način ne razširja z GNU Emacs, pač pa le z XEmacs. Deluje pa v obeh urejevalnikih prav dobro.
Paket za podporo načinu python-mode
lahko pridobimo z
uradne pythonove spletne strani
http://www.python.org/emacs/python-mode/.
Poleg že naštetih je na voljo programerjem še mnogo mnogo drugih načinov. Ti načini pomagajo pri:
In še veliko več. Zadnji razdelek tega spisa pojasnjuje, kje lahko najdemo druge načine in dodatke za Emacs.
Čudoviti Emacsovi načini niso omejeni le na 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 mnogim 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/ kot tudi spremljajoča
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, na star način.
tex-mode
)Če pišemo v TeXu, je priročno, da nam Emacs sproti barva ukaze,
besedilo v nekaterih oklepajih in kar je še te oblikovne krame. Način
tex-mode
se potrudi in stori to samodejno.
Čeprav ne pišem več pogosto v TeXu, mi je nekoč ta način močno pomagal, da je postalo pisanje preglednejše.
sgml-mode
)Spis, ki ga pravkar berete, je bil pripravljen v jeziku SGML in
kasneje zelo verjetno pretvorjen v drug zapis, ki ga berete. Način
sgml-mode
podpira osnove dokumentov SGML: preverjanje njihove
skladenjske pravilnosti, skladenjsko barvanje, premikanje po značkah
in poleg tega še veliko več. Način je del standardne distribucije
Emacs.
Seveda, poleg naštetih obstaja še mnogo 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 pri upravljanju z različicami in izdajami
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
zaradi tega, ker bi radi pognali nekaj ukazov v ukazni lupini?
Storimo to v Emacsu in si prihranimo nekaj truda. :-)
Ukaz M-x shell
v Emacsovem vmesniku požene ukazno lupino.
V njej lahko postorimo skoraj vse, kar lahko v pravi ukazni lupini. Ne
moremo pa poganjati programov, ki zahtevajo celo 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 njegovo uporabo v priloženi dokumentaciji.
Zakaj bi morali preklopiti v drugo okno X ali navidezno konzolo zgolj zaradi tega, ker bi radi pognali programa telnet ali ftp? Tudi za to ni pravega razloga, oboje lahko storimo v Emacsu in si prihranimo nekaj truda. (Ali ste že opazili vzorec?)
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 pri razreševanju
grenkih podrobnosti.
Zakaj bi morali preklopiti v drugo okno X ali navidezno konzolo zgolj zaradi tega, ker bi radi prebrali strani man? To lahko storimo iz Emacsa in si prihranimo nekaj truda. (Obljubljam, da se ne bom več ponovil.)
Enako kot ukazno lupino v Emacsu poženemo tudi pregledovalnik
strani man. Uporabimo ukaz M-x man
in ga preskusimo. Več pa
lahko preberemo v dokumentaciji.
Citat iz navodil za ange-ftp
:
Ta paket se trudi narediti dostop iz GNU Emacs do datotek in imenikov prek protokola FTP kar najbolj preprost in pregleden. Podmnožica skupnih rutin za delo z datotekami je razširjena za delo s programom FTP.
To pomeni, da do datotek v oddaljenih sistemih dostopamo, kot da bi
bile v lokalnem sistemu. Če moramo urediti datoteko v drugem sistemu,
Emacsu z imenom sistema v poti do datoteke povemo, kje naj jo odpre,
Emacs pa bo poskrbel za vse ostalo in pridobil datoteko z 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 primer.