【发布时间】:2011-08-24 23:00:00
【问题描述】:
我在设置 SLIME 以同时使用 Clojure 和 Common Lisp 时遇到了麻烦。大多数 Clojure 开发人员倾向于使用可通过 ELPA 获得的精简 SLIME,该 SLIME 已被冻结以与 Clojure 兼容。然而,我也做了很多 Common Lisp hacking,而且我通常使用 SLIME CVS 版本(通过 QuickLisp 获得)。
Clojure 的 swank 实现存在一些众所周知的问题 - 它不适用于 autodoc(如果启用了 SLIME 冻结),它不支持模糊完成等某些东西。question 讨论相同的主题,答案表明我不行。
(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))))
(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)))))
解决方案在纸面上看起来很棒,但对我来说 slime-lisp-implementation-type 始终为零。 (对于 slime-lisp-implementation-type:connlocal 与本地连接相同)。
我基本上需要的只是一种知道我使用 Clojure 的 swank 运行 SLIME 以便能够修改有问题的设置的方法。
【问题讨论】:
-
您使用的是什么操作系统?我在 Mac OS X 中得到了这个工作(虽然它也可能在 Linux 中工作)并在这里写了博客 spacemanaki.posterous.com/… 并回答了这个问题 stackoverflow.com/questions/4551283/… 我能让它工作的唯一方法是拥有最新的 CVS SLIME 和ELPA SLIME 并根据我是在使用 Common Lisp 还是 Clojure 加载适当的。
-
我使用的是 Linux。我知道您提出的解决方案,但我不喜欢它 - 我只想一直使用 CVS SLIME。我可以有一个简单的功能,在我建立 clojure 连接之前切换我需要的东西,但我更愿意找到一种方法将这些设置自动挂钩到 slime 的启动中。
-
我也不喜欢它,但它有效。我会密切关注这个帖子,看看是否有人提出更好的建议,现在我已经放弃给这只牦牛剃毛了。
标签: emacs clojure common-lisp