首页 文章

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

提问于
浏览
10

我为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到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将被破坏 . 但是,对于黑客攻击常见的口齿不清而言,这是一个非常重要的元包 .


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


更新

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

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

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

在ELPA代码之后我也发现了'm using the CVS version of SLIME since I manually do (add-to-list ' load-path "~/.elisp/slime") . 这并没有解决问题 . 也许有一个魔法约会的版本与clojure一起使用?这里有一个人说CVS版适合他:http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s

3 回答

  • 1

    这是一个解决方案 . (使用钩子)
    这很丑但很方便 .

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

    Update 如果问题仍然存在于 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

    我最近一直在考虑同样的问题 . 问题是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,你应该在此之前需要粘液,因为这会破坏自动加载的目的 .

  • 8

相关问题