настройка emacs для clojure и common lisp с slime-fancy (slime-autodoc)
Я настроил emacs для clojure и common lisp, но я также хочу (slime-setup '(slime-fancy)) для common lisp. Если я добавлю эту строку в init.el, clojure не будет работать: он дает мне repl, но он зависает после запуска любого кода.
Мои настройки
для clojure:
- Я настроил clojure-mode, slime, slime-repl через ELPA
- я запускаю $ lein swank в каталоге проекта
- затем M-x слизь-подключение к hack в Clojure
для common lisp я помещаю это после кода ELPA в init.Эл:
(add-to-list 'load-path "~/.elisp/slime")
(require 'slime)
(add-to-list 'slime-lisp-implementations '(sbcl ("/opt/local/bin/sbcl") :coding-system utf-8-unix))
;; (slime-setup '(slime-fancy))
поэтому, если я раскомментирую последнюю строку, clojure будет сломан. Но slime-fancy очень важный мета-пакет для взлома common lisp.
есть ли способ настроить их на работу без изменения конфигурации и перезапуска, когда мне нужно переключить языки?
обновление
я обнаружил, что slime-autodoc загружен slime-fancy является причиной зависаний.
(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)
эта конфигурация позволяет запускать как общие шламы lisp, так и Clojure. Даже одновременно. Но без слизи-Автодок.
Я также обнаружил, что использую версию CVS SLIME, так как я делаю это вручную (добавить в список "load-path"~/.elisp / slime") после кода ELPA. Это не решает проблему. Может быть, есть версия с какой-то волшебной даты, которая работает с clojure? Здесь парень говорит, что версия CVS работает для него: http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s
3 ответов
вот решение. (используя крючки)
Это некрасиво, но очень удобно.
(add-hook 'slime-connected-hook
(lambda ()
(if (string= (slime-lisp-implementation-type) "Clojure")
(setq slime-use-autodoc-mode nil)
(setq slime-use-autodoc-mode t))
))
(add-hook 'slime-mode-hook
(lambda ()
(if (eq major-mode 'clojure-mode)
(slime-autodoc-mode 0)
(slime-autodoc-mode 1))))
обновление
Если проблема все еще существует на slime-repl
buffer, попробуйте следующий код:
(add-hook 'slime-repl-mode-hook
(lambda ()
(if (string= (slime-lisp-implementation-type) "Clojure")
(progn (setq slime-use-autodoc-mode nil)
(slime-autodoc-mode 0))
(progn (setq slime-use-autodoc-mode t)
(slime-autodoc-mode 1)))))
недавно я рассматривал ту же проблему. Проблема в том, что слизь в ELPA обрезается и почти бесполезна для обычного Lisp. Один из способов обойти проблему-проверить слизь из CVS с той же даты, когда проверка была сделана для пакета ELPA, и вручную добавить недостающие вещи. Кто-то на #clojure сказал мне, что он сделал это, и решение сработало. Я лично нахожу такое решение довольно уродливым, но пока кому-то не удастся получить поддержку Clojure выше по течению не будет лучшей слизи.
в качестве альтернативы вы можете добавить функции в slime-setup один за другим и посмотреть, какая именно функция вызывает проблему с оценкой Clojure - ведь slime-fancy-это просто метафизика, которая просто загружает самые популярные функции contrib.
кстати, вам не нужны строки
(add-to-list 'load-path "~/.elisp/slime/contrib")
(setq slime-backend "~/.elisp/slime/swank-loader.lisp")
(require 'slime)
contrib dir будет автоматически добавлен в путь загрузки, по умолчанию используется серверная часть, и если вы используете - слизи-автопогрузчики, вам следует потребовать слизи до этого, так как это противоречит цели автопогрузчика.
Я использую sbcl, clozure и clojure:получение Emacs, Slime, Common Lisp (SBCL, Clozure) и Clojure для совместной работы