簡體   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