Emacs prilagodimo po svoji meri, tako da spremenimo kodo v lispu. Nastavimo lahko spremenljivke, ki vplivajo na obnašanje Emacsa ali dodamo nove funkcije, s katerimi dosežemo nove učinke ali pa z njimi nadomestimo obstoječe funkcije.
Če poskušamo Emacs prilagoditi, bomo zelo verjetno to najprej
storili tako, da bodo spremembe le začasne. Če ga pri prilagojevanju
(ang. customization) zelo močno polomimo, zadošča, da Emacs zapustimo
z običajnim ukazom C-x C-c
in ga ponovno poženemo.
Ko pa se odločimo, katere spremembe želimo ohraniti za vselej, 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 spremeljivke, 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 (običajno predstavljenim z znakom =
) v drugih
programskih jezikih.
Opomba: Na tem mestu preskakujem mnoge podrobnosti, da bi
ostal dovolj razumljiv. Mnogi poleg te uporabljamo še podobne lispove
funkcije, kakršna je set
ali celo setq-default
. Če
ste resnično radovedni, č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, poudarjeno označeno ali ne. V mnogih
uporabniških programih v GUI se klik miške in njen premik uporablja za
označevanje besedila, pri čemer to postane 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 idejo, le imena in oznake so drugačne.
Logična vrednost resnično je v lispu običajno 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.
Da si ogledamo popolni 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šen 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. Da bi si najbolj nazorno ogledali 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
, kar pokliče
funkcijo eval-last-sexp
, če vas že zanima. Ko storimo to,
lahko opazimo, da se je v pogovornem oknu na dnu zaslona izpisala
vrednost 20
(ali karkoli ste uporabili za nastavitev). To je
tudi vrednost funkcije, ki smo jo pravkar uporabili.
Da se prepričamo, kako ovijanje po novem deluje, vpišimo stavek ali
dva. Če imamo omogočen podnačin auto-fill-mode
(čeprav ga
verjetno nimamo), lahko opazimo, da se besedilo ovija pred 20
stolpcem. Drugače pa zatem, ko smo vnesli nekaj besedila, pritisnemo
M-q
, kar pokliče funkcijo fill-paragraph
. Ta pa
ovije besedilo zadnjega odstavka.
Emacs lahko tako prilagodimo, da bo določeno opravilo samodejno
naredil vsakič, ko odpremo datoteko določenega tipa. To je podobno
nekaterim GUI, ki samodejno poženejo namenski program
(ang. application) vsakič, ko kliknemo na ikono datoteke določenega
tipa. 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'' odpre vselej v načinu
text-mode
.
(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))
Hmm?
Ne da bi se poglobili v programiranje v lispu, ki za občutek
razumevanja ni nujno potrebno, a škodi tudi ne, če se ga naučimo,
zaenkrat zadošča, da povemo, da spremenljivka auto-mode-alist
vsebuje 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 primera je takšna zaradi
tega, ker dodajamo seznamu parov nov par. Najbrž ne bi želeli, 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 resnično neomejeno.
.emacs
Po tem ko smo v Emacsu že preživeli nekaj časa in dobili občutek, kaj lahko storimo s prilagojevanjem, bomo morebiti želeli prilagoditve narediti za trajne (ali vsaj do naslednje spremembe). če uporabljamo Emacs vsak dan, bomo opazili, da velikost datoteke .emacs s časom narašča. To je zelo drobro, saj kaže, da smo ugotovili, kako naj nam Emacs služi tako, kot hočemo, da bo. Velika škoda je, da se enako ne obnaša še več programov.
če se morebiti še nismo vprašali, 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 čimer omogočimo prilagojevanje, o katerem smo pravkar
govorili.
še en primer 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 pa ga ne bo. 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 ponovno
poženimo. Pozdravnega sporočila ob novem zagonu ne bi smelo biti.
Pogosto bomo v zvezi z Emacsom ali kakšnim od spremljajočih
paketov prebrali nasvet, kako lahko s primerno kodo v datoteki
.emacs
prilagodimo njihovo delovanje.
Datoteka z odgovori na pogosto zastavljena vprašanja, dosegljiva z
C-h F
, vsebuje nekaj predlogov v zvezi s prilagojevanjem, kar
nas bo morebiti zanimalo.
Ko je Emacs s časom vse bolj rasel in se razvijal, se je nekdo
domislil, da ,,mora obstajati lažji način za novince, da si ga
prilagodijo''. Nastal je paket za prilagojevanje customize
.
Paket ponuja preprostejše prilagojevanje delov Emacsa. Preskusimo
ga tako, da v glavnem menuju Help
obiščemo podmenu
Customize
ali pa vtipkamo M-x customize
.
Možnosti za prilagojevanje so razvrščene v logične skupine, denimo ,,Editing'', ,,Programming'', ,,Files'' in podobno. Nekatere skupine vsebujejo nove podskupine.
če si Emacs prilagodimo s pomočjo tega vmesnika, bo Emacs spremembe
vpisal v našo datoteko .emacs
. To je zelo priročno, saj si
lahko spremembe ogledamo in jih po potrebi sami popravimo.
Ker ne uporabljam vmesnika za prilagojevanje ,,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 na enak način kot pri programih xterm
,
nxterm
in sorodnih.
V ilustracijo 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 sistemu:
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, kot ko smo uporabljali RedHat.