Sunday, 4 September 2011

Clojure, emacs, slime

Очень часто наблюдаю в своём окружение определённые проблемы с тем, как заставить работать совместно clojure и emacs. Собственно, оно и не мудрено, так как большая часть tutorial-ов на эту тему обязательным образом используют систему пакетов elpa (где все пакеты устарели уже очень давно), и рекомендуют использовать clojure-swank для запуска clojure (которая не хочет очевидным способом решать эту задачу, и заставляет плясать с бубном).
Ниже будет описан способ относительно просто получить желаемое, используя leinigen как систему управления проектом и как пускалку clojure. Какие-нибудь элементы дополнительной настройки появятся позже, когда опуюликую свои конфиги.

Перед началом работы вы имеете какой-нибудь линукс, с установленным emacs-ом и openjdk. Они устанавливаются для fedora:
sudo yum install emacs java
если у вас ubuntu, то запустите synaptics и просто найдите эти пакеты в списке (на сколько я помню пакеты имеют другие имена).

Установка leiningen
  1. Загружаете установочный скрипт по этой ссылке: https://raw.github.com/technomancy/leiningen/stable/bin/lein
  2. Далее вам необходимо открыть терминал и скопировать скачанный файл в одну из директорий, предназначенных для запуска приложений.
    sudo cp <загруженный файл> /usr/bin/
    
  3. Затем необходимо дать эту файлу права на запуск.
    sudo chmod +x /usr/bin/lein
    
  4. Готово.
Установка slime и clojure-mode
Есть как минимум три способа установить эти расширения emacs.
  • elpa (очень всё устаревшее)
  • руками (очень не удобно обновлять и переносить)
  • el-get
Последний вариант представляет из себя инструмент, который содержит множество рецептов, позволяющих загружать исходные коды расширений автоматически. Это позволяет не только легко обновляться, но и иметь свой конфиг чистым, от огромного количества чужих кодов. Так как большинство расширений лежат просто в репозиториях, то вам нужно установить git (часто нужный вам пакет называется git-core). Так же для сборки slime необходимо, что бы был установлен пакет texlive.
Для установки el-get сделайте следующее:
  1. Запустите emacs и откройте ваш .emacs файл (находится в домашней директории, открыть файл: C-x C-f).
  2. Вставте в него следующий код:
    (add-to-list 'load-path "~/.emacs.d/el-get/el-get")
    (unless (require 'el-get nil t)
      (url-retrieve
       "https://github.com/dimitri/el-get/raw/master/el-get-install.el"
       (lambda (s)
         (end-of-buffer)
         (eval-print-last-sexp))))
    (setq el-get-verbose)
    (el-get 'sync '(slime clojure-mode))
    (require 'slime)
    (require 'clojure-mode)
    
  3. Перезапустите emacs два раза, в первый запуск будет установлен el-get и будет написано об ошибках. Во второй остальные пакеты.
Первый проект
  1. Создайте пустой проект.
    lein new
    
  2. Добавьте в файл проекта зависимость от clojure-swank. Для этого приведите содержимое файла project.clj в созданном проекте к следующему виду:
    (defproject test "1.0.0-SNAPSHOT"
      :description "FIXME: write description"
      :dependencies [[org.clojure/clojure "1.2.1"]]
      :dev-dependencies [[swank-clojure "1.2.1"]])
    
  3. Установите зависимости.
    lein deps
    
  4. Запустите сервер с вашим проектом.
    lein swank
Подключение из emacs-а

  1. Запустите emacs.
  2. Выполните команду slime-connect (для этого надо нажать M-x (альт + x) и ввести команду).
  3. Согласитесь со стандартным адресом и портом. Если вас предупредят о несовпадение версий, всё в порядке.
  4. Откройте любой исходник на clojure и используйте.

No comments:

Post a comment