Inferior Gauche Mode

アキバに来たら、ちょっと足をのばして過橋米線でしょ。絶賛応援中[2007-02-25]→アキバに来たら、米線でしょ。
Last Modified: 2005-07-27 22:44:38


何?

Gaucheをもっと活用したいと思うのですが、すでにそこに動いているEmacs Lispを使ってしまって一向にGaucheを使いこなせるようになりません。

Gauche用のlisp-interaction-modeのようなものを作って、Emacsを起動したらそこにGaucheが動いているという状態にすれば何のストレスもなくGaucheを使えるようになるのではないかと思って作ったElispです。

主な機能

インタラクティブに評価

式の後で"C-x C-e"と打てば、ミニバッファに評価結果を表示します。

(iota 10)の後で"C-j"を打てば、評価結果をバッファに挿入します。

補完

Gauche標準の変数を補完するだけであれば、infoで十分ですが、inferior-gauche-modeではカレントモジュールから見える変数を補完できるようにします。

zero-to-nine-listを定義した上の状態で"M-TAB"を打てば、

と補完できます。

設定

ロードパスの通ったところにファイルを置いて、.emacsに
(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が動いているようにしてあります。

Download

inferior-gauche.el

Keys

起動
M-x inferior-gauche-mode
C-c C-s
goshプロセスを起動します。

既にプロセスが起動している場合、もしくはC-u C-c C-sとした場合にはミニバッファからプロセス名を読み取ります。読み取ったプロセス名と同じプロセス名でgoshが既に動いている場合にはそのプロセスを、無ければ読み取ったプロセス名を元にして新しくgoshを立ち上げて 現在のバッファからアクセスできるようにします。(igosh-start-process)

C-c C-q
(exit)を評価します。(igosh-exit-process)
C-c C-c
シグナルSIGINTを送ります。(igosh-interrupt-process)
C-j
カーソルの前のS式を評価して、結果をバッファに挿入します。

入力を必要とするプログラム、例えば(read)など、を評価してしまうとEmacsが固まります。この場合にはC-gとタイプしてから後述のigosh-inputで対処してください。(igosh-eval-print-last-sexp)

C-x C-e
カーソルの前のS式を評価して、結果をミニバッファに表示します。

C-jと異なり、結果が返るまでEmacsを止めることはしません。そのため、ひとつの式を評価している間に別の式をgoshに送ることができます。ただし、前に評価した式の結果が返らないうちに別の式を評価すると、期待したように動かない場合があります。例えば、

(begin (sys-sleep 5) 0)
1
の一行目をC-x C-eで評価したあとすぐに二行目をC-jで評価してみてください。(igosh-eval-last-sexp)
C-M-x
lisp-interaction-modeeval-defunに相当するものです。評価した結果はミニバッファに表示します。(igosh-eval-define)
C-c C-v
バッファ上のS式をすべて評価します。通常、最後の式の返り値をミニバッファに表示します。(igosh-eval-buffer)
M-C-i
現在のモジュールから見える変数名で補完します。(igosh-complete-symbol)
C-c C-d
#?=を挿入します。C-u C-c C-dで削除します。(igosh-insert-debug-print)
C-c C-i
goshへ入力をミニバッファから行ないます。

このとき、処理せずに溜め込んであるgoshからの出力も表示します。

(begin
  (display "gosh(2)> ")
  (flush-all-ports)
  (read))
これを、C-x C-eで評価したあと、C-c C-iを入力してみてください。(igosh-input)

更新履歴

Known Bugs

式の無いバッファで評価すると…

Comments


Creation Date: 2004-02-14 16:44:21
OKUYAMA Atsushi ()