言語

Emacs のインタラクティブな環境のもとで、
Emacs Lisp 以外の Lisp を使う方法
Inferior Lisp Mode

0.概要

 基本的な考えは、あらかじめ Emacs Lisp 以外の lisp を子プロセスとして走らせておき、 そこへ Lisp Mode のバッファから S式を送りこんで評価させようとするものである。例として ディレクトリ/foo の下に barLisp があるものとして、これを子プロセスとして走らせる場合を 考える。
なお、Win-DOS の場合は C:\foo\barLisp.exe を子プロセスとして走らせることになる。
あらかじめ、barLisp の名前を lisp に変えておく、この lisp を子プロセスとして起動しようと すると、Emacs は変数 exec-path に指定されたディレクトリの下の lisp というプログラムを探す。exec-path には .profileなどで設定されている環境変数のPATHの値が入っているので、すでに環境変数で lisp のディレクトリが与えられていれば問題ないが、そうでない場合は、.emacs につぎのような式を与えておくとよい。



(setq exec-path (cons "c:/foo" exec-path))



1. Lisp Mode にする。

 lisp(barLisp) のS式を書いたり、編集するためにLisp Modeにする必要がある。そこで 次のようにして、Lisp Mode にする。



M-x lisp-mode

 または、あらかじめS式のファイルが用意されているなら、ファイルの最初 の空でない行に、次ぎのようなモード指定を行なっておいてもよい。


;;; -*-lisp-*-

あるいは、読み込むファイル名のサフィックスが .l や .lisp であれば自動的にLisp Modeになる。




2. カレントディレクトリを /foo にする。

 lisp の種類によっては、実行時に同じディレクトリの他のモジュールを必要とする ものもあるのでカレントディレクトリをlispのある/fooにする。これはつぎのようにすれ ばよい。

M-x cd

 Change default directory ときいてくるので /foo とする。
そして、念のためつぎのようにしてカレントディレクトリが /foo になっていることを確かめる。


M-x pwd




3. lisp を子プロセスとして走らせる。

 次のようにすればよい。



M-x run-lisp

 run-lisp は exec-path に指定されたディレクトリの下の lisp という名前の プログラムを探す。 見つければ、それを実行して Inferior Lisp Mode にはいる。 見つからなければエラー・メッセージがでる。




4. Inferior Lisp Mode の Window を2分割する。

 次のようにしてWindow を2分割する。



C-x 2



5. Window の1つを Lisp Mode のバッファへスイッチバックする。

 2分割したInferior Lisp Mode の Window の1つを、つぎのようにしてLisp Modeの Windowにする。



C-x b



6. Inferior Lisp Mode と Lisp Mode の Window を同時に表示しておく。

 Lisp Mode のバッファに任意のS式を入力する。このS式をC-M-xコマンドで子プロセスの lispへおくる。lispが評価した結果は Inferior Lisp Modeバッファに表示される。
なお、C-M-x は Esc C-x でもよい。

 もちろん、直接 Inferior Lisp ModeバッファにS式を入力すれば インタラクティブに応答がある。




7. 解説

 lisp の子プロセスは、一つ走っていれば、どの Lisp Mode のバッファでも それを利用できる。どの Lisp Mode のバッファも同じ lisp の子プロセスを 使うことができる。

 一度 lisp の子プロセスを起動して Lisp Mode のバッファに戻れば、評価 したいS式(lisp の式)を C-M-x コマンドを用いて、その子プロセスに渡すこ とができる。

 C-M-x は概念的にはカーソルの前にある式を評価のために lisp の子プロセス に渡すと考えられる。

 実際には以下のように行なわれている。

 1. 式をテンポラリ・ファイルにセーブして、

 2.(load ファイル名)というコマンドを子プロセスに送る。

 このファイル名はテンポラリ・ファイルの名前である。


 Emacs はデフォルトで次のような load コマンドを使う。



(load "%s")

 ここで "%s" は、Emacs によってテンポラリ・ファイルの名前が 入れられる。

参考:Hewlett Packard「GNU Emacs 完全ガイド(下)」

言語


言語の目次へ戻る

ホームに戻る