Pregunta

Actualmente estoy en el proceso de agregar funcionalidad a una aplicación web J2EE existentes, en un contenedor Tomcat, y estoy escribiendo mis adiciones utilizando Clojure. Mi configuración es simple: Acabo de añadir las llamadas a métodos estáticos generados por clojure, y el código de todo el trabajo duro desde el lado clojure. El proceso de construcción consiste en la compilación de código clojure (lein uberjar) y luego compilar el código Java con el tarro en la ruta de clase.

En el init webapp, tengo una llamada a una clase generada que los incendios de un servidor ostentoso con un (swank/start-repl). Me gustaría ser capaz de conectar mi limo Aquamacs a ese servidor, y el trabajo de forma interactiva desde allí (hasta cierto punto, no voy a tratar nada que requiere una recompilación del lado de Java). Pero tengo una situación que yo no entiendo muy bien. Si hago un \M-x slime-connect, aparece un indicador de REPL (después de haber sido notificado de que no hay ningún proceso de Lisp inferior, que creo que es bueno, ya que el proceso Lisp inferior está funcionando fuera de control emacs). Puedo evaluar formas perfectamente, y hasta puedo inspeccionar cosas como my.own.namespace/my-var. Sin embargo, si volviese a un archivo con un código de clojure ya compilado, no puedo parecer hacer limo lo reconocen como su fuente. Considere un archivo clojure simple:

(ns my.namespace
  (:gen-class
   :name my.namespace
   :methods [#^{:static true} [testFunc [] void]]))

(def *secret* "shhhh")

(defn -testFunc []
  (println (str "our secret is: " secret)))

Suponiendo que este fue compilado e incluido en el uberjar cargado por la aplicación de web, puedo eval / inspeccionar my.namespace/*secret*. Pero si intento eval dentro de la memoria intermedia de código, limo piensa que estoy en el espacio de nombres user (que incluso puede tener sentido!). Pero ahora estoy izquierda con una opción de trabajo única - Tengo que evaluar - una por una, todas las formas en el archivo! \C-c \C-l (cargar el archivo de origen) no hará nada - al parecer sólo devuelve nil y nada salidas más. La compilación de todo parece hacer precisamente eso - compila, muestra los errores si los encuentra, pero no va a cambiar mi espacio de nombres. Y lo más extraño es el \C-~ (paquete de sincronización y directorio), que el uso de Common Lisp que se limita a lo que quiero, pero aquí se congela el REPL clojure para siempre.

Siempre existe la opción de cambiar a la REPL, (in-ns 'my.namespace) escribir, y entonces todo funciona correctamente. Pero eso simplemente no es lo suficientemente práctico cuando los archivos clojure están creciendo en número (como el espacio de nombres de la memoria intermedia de código no va a cambiar de forma automática!)

Mi pregunta es, entonces, si me falta un comando / configuración básica - o si hay una razón obvia para este comportamiento suceda como tal.

¿Fue útil?

Solución 3

He acabo de enterar que retirar el culpable de este problema: slime-redirect-inferior-output, desde limo-repl.el, estaba siendo llamado desde un gancho que tenía configuración. Resulta que no juega bien sin-Lisp-proceso inferior (leer, un servidor ostentoso iniciarse desde emacs).

Así que un hack solución rápida es sólo para eliminar la forma error de esa función, como este . Ahora el gancho procede, y los espacios de nombres se calculan automáticamente. Como era la intención. Gracias por las sugerencias, sin embargo - que me han llevado a esta solución

!

Otros consejos

puede ser malentendido su problema, pero no puede usted (durante su visita a este buffer hipotético en emacs), golpe C-c C-k para compilar el buffer en la instancia actual Clojure (lo limo está conectado a)?

A continuación, en el limo búfer, cambie a este espacio de nombres con un (in-ns 'my.namespace). A continuación, usted debe tener acceso a lo que se ha compilado en ese espacio de nombres.

El cambio de espacios de nombres de forma automática en la compilación no ha sido nunca el valor predeterminado para Swank-clojure, aunque podría ser una característica opcional de limo que ocurriera a la obra con Clojure. Pero C-c M-p para cambiar de la réplica de espacio de nombres del búfer en uso siempre ha trabajado para mí, y nunca he oído hablar de alguien que tiene problemas con él.

¿Usted está ejecutando en las últimas versiones estables de clojure-mode y limo-repl? ¿Tiene instalado Swank-clojure.el? (Usted no lo necesita.) Parece que esto podría ser debido a las versiones no coincidentes de las librerías elisp. Si ese no es el problema que podría ser un error Aquamacs; Swank-clojure está diseñado para trabajar con GNU Emacs. También podría ser un error en el fango si está ejecutando de la línea externa en lugar de la última versión elpa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top