2010年8月29日日曜日

gnupack + NTEmacs23 で SBCL/SLIME


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


今まで単品のNTEmacs上で構築していたSBCL + SLIME + HyperSpec(emacs-w3m)環境を、gnupack上へ移行してみる。

必要なもの
SBCL
SLIME
cygwin用w3m
emacs-w3m

gnupackはC:直下にC:\gnupackとして配置されていることを前提とした手順は以下
■SBCLのインストール
SBCLは標準インストールだと、Program Files以下に配置されてしまうためパスに空白が入り都合が悪いのでインストール先を変える。
既にインストールされている場合は、一度アンインストールしてから下記パスへインストールする。

C:\gnupack\app\sbcl

gnupack環境変数の設定

C:\gnupack\config.ini を編集
太字部分を追記する
--------------------------------------------------
[SetEnv]
    _cygwin_    = %inst_dir%\app\cygwin\1.7.5
    _local_     = %inst_dir%\app\cygwin\local
    _mingw_     = %inst_dir%\app\mingw\tdm
    _font_      = MS ゴシック
   ;_font_      = M+2VM+IPAG circle
   ;_lang_      = ja_JP.utf8
    _lang_      = ja_JP.cp932

    CYGWIN_DIR  = %_cygwin_%
    EMACS_DIR   = %inst_dir%\app\emacs\23.2
    GVIM_DIR    = %inst_dir%\app\vim
    SBCL_HOME   = C:\gnupack\app\sbcl

    HOME        = %inst_dir%\home
    TEMP        = %TEMP%\gnupack
    TMP         = %TMP%\gnupack
    SHELL       = bash
    CYGWIN      = nodosfilewarning noenvcache strip_title title upcaseenv tty
    MAKE_MODE   = unix
    PERL5LIB    = %inst_dir%\app\cygwin\perl\lib\perl5
    TZ          = JST-9
    LC_ALL      = %_lang_%
    LC_CTYPE    = %_lang_%
    LANG        = %_lang_%
    PATH        = %EMACS_DIR%\bin;GVIM_DIR%\bin
    PATH        = %PATH%;%_mingw_%\bin;%_local_%\bin;%_cygwin_%\bin
    PATH        = %PATH%;%windir%\system32;%windir%;%windir%\system32\Wbem;%SBCL_HOME%
--------------------------------------------------
bashからsbclが起動できることを確認しておこう。

# sbcl
This is SBCL 1.0.37, an implementation of ANSI Common Lisp.
More information about SBCL is available at .

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk.  "Your Kitten of Death awaits!"
*

■w3mのインストール
gnupackにw3mを組み込む。といってもすでにコンパイル済みのバイナリが配布されているので、とってきて展開するだけ。

cygwin用w3mを取得し、展開すると以下のようになる。

usr/bin
usr/libexec
usr/share

このbin, libexec, share を c:\gnupack\app\cygwin\local へ上書きコピーする。これだけで使えるようになる。
もし足りないパッケージがあったら、起動時に警告されるのでcygwinのコンパイル済みパッケージから持ってくればよい。

■emac-w3mのインストール
特に考える必要は無し。cvsからパッケージを取得してきて、make; make install か、load-lisp されたディレクトリへそのままコピーしてやればよい。
今回は c:\gnupack\app\emacs\site-lisp は配置している。


■SLIMEの取得
これもcvsから取得してきて、load-pathの通ったディレクトリへ配置するだけ。
今回は c:\gnupack\home\.emacs.d\slimeへ配置した。


■HyperSpecのインストール
公式サイトからダウンロードしてくるだけ。
今回は c:\gnupack\home\.emacs.d\HyperSpec へ配置した。


■.emacsの編集
以下の追記
--------------------------------------------
(require 'w3m-load)
(add-to-list 'load-path "~/.emacs.d/slime-2010-07-11")
(add-to-list 'load-path "~/.emacs.d/slime-2010-07-11/contrib")

; sbclのパスを記述
(setq inferior-lisp-program "sbcl")
(setq slime-net-coding-system 'utf-8-unix)

(add-hook 'lisp-mode-hook (lambda ()
                            (slime-mode t)
                            (show-paren-mode)))

(require 'slime)
(slime-setup '(slime-repl))

; C-c L で slimeを起動
(defun my-slime (&optional command coding-system)
  (interactive)
  (switch-to-buffer-other-window
   (get-buffer-create "*lisp*"))
  (slime command coding-system))
(global-set-key "\C-cL" 'my-slime)

; slimeバッファを切換え
(global-set-key "\C-cs" 'slime-selector)

;; HyperSpecのパスを指定
(require 'hyperspec)
(setq
 common-lisp-hyperspec-root "file:///cygdrive/c/gnupack/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))

;; 検索したい関数の上で C-c H で検索する。
(global-set-key "\C-cH" 'hyperspec-lookup)
--------------------------------------------

これでM-x slime して起動してくれば設定は成功。
関数等にカーソルを合わせてC-cHでHyperSpecが検索できればこっちもOK。


■参考書籍
入門GNU Emacs第3版

入門GNU Emacs第3版

価格:3,990円(税込、送料別)