Clojure 1.2 выпущен! Как получить swank-clojure, чтобы использовать это?
Я только что установил новую установку emacs, установил ELPA и установил swank-clojure с использованием ELPA. Хотя Clojure 1.2 выпущен, когда я нажал "Mx slime", он все равно скачал для меня Clojure 1.1 вместо 1.2
Как заставить его использовать 1.2 теперь, когда он доступен? Нужно ли делать это вручную? Нужно ли ждать обновления слизи /swank для использования 1.2?
Обновление: спасибо за рекомендации по использованию leiningen, но я хочу, чтобы emacs просто запустил REPL. Эта проблема возникает из-за того, что пакет swank-clojure в ELPA не обновляется?
4 ответа
С Leiningen 1.3 легко создать отдельный сеанс swank:
$ lein install swank-clojure 1.3.0-SNAPSHOT
$ ~/.lein/bin/swank-clojure
Вы можете добавить ~/.lein/bin к вашему $PATH, чтобы сделать это проще.
Тогда внутри Emacs:
M-x slime-connect
Запуск swank из Emacs можно выполнить с помощью Mx lein-swank, если вы находитесь в каталоге проекта. Однако автоматическая загрузка и установка Clojure и других зависимостей через swank-clojure.el подвержена ошибкам и не рекомендуется.
Я считаю, что с такой настройкой, которую вы описываете, Mx slime поместит все в ~/.clojure
а также ~/.swank-clojure
на пути к классам. Вы можете настроить это, установив swank-clojure-classpath
переменная (я настроил для использования ~/.clojure
только; вот куда я положил базовый набор банок, полезных для запуска одноразовых экспериментальных реплей.
Как только вам понадобится больше материала на пути к классам, вышеприведенное неадекватно. Есть два варианта управления этими более сложными случаями:
Вариант 1: запустить Swank, затем подключиться
Самый простой подход заключается в использовании Leiningen. Поместите это в свой project.clj
:
(defproject repl-base "1.0.0-SNAPSHOT"
:description "A project to start Swank in."
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.2.1"]])
Тогда используйте lein swank
в каталоге вашего проекта, чтобы запустить сервер swank и использовать Mx slime-connect для подключения к нему из Emacs.
Как еще одна возможность, cljr Дэвида Эдгара Либке, очевидно, запустит для вас отдельные экземпляры Swank; обратитесь к README для деталей.
Вариант 2: запустить Swank из Emacs
Теперь, если честно, я склонен запускать Swank из Emacs сам - это может быть немного сложнее в настройке (и, следовательно, возможно, не рекомендуется в начале), но довольно удобно позже. См. Мой ответ на старый вопрос об одной версии функции, которую я использую для запуска специфичных для Clojure экземпляров Swank с правильной конфигурацией пути к классам для проектов в стиле Leiningen.
Я использую leiningen для подключения слизи Emacs к экземпляру clojure. В проекте вы всегда получаете пару зависимостей, которые удобно размещаются в пути к классам.
Он использует небольшой файл clojure для описания зависимостей, например:
(defproject myprojecy "0.1.0-SNAPSHOT"
:description "A project."
:dependencies [[org.clojure/clojure "1.2.0-beta1"]
[org.clojure/clojure-contrib "1.2.0-beta1"]]
:dev-dependencies [[swank-clojure "1.2.1"]])
Вы можете видеть, что изменение версий - это всего лишь пара нажатий клавиш в редакторе. Leiningen загружает зависимости из сети, что делает проекты действительно маленькими и быстрыми для контроля версий.
Запуск lein swank запускает программу, а ответ в swank:
ptimac:cljhack pti$ lein swank
user=> Connection opened on local port 4005
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=4005]>
теперь вы можете подключиться к emacs, используя Mx slime-connect, и принять значения по умолчанию.
Вам просто нужно установить переменную swank-clojure-classpath, прежде чем вы нажмете Mx slime
Скажем, если у вас есть clojure.jar, clojure-contrib.jar и swank-clojure.jar в каталоге c:\jars
В скретч-буфер вставьте этот
(setq swank-clojure-classpath '("c:/jars/clojure.jar" "c:/jars/cloure-contrib.jar"
"c:/jars/swank-clojure.jar"))
Нажмите Cx Ce и Mx slime, это должно сделать это.
Для проверки деталей
https://github.com/jochu/swank-clojure/blob/master/swank-clojure.el#L32-34