Что не так с моей настройкой lein / nrepl / emacs?

Программист-новичок на Clojure здесь. NREPL в Emacs у меня не работает.

  • Aquamacs 2.5 (Emacs 23.4.1)
  • нрепл.эл 0.1.8
  • Leiningen 2.2.0 на Java 1.6.0_51 Java HotSpot (TM) 64-разрядная серверная виртуальная машина

Мой проект - это просто созданный с помощью lein Hello World.

Запуск "lein repl" в оболочке работает, но nrepl.el не работает. Вместо того, чтобы заканчиваться в пространстве имен проекта в repl, я просто получаю верхний уровень по умолчанию в пространстве имен "user".

Должно появиться что-то вроде:

my$ lein repl
nREPL server started on port 57347
REPL-y 0.2.0
Clojure 1.5.1
Hello Project
my.core=> 

Но вместо этого посмотрите:

; nREPL 0.1.8-preview
user> (in-ns my.core)
CompilerException java.lang.ClassNotFoundException: my.core, compiling:(NO_SOURCE_PATH:1:1)
user> 

В чистом сценарии nrepl.el я вижу два запущенных java-процесса, и они выглядят правдоподобно. Один имеет мой проект в пути -classpath и реализует фактический repl (сервер), а другой - это java на стороне клиента (-D MyProjectPath -m leiningen.core.main repl: headless).

Я получаю одни и те же потери независимо от того, доберусь ли я до m-x nrepl-jack-in или начну в оболочке, а затем m-x nrepl. Я получаю ответ, который не знает мой проект.

Интересно, работает ли это у кого-нибудь, или у меня что-то установлено или настроено неправильно? Здесь происходит множество версий "0.xxx" ...


person user1698584    schedule 05.07.2013    source источник
comment
Когда вы делаете M-x nrepl, предоставляете ли вы порт, напечатанный lein repl?   -  person Jeremy    schedule 05.07.2013


Ответы (2)


Похоже, вам не хватает цитаты перед пространством имен, попробуйте следующее:

(in-ns 'my.core)

Обратите внимание на 'перед моим.

person aldazosa    schedule 05.07.2013
comment
Ой! Я думал, что это макрос как в CL. Спасибо! Теперь похоже, что nrepl-jack-in работает, и моя проблема сводится к тому, почему он вообще не запускается в пространстве имен проекта и игнорирует: repl-options. - person user1698584; 05.07.2013
comment
nrepl не принимает во внимание варианты ответов leiningen. Здесь есть обходной путь elisp: github.com/kingtim/nrepl.el/issues/316 - person aldazosa; 06.07.2013

NRepl всегда запускается в пространстве имен пользователя верхнего уровня. Используйте M-x nrepl-set-ns или C-c M-n в буфере Clojure, чтобы установить пространство имен NRepl равным одному из буфера.

В вашем конкретном случае

  • посетите src/my/core.clj, нажмите C-c M-j, чтобы запустить NRepl,
  • вернуться в буфер src/my/core.clj,
  • нажмите C-u C-c C-z, чтобы установить для пространства имен NRepl значение my.core и вернуться к буферу NRepl.

C-u C-c C-z - это ярлык для C-c M-n, за которым следует C-c C-z, чтобы переключиться на буфер NRepl.

person lunaryorn    schedule 05.07.2013