Clojure: configurazione Emacs


Joe Yates- Pubblicato il31 Ottobre 2009

Emacs si adatta molto bene allo sviluppo in Clojure per via del suo sistema 'Slime', che ti permette di gestire un processo Clojure (o qualsiasi altro tipo di Lisp) dall'interno dell'editor.

Il 'clojure-mode' include un installatore che scarica tutti i pacchetti necessari per la creazione dell'ambiente di lavoro.

Quanto segue è un'installazione personale - se vuoi fare un'installazione per tutti gli utenti della macchina, bisgona adattare alcuni dei passaggi.

Prima di tutto, bisogna scegliere il percorso dove scaricare i file. Bisogna sia una directory nel proprio PATH, qui uso ~/bin.

$ cd ~/bin
$ git clone git://github.com/jochu/clojure-mode.git

Lanciare Emacs.

Vai al buffer *scratch*

(add-to-list 'load-path "~/bin/clojure-mode")C-M-x
(require 'clojure-mode)C-M-x
M-x clojure-install

L'installatore chiede subito il percorso dove installare, scrivi:

~/bin

L'installazione scarica/aggiorna/compila i seguenti pacchetti:

  • clojure-mode
  • clojure
  • clojure-contrib
  • slime
  • swank-clojure

Alla fine dell'installazione c'è il suggerimento di copiare la seguente riga nel proprio file .emacs:

(clojure-slime-config "~/bin")

Personalmente, ho preferito usare quanto segue:

(add-to-list 'load-path "~/bin/clojure-mode")
(require 'clojure-mode)
(add-to-list 'load-path "~/bin/slime")
(require 'slime)
(slime-setup)
(add-to-list 'load-path "~/bin/swank-clojure")
(setq swank-clojure-binary "~/bin/clj")
(require 'swank-clojure-autoload)

Inoltre, ho modificato il mio script Bash per l'avvio di Clojure (~/bin/clj) per aggiungere un riferim:

#!/bin/bash
CLOJURE=/usr/share/java/clojure.jar
JLINE=/usr/share/java/jline.jar
CLOJURE_CONTRIB=~/bin/clojure-contrib/clojure-contrib.jar
SWANK=~/bin/swank-clojure/src

CLASSPATH=.
for i in $CLOJURE $CLOJURE_CONTRIB $JLINE $SWANK
do
  if [ ! -e "$i"  ]; then
    echo "File not found: $i"
    exit 1;
  fi
  CLASSPATH=$CLASSPATH:$i
done
export CLASSPATH=$CLASSPATH

if [ -z "$1" ]; then
  java -cp $CLASSPATH jline.ConsoleRunner clojure.main
else
  CLASS=$1;
  shift;
  java -cp $CLASSPATH clojure.lang.Script $CLASS -- $*
fi

Riavvia Emacs, e scrivi:

M-x slime
; SLIME 2009-05-17
user> (+ 1 1)
2
user> 

Altri commandi essenziali:

C-x C-f: caricare file

C-c C-k: compilare fie nel buffer attuale

C-M-x: compilare defun intorno al punto di inserimento

C-g: Annulla commando

Per uscire, bisogna chiudere il collegamento con Clojure:

M-x slime-quit-lisp