如何将Hyperspec文档连接到MS Windows上的Emacs SLIME

时间:2013-07-08 19:26:05

标签: emacs common-lisp slime

使用这个最小的init文件:

(setq package-load-list '((slime t)))
(setq inferior-lisp-program "clisp")
(package-initialize)
(setq package-enable-at-startup nil)
(require 'slime)
(slime-setup)
(slime)
(find-file "~/t/del.lisp")

除了查找文档之外,一切似乎都有效,例如slime-eval-defun和slime-complete-symbol。 M-x粘液描述符号RET打印RET导致此错误:

CLHS-ROOT: variable *CLHS-ROOT-DEFAULT* has no value

我需要在init文件中添加什么才能使其正常工作?

我还尝试下载hyperspec tar文件并将其解压缩到一个目录,这段代码:

(setq package-load-list '((slime t)))
(setq inferior-lisp-program "clisp"
      common-lisp-hyperspec-root "c:/run/HyperSpec/"
      common-lisp-hyperspec-symbol-table "c:/run/HyperSpec/Data/Map_Sym.txt")
(package-initialize)
(setq package-enable-at-startup nil)
(require 'slime)
(slime-setup)
(slime)
(find-file "~/t/del.lisp")

这也不起作用。我不知道这个bug是在那个init文件中,还是在我正在使用的SLIME版本中,因为这是我第一次使用SLIME。

版本:

  • MS Windows 7
  • Emacs版本24.3.1(可能是最新的稳定版)
  • SLIME版本20130626.1151(来自MELPA的最新版本)(一个来自Marmalade说它无法编译为零,我不知道这意味着什么,因此我使用的是MELPA中的一个)
  • GNU CLISP 2.49(最新稳定版)

更新

C-c C-d f RET print RET运行正常。这绑定到slime-describe-function,这是未记录的,并未在SLIME菜单中列出。还有slime-documentation-lookup绑定到C-c C-d C-d,它可以在浏览器中打开变量(不仅仅是函数)的文档,并且也可以。看起来只有`slime-describe-symbol不起作用。

2 个答案:

答案 0 :(得分:8)

我还没有在Windows上完成它,但如果我是你,我会尝试使用Quicklisp:(ql:quickload "clhs")并按照打印的指示进行操作。

我也会通过(ql:quickload "quicklisp-slime-helper")从Quicklisp获得SLIME,但是如果你的粘液工作正常,则没有真正需要。

答案 1 :(得分:0)

假设SLIME是从emacs包存档(最好是MELPA)安装的(并且安装了GNU CLISP),这里是How to install Common Lisp and SLIME on MS Windows的相关部分的组合:

假设在评论出您已有的任何SLIME自定义代码后从头开始,首先将以下代码放入您的init文件中,该文件应在package-initialize后进行评估:

(setq inferior-lisp-program "clisp")
(setq slime-auto-connect 'ask)

(defun my-slime-setup ()
  (require 'slime)
  (slime-setup))
(defvar my--slime-setup-done nil)
(defun my-slime-setup-once ()
  (unless my--slime-setup-done
    (my-slime-setup)
    (setq my--slime-setup-done t)))
(defadvice lisp-mode (before my-slime-setup-once activate)
  (my-slime-setup-once))

这样做的目的是定义my-slime-setup,如果你当天使用SLIME,请确保该函数只运行一次。 my-slime-setup也是一个容器,您可以添加自己的SLIME自定义代码。

现在将下载的文档连接到SLIME,解压缩下载的存档,您将获得一个名为Hyperspec的文件夹,然后将该文件夹移动到Emacs bin目录或其父目录或其祖父目录目录,将以下代码放在Emacs init文件中。

(defun my-hyperspec-setup ()
  (let ((dir (locate-dominating-file invocation-directory "HyperSpec/")))
    (if dir
        (progn
          (setq common-lisp-hyperspec-root (expand-file-name "HyperSpec/" dir)))
      (warn "No HyperSpec directory found"))))

并将my-hyperspec-setup添加到my-slime-setup,如下所示:

(defun my-slime-setup ()
  (my-hyperspec-setup)
  (require 'slime)
  (slime-setup))

并重新启动Emacs。

现在当你在lisp缓冲区中执行M-x slime-describe-symbol RET print RET时,它应该在另一个缓冲区中显示PRINT的描述。

我应该承认,我从自己的文章中采购,并在大约8个月后回答我自己的问题。答案是使用MELPA的最新SLIME和香草GNU Emacs进行测试的。