Настройка emacs как для clojure, так и для общего lisp с slime-fancy (slime-autodoc) - PullRequest
10 голосов
/ 12 декабря 2010

Я настроил emacs как для clojure, так и для общего lisp, но я также хочу (slime-setup '(slime-fancy)) для общего lisp.Если я добавлю эту строку в init.el, clojure не будет работать: он дает мне repl, но он зависает после запуска любого кода.

Моя конфигурация

Для clojure:

  • Я настраиваю clojure-mode, slime, slime-repl через ELPA
  • Я запускаю $ lein swank в каталоге проекта
  • Затем Mx slime-connect для взлома clojure

Для обычного lisp я помещаю это после кода ELPA в init.el:

(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 очень важный метапакет для взлома распространенного шрифта.


Есть ли способ настроить их оба на работу без изменения конфигурации и перезапуска, когда мне нужно переключить языки?


Обновление

Я обнаружил, что slime-autodoc, загруженный slime-fancy, является причиной зависаний.

(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)

Эта конфигурация позволяет запускать как общие lisp, так и clojure SLIME.Даже одновременно.Но без slime-autodoc.

Я также обнаружил, что использую версию SLIME для CVS, поскольку вручную (добавление в список «путь загрузки» ~ / .elisp / slime ») после кода ELPA,Это не решает проблему.Может быть, есть версия от какой-то волшебной даты, которая работает с clojure?Вот парень говорит, что у него работает версия CVS: http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s

Ответы [ 3 ]

8 голосов
/ 13 декабря 2010

Вот решение.(используя крючки)Это ужасно, но довольно удобно.

(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, попробуйте следующий код:

(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)))))
4 голосов
/ 12 декабря 2010

Я недавно размышлял над той же проблемой.Проблема в том, что SLIME в ELPA урезан и почти бесполезен для Common Lisp.Один из способов обойти проблему - извлечь SLIME из CVS с той же даты, когда была сделана проверка для пакета ELPA, и вручную добавить недостающий материал.Кто-то на #clojure сказал мне, что он сделал это, и решение сработало.Лично я нахожу такое решение довольно уродливым, но пока кому-то не удастся получить поддержку Clojure в восходящем SLIME, лучшего не будет.

В качестве альтернативы вы можете добавлять функции в настройку slime одну за другой ипосмотрите, какая именно функция вызывает проблему с оценкой Clojure - ведь слизистая фантазия - это просто мета-функция, которая загружает самые популярные функции contrib.

Кстати, вам не нужны строки

(add-to-list 'load-path "~/.elisp/slime/contrib")
(setq slime-backend "~/.elisp/slime/swank-loader.lisp")
(require 'slime)

Contributer dir будет автоматически добавлен в путь загрузки, серверная часть будет использоваться по умолчанию, и если вы используете 'slime-autoloads, вам следует использовать slime до этого, так как это отрицает цель автозагрузки.

1 голос
/ 13 декабря 2010
...