Emacsには他のLispシステム上でプログラムを実行する機能があります。 LispプロセスをEmacsの下位プロセスとして実行し、 それに式を渡して評価させることができます。 また、Lispプログラムを編集するEmacsバッファの中で変更した 関数定義をそのまま下位のLispプロセスに渡すこともできます。
下位のLispプロセスを実行するには、M-x run-lispと打ちます。
このコマンドは、シェルコマンドとしてlisp
と入力するのと同じ
lisp
という名前のプログラムを実行し、
プログラムの入出力は`*lisp*'という名前のEmacsバッファを
介してやりとりされます。
つまり、Lispからの『端末出力』はバッファに入りポイントを進め、
Lispへの『端末入力』はバッファのテキストから取られます。
(実行したいLisp実行ファイルの名前を変えるには、
変数inferior-lisp-program
を設定する。)
Lispに入力を与えるには、バッファの末尾に移動してから入力を打鍵し、 最後に<RET>を打ちます。 `*lisp*'バッファは下位lisp(inferior lisp)モードになっていて、 シェル(shell)モード(see Shell Mode) のほとんどの機能にlispモードの特別な特性を組み合わせています。 サブプロセスに1行を送るという<RET>の定義は、 シェル(shell)モードの機能の1つです。
外部Lispで実行するプログラムのソースファイルにはlispモードを使います。 このモードはM-x lisp-modeで選択できます。 また、ほとんどのLispシステムで使われる .l1 や.lspや.lispで終る名前のファイルには このモードが自動的に使われます。
実行中のLispプログラムの関数を編集しているとき、
変更した定義を下位のLispプロセスに送るもっとも簡単な方法は
キーC-M-xです。
lispモードでは、このキーは関数lisp-eval-defun
を実行します。
この関数は、ポイントの周りや直後の関数定義を探し、
それをLispプロセスの入力へ送ります。
(Emacsはカレントバッファが何であるかに関わりなく、
どんな下位プロセスにも入力を送ることができる。)
C-M-xコマンドの (任意のLispシステムで実行するプログラムの編集用)lispモードでの意味と (Emacsで実行するLispプログラムの編集用)emacs-lispモードでの意味を 比較してみましょう。 どちらのモードでもポイントを含む関数定義をインストールしますが、 関連するLisp環境がどこにあるかに応じて、その方法は異なります。 See Executing Lisp。