EmacsにSLIMEを導入

まずは, ファイルのダウンロード. 当然, 本家からとってくる.
自分は, tgzのを取ってきた(なんか最近, tgzばっかだなあ. 昔は, zipばっかだったのに).
んで解凍.

$ tar xvzf slime-2.0.tgz

慣れたもんだ.



次に, こいつをEmacsのロードパスの通ったところに置く.
自分の場合, ~/site-lisp/slimeとした.
.emacsへの追記はこんな感じ.

(setq load-path (cons (expand-file-name "~/site-lisp/slime") load-path))

そして, 最低限これだけ書いてやる.

;; Lisp用にSLIMEの設定

;; lisp-mode
;(setq inferior-lisp-program "clisp")    ; clisp用
(setq inferior-lisp-program "sbcl")     ; sbcl用

(require 'slime)
(slime-setup)

あとは, Emacsを再起動して, M-x slimeとする.
すると, .lispファイルのコンパイルっぽいのが始まる(もしかしたら単純にロードしてるだけかも).
それが終了すると, ちょっとかっこいいアニメーションっぽいが出た後, こんなのが起動して使えるようになる.

; SLIME 2006-04-20
CL-USER> (+ 3 7)
10

関数のタブ補完が効いて, すごく使い易い.
REPLってやつらしい.
主なキーバインドは, TABで補完,
C-cC-cでSIGINTを使って, Lispプロセスに割込む(らしい. よく分からない. デバッガ?),
C-cC-oで直前のLisp式の結果をクリア, C-cC-tでバッファをクリアなど.
ここでも参考に〜.
あ, あと終了は, M-x slime-repl-quitみたい.


HyperSpecを引けるようにしたり.
HyperSpecって知らなかったんだけど, どうもCommon Lispの仕様書だかマニュアルだかみたい.
ここから取ってきた. 当然英語. 日本語ないのかなあ・・・.
とりあえず, doc/hyperspecディレクトリに解凍.

$ tar xvzf HyperSpec-7.0.tgz

これで, ~/doc/hyperspecディレクトリに, ディレクトHyperSpec, ファイルHyperSpec-Legalese.text, HyperSpec-README.textができる.
あとは, こいつを読むように設定を書けばいいのかな. ここを参考に記述.

;; HyperSpecを読み込む.
(setq common-lisp-hyperspec-root
      (concat "file://" (expand-file-name "~/doc/hyperspec/HyperSpec/"))
      common-lisp-hyperspec-symbol-table
      (expand-file-name "~/doc/hyperspec/HyperSpec/Data/Map_Sym.txt"))

あとは, M-x hyperspec-lookupで関数とか変数の検索が可能.
このマニュアルは, ブラウザで閲覧することになる.
これを見るのにFirefoxはさすがに使いづらいから, emacs-w3mを使うように設定する.
まずは, 自分のMomongaには, w3mだけで他のものが全然入ってなかったのでそれを片っぱしから入れる.

$ sudo yum install w3mmee-img.i686 w3mmee.i686 w3m-cgi.i686 w3mmee-cgi.i686 w3m-img.i686 w3m-emacs.noarch

入れてるこいつらの詳細がよく分かってなかったりする(^^;)
とりあえず, ここを参考に.emacsを記述.
昔設定したはずだけど起動しなくてちょっと焦った.

;; w3mの設定
(require 'w3m-load)

こいつを書き忘れてたみたい. 前は書かなくても使えたんだけどね. なんでだろう?
そしてやっと本題のHyperSpecw3mで見る, へ.
簡単に検索したら, .emacsへこれを足しゃいいみたい.

;; HyperSpecを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))

これでw3mHyperSpecが見れた.



日本語の利用. これも先程のサイトの設定をそのまま適用.

;; 日本語利用のための設定(Lisp 環境側の対応も必要)
(setq slime-net-coding-system 'utf-8-unix)

これで'(a b "日本語")とか書いても大丈夫.


slime-autodoc-modeを設定.

;; カーソル付近にある単語の情報を表示
(slime-autodoc-mode)

REPLなんかで, printとかsetqとか関数の近くにカーソルがあるとき, その関数の取る引数をミニバッファに表示してくれる.



あとは, lisp-modeでマイナーモードslime-modeが起動するようにした.
ちょっと疲れた.
これすごいな. まだやることはある. キーバインドの確認や.
でもこれはメモらない(と思う). M-x help-for-help mとか参考にしたサイトにある情報でなんとか調べる.