使用slime-fancy(slime-autodoc)设置clojure和常见lisp的emacs

时间:2010-12-11 23:25:13

标签: emacs clojure lisp common-lisp slime

我为clojure和普通的lisp设置了emacs,但我也希望(slime-setup'(slime-fancy))用于常见的lisp。如果我将该行添加到init.el,clojure将无法工作:它给了我repl,但它在我运行任何代码后挂起。

我的配置

对于clojure:

  • 我通过ELPA设置了clojure-mode,slime,slime-repl
  • 我在项目目录中运行$ lein swank
  • 然后M-x slime-connect to hack clojure

对于常见的lisp,我将它放在init.el中的ELPA代码之后:

(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将被破坏。但是,对于黑客攻击普通的lisp来说,这是一个非常重要的元数据包。


有没有办法在不改变配置的情况下将它们设置为工作状态,并在需要切换语言时重新启动?


更新

我发现装有粘液的slime-autodoc是挂起的原因。

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

此配置允许运行常见的lisp和clojure SLIME。甚至同时。但没有史莱姆 - autodoc。

我也发现我正在使用SLIME的CVS版本,因为我在ELPA代码之后手动执行(add-to-list'load-path“〜/ .elisp / slime”)。这并没有解决问题。也许有一个魔法约会的版本与clojure一起使用?在这里,一个人说CVS版适合他:http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s

3 个答案:

答案 0 :(得分:8)

这是一个解决方案。 (使用挂钩)
这很难看但很方便。

(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)))))

答案 1 :(得分:4)

我最近一直在考虑同样的问题。问题是ELPA中的SLIME被削减了,对于Common Lisp来说几乎没用。解决问题的一种方法是从与ELPA包结账的相同日期检出CVS中的SLIME,并手动添加缺少的东西。 #clojure上有人告诉我他这样做了,解决方案有效。 我个人认为这样的解决方案非常难看,但是直到有人设法将Clojure支持转移到上游SLIME上才会有更好的解决方案。

或者你可以逐个添加功能到slime-setup,看看究竟是什么功能导致了Clojure评估的问题 - 毕竟粘性幻想只是一个只加载最流行的contrib功能的元特征。

顺便说一句,你不需要行

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

contrib dir将自动添加到加载路径,后端是默认值,如果你使用'slime-autoloads,你应该在此之前需要粘液,因为这会破坏自动加载的目的。

答案 2 :(得分:1)