1ヶ月ぐらい前からCommonLispを勉強してるけど、HyperSpecのドキュメントを見るとき いちいちWebページを見ていたら時間かかるし、シームレスじゃないので目も疲れるし、 いいことなかったのでストレスなく快適て閲覧できるようEmacsのewwでHackした。
検索機能としては、インタラクティブ検索とカーソル検索が2つが用意されてて とりあえず、こんな感じで見れるようになる
導入手順 1. 以下が前提となる ・ Emacs24以上 ・ Slimeを導入済み
2. HyperSpecドキュメントをローカルにダウンロードして解凍して任意の場所へ配置する。 1 2 3 cd ~/.emacs.d/sharewget ftp://ftp.lispworks.com/pub/software_tools/reference/HyperSpec-7-0.tar.gz tar xvfz HyperSpec-7-0.tar.gz
3. 設定ファイルへ追記 slimeのlibに置かれてるhyperspec.elをewwで動作するよう以下の関数を上書く。 ・ common-lisp-hyperspec ・ common-lisp-hyperspec-lookup-reader-macro ・ common-lisp-hyperspec-format
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 (setq common-lisp-hyperspec-root "~/.emacs.d/share/HyperSpec/" ) (defun common-lisp-hyperspec (symbol-name ) (interactive (list (common-lisp-hyperspec-read-symbol-name ))) (let ((name (common-lisp-hyperspec--strip-cl-package (downcase symbol-name)))) (cl-maplist (lambda (entry ) (eww-open-file (concat common-lisp-hyperspec-root "Body/" (car entry))) (when (cdr entry) (sleep-for 1.5 ))) (or (common-lisp-hyperspec--find name) (error "The symbol `%s' is not defined in Common Lisp" symbol-name))))) (defun common-lisp-hyperspec-lookup-reader-macro (macro ) (interactive (list (let ((completion-ignore-case t )) (completing-read "Look up reader-macro: " common-lisp-hyperspec--reader-macros nil t (common-lisp-hyperspec-reader-macro-at-point ))))) (eww-open-file (concat common-lisp-hyperspec-root "Body/" (gethash macro common-lisp-hyperspec--reader-macros)))) (defun common-lisp-hyperspec-format (character-name ) (interactive (list (common-lisp-hyperspec--read-format-character ))) (cl-maplist (lambda (entry ) (eww-open-file (common-lisp-hyperspec-section (car entry)))) (or (gethash character-name common-lisp-hyperspec--format-characters) (error "The symbol `%s' is not defined in Common Lisp" character-name)))) (defadvice common-lisp-hyperspec (around common-lisp-hyperspec-around activate) (let ((buf (current-buffer ))) ad-do-it (switch-to-buffer buf) (pop-to-buffer "*eww*" ))) (defadvice common-lisp-hyperspec-lookup-reader-macro (around common-lisp-hyperspec-lookup-reader-macro-around activate) (let ((buf (current-buffer ))) ad-do-it (switch-to-buffer buf) (pop-to-buffer "*eww*" ))) (defadvice common-lisp-hyperspec-format (around common-lisp-hyperspec-format activate) (let ((buf (current-buffer ))) ad-do-it (switch-to-buffer buf) (pop-to-buffer "*eww*" )))
defadviceは画面分割してポップアップでewwのwindowを開くようにしてる。 これでラクになれるはず。