[英]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.