繁体   English   中英

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

[英]How to connect Hyperspec documentation to Emacs SLIME on MS Windows

使用这个最小的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。 Mx slime-describe-symbol RET print 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(最新稳定版)

UPDATE

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

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

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

假设SLIME是从emacs包存档(最好是MELPA)安装的(并且安装了GNU CLISP),这里是如何在MS Windows上安装Common Lisp和SLIME的相关部分的组合:

假设在评论出您已经拥有的任何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缓冲区中执行Mx slime-describe-symbol RET print RET时,它应该在另一个缓冲区中显示PRINT的描述。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM