10

我为 clojure 和 common lisp 设置了 emacs,但我也想要为 common lisp 设置 (slime-setup '(slime-fancy))。如果我将该行添加到 init.el,clojure 将不起作用:它给了我 repl,但在我运行任何代码后它挂起。

我的配置

对于clojure:

  • 我通过 ELPA 设置了 clojure-mode、slime、slime-repl
  • 我在项目目录中运行 $ lein swank
  • 然后 Mx slime-connect 破解 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 就会被破坏。但是 slime-fancy 是一个非常重要的用于破解 common lisp 的元包。


当我需要切换语言时,有没有办法在不更改配置和重新启动的情况下将它们都设置为工作?


更新

我发现加载了 slime-fancy 的 slime-autodoc 是导致挂起的原因。

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

此配置允许运行常见的 lisp 和 clojure SLIME。甚至同时。但没有粘液自动文档。

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

4

3 回答 3

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)))))
于 2010-12-13T02:35:59.657 回答
4

我最近一直在考虑同样的问题。问题是 ELPA 中的 SLIME 被精简了,对 Common Lisp 几乎没有用处。一种可以规避问题的方法是从 CVS 中检出 SLIME,与检出 ELPA 包的日期相同,然后手动添加缺失的内容。#clojure 上的某个人告诉我他这样做了,并且解决方案奏效了。我个人觉得这样的解决方案非常丑陋,但除非有人设法将 Clojure 支持引入上游 SLIME,否则不会有更好的解决方案。

或者,您可以一个一个地向 slime-setup 添加功能,看看究竟是什么功能导致了 Clojure 评估问题 - 毕竟 slime-fancy 只是一个元功能,它只加载最流行的贡献功能。

顺便说一句,你不需要线条

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

contrib 目录将自动添加到加载路径,后端是默认的,如果你使用'slime-autoloads,你应该在此之前需要slime,因为这违背了自动加载的目的。

于 2010-12-12T06:51:18.807 回答
1

我使用 sbcl、clozure 和 clojure:让 Emacs、Slime、Common Lisp(SBCL、Clozure)和 Clojure 协同工作

于 2010-12-13T17:59:03.987 回答