Naprej Nazaj Kazalo

4. Emacs po meri

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.

4.1 Začasno prilagajanje

Č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 C-x C-c in spet poženemo.

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

Prirejanje vrednosti spremenljivkam

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:

(setq ime-spremenljivke nova-vrednost)

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

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

Oglejmo si vrstico iz moje datoteke .emacs:

(setq-default transient-mark-mode t)

Spremenljivka transient-mark-mode 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 transient-mark-mode nastavljena na neprazno (ang. non-nil) vrednost.

Kakšno vrednost?

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.

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

Če si želimo ogledati popoln opis, na kaj vse vpliva spremenljivka transient-mark-mode, uporabimo pomoč na zvezi. Vpišimo C-h v ali M-x describe-variable in nato transient-mark-mode. Če smo leni, si lahko pomagamo s tipko za dopolnjevanje Tab. Vpišimo le začetni kos imena spremenljivke in pritisnimo tipko Tab. Č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.

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

(setq fill-column 20)

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

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

Zveze z datotekami

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 text-mode vsakič, ko odpremo datoteko s končnico .txt? V resnici se je to že zgodilo. :-) No, pa naročimo Emacsu, naj datoteko ,,README'' vselej odpre v načinu text-mode.

(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))

Hmm?

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 auto-mode-alist 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.

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

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

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

Število možnosti je res neomejeno.

4.2 Uporaba datoteke .emacs

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 zelo dobro, saj kaže, da smo ugotovili, kako naj Emacs učinkovito služi našim željam. Velika škoda je, da se enako ne vede še več programov.

Vsakič, ko poženemo Emacs, ta najprej v našem domačem imeniku poišče datoteko .emacs. 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.

Še en zgled iz moje datoteke .emacs:

(setq inhibit-startup-message t)

Spremenljivka inhibit-startup-message 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.

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

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

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

4.3 Paket za prilagajanje

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

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

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

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

Ker ne uporabljam vmesnika za prilagajanje ,,Customize'', žal ne morem veliko povedati o njem.

4.4 Zaslon oken X

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 xterm, nxterm in sorodnih.

Za ponazoritev navajam ustrezne vrstice iz svoje datoteke ~/.Xdefaults:

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

Opomba prevajalca: 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:

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

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

Chris Gray ( cgray4@po-box.mcgill.ca) pripominja:

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


Naprej Nazaj Kazalo