2011-05-13 14 views
9

He estado teniendo problemas para configurar SLIME para que funcione tanto con Clojure como con Common Lisp. La mayoría de los desarrolladores de Clojure tienden a usar el SLIME reducido disponible a través de ELPA que está congelado para la compatibilidad con Clojure. Yo, sin embargo, hago un montón de hack de Common Lisp y generalmente uso la versión SLIME CVS (obtenida a través de QuickLisp).Configuración de SLIME para el desarrollo de Common Lisp y Clojure

Existen algunos problemas bien conocidos con la implementación de swank para Clojure: no funciona con autodoc (si se habilita SLIME se congela), no es compatible con algunas cosas como la finalización difusa, etc. Este question analiza el mismo tema, la respuesta sugiere que hay un no ir para mí.

(add-hook 'slime-connected-hook 
      (lambda() 
      (if (string= (slime-lisp-implementation-type) "Clojure") 
       (setq slime-use-autodoc-mode nil) 
       (setq slime-use-autodoc-mode t)) 
      )) 

(add-hook 'slime-mode-hook 
      (lambda() 
      (if (eq major-mode 'clojure-mode) 
        (slime-autodoc-mode 0) 
       (slime-autodoc-mode 1)))) 

(add-hook 'slime-repl-mode-hook 
      (lambda() 
      (if (string= (slime-lisp-implementation-type) "Clojure") 
       (progn (setq slime-use-autodoc-mode nil) 
         (slime-autodoc-mode 0)) 
       (progn (setq slime-use-autodoc-mode t) 
        (slime-autodoc-mode 1))))) 

La solución se ve muy bien en el papel, pero para mí slime-lisp-implementation-type es siempre nula. (lo mismo para slime-lisp-implementation-type: connlocal con conexiones locales).

Lo que básicamente necesito es solo una manera de saber que estoy ejecutando SLIME con el swank de Clojure para poder modificar la configuración problemática.

+0

¿Qué sistema operativo está usted? Lo conseguí trabajando en Mac OS X (aunque probablemente también funciona en Linux) y escribí en el blog aquí http://spacemanaki.posterous.com/setting-up-emacs-for-lisp-hacking-on-os-x- pt-0 y respondió esta pregunta http://stackoverflow.com/questions/4551283/what-is-wrong-with-my-emacs-slime-setup-compile-and-load-eval-not-working/4555421#4555421 La única forma en que podía hacer que funcionara era tener el último CVS SLIME y el ELPA SLIME y cargar el apropiado dependiendo de si estaba trabajando en Common Lisp o Clojure. – spacemanaki

+1

Estoy usando Linux. Soy consciente de la solución que propones, pero no me gusta, solo quiero usar CVS SLIME todo el tiempo. Podría tener una función simple que alterne lo que necesito antes de hacer conexiones de clojure, pero preferiría encontrar una forma de enganchar dicha configuración automáticamente en el arranque del limo. –

+0

No me gusta tampoco, pero funciona. Estaré pendiente de este hilo para ver si alguien sugiere algo mejor, por ahora he dejado de afeitar a este yak en particular. – spacemanaki

Respuesta

4

Parece que la solución a este problema acaba de crearse. Se llama jack-in. Básicamente sólo tiene que hacer tres cosas:

  1. Instalar clojure modo a través de git o mermelada
  2. Lein plugin de instalar Swank-clojure 1.3.1
  3. invocación de Mx clojure-jack a partir de un proyecto

Esto iniciará automáticamente el SLIME compatible. Ya no es necesario instalarlo a través de ELPA. Envolví mi init de Common Lisp en una función interactiva a la que puedo llamar cuando la necesito, porque cargar Clojure SLIME naturalmente arruina algunas configuraciones. No es una solución tan ideal como soporte Clojure aguas arriba en el limo, pero es mucho mejor que la mayoría alternativa ...

Actualización:

BABA ya no es necesaria para el desarrollo Clojure. Le recomiendo que use CIDER en su lugar.