Naprej Nazaj Kazalo

3. Načini v Emacsu

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.

3.1 Glavni načini in podnačini

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č?

3.2 Načini za programiranje

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!

C, C++ in Java

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/.

Perl

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

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/.

Drugi načini

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.

3.3 Pisanje

Č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.

Črkovanje (način 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 (način 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 (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 (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.

3.4 Drug načini

Seveda, poleg naštetih obstaja še mnogo drugih načinov, ki nam olajšujejo življenje. Vzorec bolj priljubljenih za pokušino:

Nadzor različic (način 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.

Način za ukazno lupino

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.

Telnet in FTP

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.

Man

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.

Ange-FTP

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.


Naprej Nazaj Kazalo