
Gaucheをもっと活用したいと思うのですが、すでにそこに動いているEmacs Lispを使ってしまって一向にGaucheを使いこなせるようになりません。
Gauche用のlisp-interaction-modeのようなものを作って、Emacsを起動したらそこにGaucheが動いているという状態にすれば何のストレスもなくGaucheを使えるようになるのではないかと思って作ったElispです。
C-x C-e"と打てば、ミニバッファに評価結果を表示します。
(iota 10)の後で"C-j"を打てば、評価結果をバッファに挿入します。

inferior-gauche-modeではカレントモジュールから見える変数を補完できるようにします。
zero-to-nine-listを定義した上の状態で"M-TAB"を打てば、

と補完できます。
(require 'inferior-gauche)等を書いておけば、"
M-x inferior-gauche-mode"で起動します。私は、
(require 'inferior-gauche)
(setq auto-mode-alist
(cons '("\\.scm$" . inferior-gauche-mode) auto-mode-alist))
(setq default-major-mode 'inferior-gauche-mode)
(inferior-gauche-mode)として、Emacsが立ち上がったとき"*scratch*"バッファでGaucheが動いているようにしてあります。M-x inferior-gauche-modegoshプロセスを起動します。既にプロセスが起動している場合、もしくはC-u C-c C-sとした場合にはミニバッファからプロセス名を読み取ります。読み取ったプロセス名と同じプロセス名でgoshが既に動いている場合にはそのプロセスを、無ければ読み取ったプロセス名を元にして新しくgoshを立ち上げて 現在のバッファからアクセスできるようにします。(igosh-start-process)
(exit)を評価します。(igosh-exit-process)SIGINTを送ります。(igosh-interrupt-process)入力を必要とするプログラム、例えば(read)など、を評価してしまうとEmacsが固まります。この場合にはC-gとタイプしてから後述のigosh-inputで対処してください。(igosh-eval-print-last-sexp)
C-jと異なり、結果が返るまでEmacsを止めることはしません。そのため、ひとつの式を評価している間に別の式をgoshに送ることができます。ただし、前に評価した式の結果が返らないうちに別の式を評価すると、期待したように動かない場合があります。例えば、
(begin (sys-sleep 5) 0) 1の一行目を
C-x C-eで評価したあとすぐに二行目をC-jで評価してみてください。(igosh-eval-last-sexp)lisp-interaction-modeのeval-defunに相当するものです。評価した結果はミニバッファに表示します。(igosh-eval-define)igosh-eval-buffer)igosh-complete-symbol)#?=を挿入します。C-u C-c C-dで削除します。(igosh-insert-debug-print)goshへ入力をミニバッファから行ないます。このとき、処理せずに溜め込んであるgoshからの出力も表示します。
(begin (display "gosh(2)> ") (flush-all-ports) (read))これを、
C-x C-eで評価したあと、C-c C-iを入力してみてください。(igosh-input)clへの依存を解消。[2005-07-27 22:35:04]Lukeさんのご指摘からclに依存しているlist-lengthを使ってしまっていることがわかりました。list-lengthでなければならない理由はないので、lengthに変更しました。
M-TABを繰り返して入力したときに、補完候補のウィンドウをスクロールするよう 変更しました。
内部を大幅に整理しました。関数名等、以前のものとの互換性は無くなっています。(以前のもの inferior-gauche.el.old)