[英]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。
版本:
UPDATE
Cc Cd f RET print RET
工作正常。 这与slime-describe-function
绑定,该slime-describe-function
未记录,未在SLIME菜单中列出。 还有slime-documentation-lookup
与Cc 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.