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