Megfelelő fejlesztőkörnyezet keresése közben egy problémába, legalábbis annak látszó dologba ütköztem. Minden elérhető forrás az Emacs használatát javasolta. Erről tudni kell, hogy egyike azon szoftvereknek, amelyek kettéosztják a világot (a másik tudtommal a vi). Vannak, akik rajongásig szeretik és vannak akik szenvedélyesen utálják. Én az utóbbi csoportba tartoztam (a vi-t illetően pedig az azt szeretők közé).
Próbáltam más utat keresni (átmenetileg találtam is), de a végső megoldás mégis az Emacs lett. Hogy miért? A Slime nevű pluginje miatt, amelyet kifejezetten Lisp-pel való munkához fejlesztettek.
A Slime a következők miatt látszott (és bizonyult) jó választásnak:
- szokásos fejlesztőeszköz-funkciókat tudja (segítség a parancsoknál, debugger, fordítási hibaüzenetek forráshoz kötése)
- kapcsolódás távoli Lisp szerverhez
- távoli REPL használata
- azonnali kód-kiértékelés és -fordítás, távoli szerverre is
- távoli fájlszerkesztés és betöltés
Ez persze nem látszott az elején, sokat kellett kísérletezni hozzá, hogy megértsem az utolsó kettőt például. A távoli fájl- és kódműveleteket úgy kell elképzelni, hogy fut a program a szerveren, változtatsz valamit a kódon, majd egy billentyűparanccsal a kód bekerül a szerverre, lecserélve az ott futó kódrészt. Nincs leállítás, megszakadás, stb, a felhasználó következő kérését az új kód fogja kiszolgálni.
Ezért hát rászántam magam és feltettem az otthoni gépemre az Emacs-ot, Ubuntu alatt egyszerűen az sudo apt-get install emacs22 paranccsal. Emacsból egyébként több is van, a két legelterjedtebb a GNU Emacs és az XEmacs. Közös eredettel büszkélkedhetnek, ám egyszer különváltak. Az utóbbi nevében az X nem a Unix-rendszerek grafikus felületére utal, mindkét változatnak van grafikus felülete. Én a GNU Emacs-ot választottam.
Kell még hozzá egy Slime, ha már ennyire áradoztam róla. Ez általában megtalálható a Linux disztribúciókban, ám a Slime-nak van olyan kényes tulajdonsága, hogy azonos verziók szeretnek együttműködni. Azaz ugyanazt kell feltennünk a kliens oldalra, ami a szerveren fut. A szerveren pedig CVS-ből jön a kód, így a kliensen ugyanígy kell tennünk a következő paranccsal:
cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co slime
Ezt valami olyan könyvtárban add ki, ahol a Lisp-es fejlesztési cuccokat gyűjtöd. Aztán adjuk meg az Emacs-nak, hogy hol keresse. Ehhez hozd létre a saját könyvtáradban a ~/emacs.d/slime.el fájlt valamilyen szerkesztővel, a következő tartalommal (a pontosvesszővel kezdődő sorok a megjegyzések):
; hol találja a Slime-ot:
(add-to-list 'load-path "/home/user/lisp/slime/")
; töltse is be azt:
(require 'slime)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))
(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))
; mit indítson, ha a kliensgépen levő Lisp kell
(setq inferior-lisp-program "/usr/bin/sbcl"
; kezdeti behúzás változtatása
lisp-indent-function 'common-lisp-indent-function
slime-compile-symbol-function 'slime-fuzzy-complete-symbol
; hyperspec dokumentáció
common-lisp-hyperspec-root "file:///home/user/lisp/HyperSpec/"
slime-startup-animation t)
; így induljon el a Slime: kérünk REPL-t
(slime-setup '(slime-repl))
Ezután egyelőre nincs más dolgunk, mint elindítani az Emacs-ot. Fontos: kilépni a Ctrl-X Ctrl-C billentyűparancsok egymás utáni kiadásával lehet! Ha elindul hibák nélkül, akkor jól csináltuk a dolgunkat, legközelebb folytatjuk.