Как подключить исходный файл Clojure к запуску Clojure REPL на Emacs?

StackOverflow https://stackoverflow.com/questions/3470999

  •  28-09-2019
  •  | 
  •  

Вопрос

В настоящее время я в настоящее время в процессе добавления функциональности к существующему 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top