HyperSpec と CLtL2 を Helm から引けるようにします。 anything とまったく一緒です。
HyperSpec は ANSI Common Lispのリファレンス、CLtL2 は Common Lisp the Language, 2nd Editionの略記で仕様書風の読み物。CLTL1 → ANSI と仕様がFIXするまでの経緯等にもついて記載されているらしいです。私はほぼ HyperSpec しか使っていません。
設定方法は以下
まずそれぞれの入手先です。
■HyperSpec リンク先の There is a downloadable archive of the HyperSpec here から入手。
■CLTL2 リンク先の HTML version から入手
■hyperspec.el は SLIMEに付属
■cltl2.el
そのほか、Helm と emacs-w3m を事前に動くように設定しておく必要がありますが、ここでの説明は省略します。
後は、以下の elisp を .emacs や init,el 等へ記載すると動きます。
;; --------------------------------
;; HyperSpec を emacs-w3m で参照する
;; --------------------------------
(require 'hyperspec)
;; HyperSpecのパスを指定
(setq
common-lisp-hyperspec-root
"file:///home/.emacs.d/cl-docs/HyperSpec/"
common-lisp-hyperspec-symbol-table
(expand-file-name "~/.emacs.d/cl-docs/HyperSpec/Data/Map_Sym.txt"))
(defadvice common-lisp-hyperspec
(around hyperspec-lookup-w3m () activate)
(let* ((window-configuration (current-window-configuration))
(browse-url-browser-function
`(lambda (url new-window)
(w3m-browse-url url nil)
(let ((hs-map (copy-keymap w3m-mode-map)))
(define-key hs-map (kbd "q")
(lambda ()
(interactive)
(kill-buffer nil)
(set-window-configuration ,window-configuration)))
(use-local-map hs-map)))))
ad-do-it))
;; --------------------------------
;; CLTL2 を emacs-w3m で参照する
;; --------------------------------
(require 'cltl2)
;; cltl2 の html を配置したパスを指定(w3mから参照できる形式)
(setq cltl2-root-url "file:///home/.emacs.d/cl-docs/cltl/")
(defadvice cltl2-lookup (around cltl2-lookup-by-w3m () activate)
(let* ((window-configuration (current-window-configuration))
(browse-url-browser-function
`(lambda (url new-window)
(w3m-browse-url url nil)
(let ((cltl2-map (copy-keymap w3m-mode-map)))
(define-key cltl2-map (kbd "q")
(lambda ()
(interactive)
(kill-buffer nil)
(set-window-configuration ,window-configuration)))
(use-local-map cltl2-map)))))
ad-do-it))
;; --------------------------------
;; Hyperspec と cltl2 を helm から引く
;; --------------------------------
(eval-after-load "helm"
'(progn
(setq helm-c-source-hyperspec
`((name . "Lookup Hyperspec")
(candidates . (lambda ()
(let ((symbols nil))
(mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
imple-common-lisp-hyperspec-symbols)
symbols)))
(action . (("Show Hyperspec" . hyperspec-lookup)))))
(setq helm-c-source-cltl2
`((name . "Lookup CLTL2")
(candidates . (lambda ()
(let ((symbols nil))
(mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
cltl2-symbols)
symbols)))
(action . (("Show CLTL2" . cltl2-lookup)))))
(defun helm-hyperspec-and-cltl2 ()
(interactive)
(helm '(helm-c-source-hyperspec helm-c-source-cltl2) (thing-at-point 'symbol)))))
(global-set-key "\C-cH" 'helm-hyperspec-and-cltl2)
;; 2014/05/11
;; 以下、slime2.4 からバージョンアップしたら
;; HyperSpecが引けなくなったので、旧 hyperspec.el から移植
(defvar imple-common-lisp-hyperspec-symbols (make-vector 67 0))
(defun imple-intern-clhs-symbol (string relative-url)
(let ((symbol (intern string imple-common-lisp-hyperspec-symbols)))
(if (boundp symbol)
(push relative-url (symbol-value symbol))
(set symbol (list relative-url)))))
(defun imple-hyperspec--get-one-line ()
(prog1
(delete* ?\n (thing-at-point 'line))
(forward-line)))
(defun imple-hyperspec-make-symbles ()
(if common-lisp-hyperspec-symbol-table
(with-current-buffer (find-file-noselect
common-lisp-hyperspec-symbol-table)
(goto-char (point-min))
(while (< (point) (point-max))
(let* ((symbol-name (downcase (imple-hyperspec--get-one-line)))
(relative-url (imple-hyperspec--get-one-line)))
(imple-intern-clhs-symbol symbol-name
(subseq relative-url
(1+ (position ?\/ relative-url
:from-end t))))))
(kill-buffer (current-buffer)))))
(imple-hyperspec-make-symbles)

0 件のコメント:
コメントを投稿