QuickTips

为 Slime 设置一份本地的 HyperSpec 拷贝

Posted by David Gu on May 15, 2016

The Common Lisp HyperSpec is a hypertext html document which is not the ANSI Common Lisp standard, but is based on it with permission from ANSI and X3.1 Originally developed by Kent Pitman at Harlequin,2 it is now copyrighted by LispWorks Ltd.[3] It is approximately 15MB of data in 2,300 files which contain approximately 105,000 hyperlinks.3

在 Common Lisp 的开发过程中,总是会碰到大量要查询文档的情况。在这篇 Quicktips 里,我们暂时只介绍查询内置函数、宏以及特殊操作符的方法。

当然,所谓“内置”,我们指的是 “CL” Package 中被导出(Exported)的符号。这些符号包括例如大家所熟知的 CARCDR;也有大家可能不是那么了解或说不常用到的诸如 logical-pathname-translations 或者 dribble 这样的函数。那么后者这种情况下,当我们需要查询其文档时,HyperSpec 就变成最有力也最权威的工具。

值得庆幸的是,Slime 模式下为从 HyperSpec 查询符号提供了快捷键:

C-c C-d h 或 M-x slime-hyperspec-lookup 在《Common Lisp Hyperspec》里查找当前光标处的符号。它使用常用的 hyperspec.el 来在浏览器里显示相应的部分。Hyperspec 可以在网络上或者在 common-lisp-hyperspec-root 处,默认打开的浏览器通过 browse-url-browser-function 指定。

所以,如果在 Slime 模式下如果我们想查询 logical-pathname-translations,只需要把光标移到函数名上,然后使用快捷键 C-c C-d h 或者全称命令 M-x slime-hyperspec-lookup 便可以看到其文档;但是根据环境配置的不同,Emacs 会 –

  • 要么跳转到外部的浏览器上来显示文档,如下图:

External Web Browser

  • 要么使用 Emacs 本身的例如 eww 这样的浏览器来显示,如下图:

Internal Web Browser

使用第二种方式显示文档的方法只是在 Emacs 的配置文件里加一行 (setq browse-url-browser-function 'eww-browse-url) 代码。而目前 HyperSpecLispWorks 公司所维护,由于“本朝”网络的尴尬,有时候会出现无法访问或者访问过慢的情况。所以我们建议可以从这个链接下载一份离线版的拷贝,然后在 Emacs 的配置文件中再加上这样一行代码即可实现对 HyperSpec 的离线查询与访问:(setq common-lisp-hyperspec-root "file:///where/you/put/hyperspec/HyperSpec-7-0/HyperSpec/")

动手试试吧 :-D

  1. “CLHS: About the Common Lisp HyperSpec (TM)”. Lispworks.com. Retrieved 2013-10-05. 

  2. “Common Lisp HyperSpec (TM)”. Cs.cmu.edu. Retrieved 2013-10-05. 

  3. Wikipedia, Common Lisp HyperSpec, https://en.wikipedia.org/wiki/Common_Lisp_HyperSpec