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

kod*_*ddo 10 lisp emacs clojure common-lisp slime

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

我的配置

对于clojure:

  • 我通过ELPA设置了clojure-mode,slime,slime-repl
  • 我在项目目录中运行$ lein swank
  • 然后Mx slime-connect到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))
Run Code Online (Sandbox Code Playgroud)

因此,如果我取消注释最后一行,clojure将被破坏.但是,对于黑客攻击常见的口齿不清而言,这是一个非常重要的元包.


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


更新

我发现slime-autodoc装有粘液花式是导致挂起的原因.

(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)
Run Code Online (Sandbox Code Playgroud)

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

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

Kai*_*syu 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))))
Run Code Online (Sandbox Code Playgroud)

更新 如果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)))))
Run Code Online (Sandbox Code Playgroud)