Как подключить исходный файл Clojure к запуску Clojure REPL на Emacs?
Вопрос
В настоящее время я в настоящее время в процессе добавления функциональности к существующему j2ee WebApp, в контейнере Tomcat, и я пишу свои дополнения с помощью Clojure. Моя настройка проста: я просто добавляю вызовы к статическим методам, генерируемыми Clojure, и кодируйте всю жесткую работу с стороны Clojure. Процесс сборки состоит в компиляции кода Clojure (lein uberjar
) А затем составление кода Java с этой баночкой на классе.
В INIT WebApp INIT, у меня есть вызов сгенерированным классом, который загорелся вверх по Swank Server с (swank/start-repl)
. Отказ Я хотел бы иметь возможность подключить слизь My Aquamacs к этому серверу и работать в интерактивном режиме (до точки до точки, я не попробую ничего не попробую, что требуется перекомпиляция на стороне Java). Но у меня ситуация, которую я не совсем понимаю. Если я сделаю \M-x slime-connect
, Я получаю rep-подсказку (после того, как уведомление о том, что нет никакого нижнего процесса Lisp, который, я думаю, все в порядке, поскольку процесс нижнего лежащего процесса работает за пределами управления Emacs). Я могу отлично оценивать формы, и я даже могу проверить такие вещи, как my.own.namespace/my-var
. Отказ Однако, если я посещу файл с уже скомпилированным кодом CLOJURE, я не могу, казалось, заставлял слизь распознавать его как его источник. Рассмотрим простой файл Clojure:
(ns my.namespace
(:gen-class
:name my.namespace
:methods [#^{:static true} [testFunc [] void]]))
(def *secret* "shhhh")
(defn -testFunc []
(println (str "our secret is: " secret)))
Предполагая, что это было составлено и включено в Uberjar, загруженное WebApp, я могу оценить / проверять my.namespace/*secret*
. Отказ Но если я попытаюсь оценить в буфере кода, слизь думает, что я на user
пространство имен (который может даже иметь смысл!). Но теперь я остался с одним рабочим вариантом - я должен оценить - один за другим, все формы в файле! \C-c \C-l
(Загрузка исходного файла) ничего не сделает - видимо, просто возвращает Nil и не выводит ничего другого. Компиляция всего, что, кажется, делают только что - это компилирует, показывает ошибки, если он находит их, но не изменит мое пространство имен. И самый странный это \C-~
(Sync Package и Directory), который использует Common Lisp, он делает только то, что я хочу, но здесь он замораживает Clojure REF для хорошего.
Всегда есть возможность переключения на REFL, набрав (in-ns 'my.namespace)
, а затем все работает должным образом. Но это просто не практично, когда файлы Clojure растут в количестве (поскольку пространство имен буфера кода не будет автоматически меняться!)
Мой вопрос, то, не хватает ли мне базовую команду / конфигурацию - или если есть очевидная причина этого поведения, чтобы произойти как таковой.
Решение 3
Я только что узнал, что удаление виновника для этого вопроса: slime-redirect-inferior-output
, от Slime-repl.el, назывались из крючка, у меня установили. Оказывается, хорошо не воспроизводится без нижнего lisp-процесса (прочитанного, Swank Server, начатый изнутри Emacs).
Так что быстрый взлом обходного пути - просто удалить error
Форма из этой функции, как это. Отказ Теперь крючок продолжается, и пространства имен автоматически рассчитываются. Как предполагалось. Спасибо за предложения, тем не менее - они привели меня к этому решению!
Другие советы
Я могу недоразумевать свою проблему, но не могу вы (во время посещения этого гипотетического буфера в Emacs), нажмите C-c C-k
Для компиляции буфера в вашем текущем экземпляре Clojure (какая слизь подключена к)?
Затем в слизителе переключитесь на это пространство имен с помощью (in-ns 'my.namespace)
. Отказ Тогда вы должны иметь доступ к тому, что вы составили в этом пространстве имен.
Переключение пространств имен автоматически на компиляцию никогда не было по умолчанию для Swank-Clojure, хотя может быть дополнительная функция слизи, которая произошла с работой с Clojure. Но CC MP для переключения переключения на пространство имен текущего буфера всегда работал для меня, и я никогда не слышал о тех, кто возникла с этим.
Вы работаете на последних стабильных версиях Clojure-Mode и Slime-refl? У вас установлен Swank-Clojure.el? (Вам не нужно это понадобиться.) Звучит так, как это может быть связано с несоответствующими версиями ELISS Libs. Если это не проблема, это может быть ошибка Aquamacs; Swank-Clojure предназначен для работы с Emacs GNU. Это также может быть ошибка в слизи, если вы бегаете из багажника, а не последний выпуск ELPA.