scheme-program-name

schemeのコーディングにはemacsかviが定番だろう。私はemacsの派生版であるところのMeadowを使っている。emacsから対話的にschemeとやりとりするためにはschemeインタプリタの実行ファイル名を設定しておかなければならない。(しなくてもいいが、その場合は毎回入力する必要がある。)具体的にはscheme-program-name変数にインタプリタの実行ファイル名をバインドする。私の環境でならこうだ。

(setq scheme-program-name "gosh.exe -i")

ところが追加でオプションを指定しようとして問題がおきた。例えばこのようなケースだ。

(setq scheme-program-name "gosh.exe -i -E \"use slib\"")

普通にシェルから入力する分には問題ないはずのコマンドなのだが、emacs(というよりrun-scheme)では期待する挙動にならない。それというのもrun-schemeを実行するとscheme-program-nameに設定した文字列はscheme-args-to-list関数によって分解された上で実行ファイルに渡される様なのだが、scheme-args-to-list関数は問答無用で空白かタブで区切って分解するのだ。つまり上の例だとこのように分解される。

  • gosh.exe
  • -i
  • -E
  • "use
  • slib"

これではもちろん期待する挙動にならない。
空白をオプションに含めたい場合はどうすればよいのだろう。
とりあえず今回の場合はこうやって解決できるが…

(setq scheme-program-name "gosh.exe -i -u slib")

空白の扱いに関して解決できたわけではないのでイマイチな気分が残る。
Document ID: 027d192f83513782cae58c5ae000dbea