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

3.1 Dve vrsti načinov

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

3.2 Načini za programiranje

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!

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

Perl

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

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

Drugi načini

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.

3.3 Pisanje

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

Č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 številnim 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/, 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 (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 (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.

3.4 Drug načini

Poleg naštetih je seveda še kup 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 upravljati različice in izdaje 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 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.

Telnet in FTP

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.

Man

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.

Ange-FTP

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.


Naprej Nazaj Kazalo