连接到swank-server时出现异常

时间:2011-12-26 14:31:04

标签: emacs clojure slime leiningen swank

当尝试M-x slime-connect连接到在clojure应用程序中运行的swank服务器时,我得到一个用户>提示但是一旦我开始键入连接中断,应用程序抛出:

exception in read loop
java.lang.RuntimeException: Invalid token: swank::

在堆栈中我看到了:

unreadable message: (:emacs-rex (swank:autodoc (quote ("ns" "" swank::%cursor-marker%)) :print-right-margin 80) "user" :repl-thread 4)

当我开始粘液时,我得到:

Versions differ: 2010-07-21 (slime) vs. 20100404 (swank). Continue? (y or n)   

但这种不匹配should be OK

我的项目依赖项中有swank-clojure 1.3.3,我也安装了leiningen插件。我从应用程序内部使用(swank.swank/start-server :host "localhost" :port 4005)启动swank-server。

我的环境:

  • GNU Emacs 23.2.1关于debian squeeze(稳定)amd64
  • 通过debian存储库安装的粘液
  • sun-java6-jre
  • leiningen 1.6.2
  • swank-clojure 1.3.3
  • clojure 1.3.0

我还应该提到M-x clojure-jack-in工作正常,但我需要能够连接 远程。

版本不匹配可能是罪魁祸首吗?有人使用类似的工作设置吗?

2 个答案:

答案 0 :(得分:2)

您应升级到swank-clojure 1.4.0并使用与其捆绑的版本的粘液。在clojure模式中有一个'clojure-jack-in'命令,当你从一个clojure项目“插入”到swank时,它将处理粘液的加载。你看到的所有错误都将消失。 slime-disconnect [-all]是退出的正确方法。

答案 1 :(得分:0)

我卸载了debian版本的粘液,并通过ELPA安装了slime-repl。现在一切正常,尽管安装似乎因编译错误而失败:lime-repl.el:122:39:Error: No setf-method known for slime-connection-output-buffer

另一个问题是:什么是退出粘液的“礼貌”方式?如果我使用M-x slime-disconnect,它会在远程swank-server实例中导致异常:

java.lang.Exception: Error reading swank message