Naprej Nazaj Kazalo

4. Emacs po meri

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.

4.1 Začasno prilagojevanje

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

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

Zveze z datotekami

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.

4.2 Uporaba datoteke .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.

4.3 Paket za prilagojevanje

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.

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


Naprej Nazaj Kazalo