настройка 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 будет автоматически добавлен в путь загрузки, по умолчанию используется серверная часть, и если вы используете - слизи-автопогрузчики, вам следует потребовать слизи до этого, так как это противоречит цели автопогрузчика.