2013-07-08 29 views
2

有了这个最小的init文件:如何Hyperspec文件连接到Emacs的泥在MS Windows

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

一切似乎都工作,如粘液-EVAL-defun定义和煤泥完整的符号,除了仰视文档。 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") 

,不能正常工作。我不知道该错误是在该init文件还是在我正在使用的SLIME版本中,因为这是我第一次使用SLIME。

版本:

  • 微软Windows 7
  • 的Emacs版本24.3.1(可能是最新的稳定)
  • 泥版20130626.1151(从MELPA最新)(一位来自果酱说,它不能编译零我不知道这意味着什么,因此我使用一个从MELPA代替)
  • GNU CLISP 2.49(最新的稳定)

UPDATE

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

回答

8

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

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

0

假设泥是从emacs的包档案(优选​​MELPA)安装(这GNU CLISP安装),这里是从How to install Common Lisp and SLIME on MS Windows相关部分的组合:

假设注释出任何泥定制后从头开始代码你已经有了,通过将下面的代码应该package-initialize后评估你的init文件启动:

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

,做什么是定义我,煤泥,建立和确保函数只运行一次,如果你是那天使用SLIME。 my-slime-setup也是一个可以添加自己的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-setupmy-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进行测试。