2011年5月10日火曜日

Emacs anythig から hyperspec と cltl2 を引く


このエントリーをはてなブックマークに追加


こちらを参考に、そのままで動きました。
http://d.hatena.ne.jp/kitokitoki/20100912/p1

私はCygwinを使っていないですが、w3m.exe を cygwin でコンパイルされたものを利用しているのでパスの与え方だけ注意。

cltl2.el http://www.uuhaus.de/software/cltl2.el
ドキュメント http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/lang/lisp/doc/cltl/cltl_ht.tgz

dot.emacs は以下


;; HyperSpecのパスを指定
;; w3mにはcygwin形式のパスを渡す必要がある。
(require 'hyperspec)
(setq
 common-lisp-hyperspec-root "file:///cygdrive/c/export/home/.emacs.d/HyperSpec/"
 common-lisp-hyperspec-symbol-table (expand-file-name "~/.emacs.d/HyperSpec/Data/MapSym.txt"))

;; HyperSpecをemacs-w3mで起動
(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 をw3mで見る
(require 'cltl2)

;; cltl2 のパスを指定
;; w3mにはcygwin形式のパスを渡す必要がある。
(setq cltl2-root-url "file:///cygdrive/c/export/home/.emacs.d/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 を anything で引けるようにする
(eval-after-load "anything"
  '(progn
     (setq anything-c-source-hyperspec
           `((name . "Lookup Hyperspec")
             (candidates . (lambda ()
                             (let ((symbols nil))
                               (mapatoms #'(lambda (sym) (push (symbol-name sym) symbols))
                                         common-lisp-hyperspec-symbols)
                               symbols)))
             (action . (("Show Hyperspec" . hyperspec-lookup)))))

     (setq anything-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 anything-hyperspec-and-cltl2 ()
       (interactive)
       (anything (list anything-c-source-hyperspec anything-c-source-cltl2) (thing-at-point 'symbol)))))

(global-set-key "\C-cH" 'anything-hyperspec-and-cltl2)

0 件のコメント:

コメントを投稿