Запуск lein swank (вызывающего clojure сервера) с помощью elisp - PullRequest
1 голос
/ 28 июля 2010

Как спросили и ответили здесь .Я мог бы использовать 'lein swank' для запуска clojure на Aquamacs.

Мне нужно автоматизировать запуск 'lein swank' перед запуском слизи / clojure.

  • Q: Есть ли способк этому автоматически?Я имею в виду, как я могу запустить команду 'lein swank' автоматически, когда вызывается slime / clojure (Mx slime-connect).
  • В: Если мне нужно придумать код elisp для запуска 'lein swank', как я могу это сделать?

Добавлено

По материалам Юргена Хетцеляответ, я изменил elisp следующим образом.

(defun lein-swank ()
(interactive)
(let ((default-directory (locate-dominating-file default-directory "/Users/smcho/bin/leiningen")))
  (when (not default-directory)
    (error "Not in a Leiningen project."))
  ;; you can customize slime-port using .dir-locals.el
  (let ((proc (start-process "lein-swank" nil "/Users/smcho/bin/leiningen/bin/lein" "swank" (number-to-string 4005))))
    (when proc
    (process-put proc :output nil)
    (set-process-sentinel proc (lambda (proc event)
                     (message "%s%s: `%S'" 
                          (process-get proc :output)
                          proc (replace-regexp-in-string "\n" "" event))))
    (set-process-filter proc
                (lambda (proc output)
                  ;; record last line of output until connected (possible error message)
                  (process-put proc :output (concat (process-get proc :output) output))
                  (when (string-match "Connection opened on" output)
                (slime-connect "localhost" 4005)
                ;; no need to further process output
                (set-process-filter proc nil))))
    (message "Starting swank server...")))))

Но я получил эту ошибку.

No project.clj found in this directory. lein-swank: `"exited abnormally with code 1"'.

Я обнаружил, что мне нужно изменить pwd на ~ / bin / leiningen, чтобы запустить lein swank.Просто поместите бинарный файл в строку PATH, чтобы он не работал.

1 Ответ

1 голос
/ 29 июля 2010

Я сделал суть для этой работы:

http://gist.github.com/419364

Просто используйте интерактивную команду «M-x lein-swank», которая вызовет команду в текущем каталоге и подключится к нему.

Я сделал несколько улучшений для lein-swank :

  1. команда lein-swank теперь можно настраивать: вы можете использовать Leiningen, если его каталог bin не является частью вашей среды PATH .

  2. Добавлен каталог в качестве интерактивного аргумента: если project.clj не может быть найдено в доминирующем местоположении вашего текущего каталога, вы можете указать местоположение.

...