基本的構成を確立する - lisp-cookbook-ja/common-lisp GitHub Wiki
基本的構成を確立する
- eli は the Emacs-Lisp Interface の略で、Franz社が提供するLisp統合開発環境です。
- 処理系は Allegro Common Lisp のみに対応しています。
- Emacs は GNU Emacs (18 以降) と XEmacs に対応しているようです。
- このエントリでは eli の基本的な構成を確立する手順を説明します。
- 公式マニュアル も提供されていますので、このエントリの主な価値は日本語で書いてあるということです。
取得と配置
- Allegro Common Lisp の配布に同梱されています。EmacsWiki等での提供は、このエントリ執筆時点では存在しません。
- Allegro Common Lisp をインストールしたディレクトリの中に、eliディレクトリとxeliディレクトリがあり、ここにフラットにelispファイルが存在します。xeliディレクトリの中身は、ほとんどがeliディレクトリの中のファイルへのシンボリックリンクです。
- 結局、Allegro Common Lisp の取得と配置以外は何もしなくてもOKです。
設定
- .emacs などの Emacs 初期化ファイルに次の行を加えます。
;; Allegro Common Lisp を配置した位置を/usr/local/acl181とします。
;; Emacs の場合
(load "/usr/local/acl81/eli/fi-site-init")
;; XEmacs の場合
(load "/usr/local/acl81/xeli/fi-site-init")
REPLの起動と終了
- REPL の起動は、M-x fi:common-lisp でOKです。REPL 起動時に Lisp image ファイル等を聞かれますので、入力します。入力のデフォルト値を指定しておくには、.emacs等で、
(setq fi:common-lisp-image-name "/usr/local/acl81/alisp")
(setq fi:common-lisp-image-file "/usr/local/acl81/alisp.dxl")
(setq fi:common-lisp-directory "~/tmp/")
などと指定しておきます。いつも同じならば、「もうちょっと整備するときは」のところのexamplesにあるように run-common-lisp を定義してしまうのがよいでしょう。
-
この手順の場合、Common Lisp は Emacs のサブプロセスとして起動されます。
-
REPLの終了は、REPL 上で :exit と入力します。
-
REPL 起動時の引数指定は、Emacs を再起動するかしない限り、残りつづけます。なので、M-x fi:common-lisp とすると対話なしに、以前指定した指定で Lisp が起動します。例えば、mlisp に切り替えるためなど起動時引数を変更することがREPL再起動の目的である場合は、C-u M-x fi:common-lisp としてください。再度対話的に起動できます。
モードについて
- fi:common-lisp で起動したREPL(バッファ)のメジャーモードは、Inferior Common Lisp モードになります。
- eli にはたくさんのモードが用意されています。一覧は次のとおりです。
fi:inferior-common-lisp-mode
fi:lisp-listener-mode
fi:common-lisp-mode
fi:definition-mode
fi:inverse-definition-mode
fi:scan-stack-mode
fi:shell-mode
fi:su-mode
fi:remote-su-mode
fi:telnet-mode
fi:rlogin-mode
- この中でもっとも利用頻度が高いのは、fi:common-lisp-mode でしょう。Lisp のソースファイルを編集するためのメジャーモードです。
fi:common-lisp-mode について
- 編集対象である Common Lisp ソースファイルの解釈について EmacsとLispが間違いなくコミュニケーションするために、package と readtable を指定することが可能です。
- 特段指定しなくとも、package については、Emacs が Common Lisp ソースファイルをパースして、(in-package ...) というマクロの存在を関知して自動的に設定してくれますので、問題なく動作します。
- 指定には Emacs の mode specification (別名 file mode line) を使います。フルに指定する例は次のとおりです。
;; -*- mode: fi:common-lisp-mode; package: mypack; readtable: myrt -*-
(in-package :mypack)
(eval-when (compile
load
eval)
(setq *readtable* (named-readtable :myrt)))
各種マイナーモードとの相性
-
Paredit、Show-Paren、Yas/Minor、Auto-Complete 等と一緒に使ったところ、気になる衝突はありませんでした。
-
Redshank は、C-c C-s が衝突しているので調整が必要です。
-
Inferior Common Lisp mode : C-c C-s fi:re-search-forward-input
-
Common Lisp mode : C-c C-s fi:lisp-eval-or-compile-last-sexp
-
Redshank mode : C-c C-s redshank-complete-form
もうちょっと整備するときは
- eli/examples/emacs.el misc/dot-emacs.elに .emacs のちょっと便利な設定例があり、参考になります。