実は Gauche をインストールしていました。
もう二ヶ月前になりますが、多値関連のエントリで shiro さんに指摘を受けたことから、やっぱり Scheme の環境をちゃんと持っておかなくてはと思い、自分の環境に Gauche を install し、遊んでみることにしてました。
その後、全く構築した環境にも Web にも接触できない状況に陥ってしまっていたのでそのまま放置になってしまっていますが……
取り敢えず、その時にやっておいたことを記録しておこうかと。
インストールした環境は、
coLinux (Debian/Sarge) on Windows XP $ uname -a Linux XXXXXXX 2.6.10-co-0.6.2 #5 Sat Feb 5 10:19:16 IST 2005 i686 GNU/Linux
です。
Debian/Sarge で aptitude を使って install できるのは 0.8.3-3 でしたが、2006/2/17 時点の gauche の最新版は 0.8.6 でした。
;; 今確認してみたら、
;;
;; 2006/4/12
;; Gauche 0.8.7: 大きなメンテナンスリリース
;;
;; なんてことになってる……
この Debian/Sarge では、基本的には aptitude で package を管理する方針としているので、取り敢えずは aptitude で install しておくことにしました。
;; 今のところ make install しているのは Trac と CUnit だけ。
問題ある様なら、その時には source から install し直すということで。
aptitude で、gauche を選択して install すると、
[インストール] gauche [インストール] gauche-doc [インストール] gauche-gdbm [インストール] gauche-gl [インストール] gauche-gtk [依存関係によりインストール] freeglut3 [依存関係によりインストール] libglut3 [依存関係によりインストール] libgtkglext1 [依存関係によりインストール] slib [維持] gpdf
が install されました。
$ whereis gosh gosh: /usr/bin/gosh /usr/share/man/man1/gosh.1.gz $ gosh -V Gauche scheme interpreter, version 0.8.3 [utf-8,pthreads]
と gosh (0.8.3) が install されていることが確認できました。
但し、この時点で、
- XEmacs の Info で gauche-refj.info が途中から読めない。
- M-x run-scheme すると、scheme インタプリタに '-emacs' を渡す仕様の様だが、gosh は '-emacs' を理解せず、起動できない。
といった問題が。
多分、何れも XEmacs なせいかと。
gauche-refj.info の方は文字コードの問題かとも思ったのですが、GNU Info では読めるのでそうではない様です。
追ってみると、どうやら gauche-refj-info の Tag Table に書かれた offset がおかしい模様。(XEmacs の Info だと正しく解釈できないのかな?)
取り敢えず、各 node の offset を書き換えるコードを書いて実行。超適当ですが何とか読める様になりました。
run-scheme の方は、XEmacs の xscheme.el が、scheme インタプリタを起動する時のコマンドラインに、無条件に `-emacs' を付加する様にハードコードされていました。
xscheme.el に手を入れたくなかったので、scheme-program-name には wrapper となる sh script を登録し、その wrapper で `-emacs' を削ることにしました。
`-emacs' は、コマンドライン引数の先頭に指定される様になっていたので、その wrapper は、
#!/bin/sh shift gosh $*
としただけです。
これで動くには動いたんですが、
- 基本的に xscheme-mode では、FSF Emacs の scheme-mode と異なり、`gosh>' 等のプロンプトは表示しない様で、ちょっと判り辛いので、`-i' を渡す様に設定。
- font-lock を有効に。
- C-x C-e (advertised-xscheme-send-previous-expression) で評価時に、評価結果がポイントの直後に挿入されるのが気に入らないので、`?\n' を挿入する様にアドバイス。
- 上のせいで M-{n,p} (xscheme-yank-{pop,push}) 時に改行まで履歴として保持されてしまうので、履歴復元時には delete-char する様にアドバイス。
ということで、
;; C-x C-e したら改行してから評価結果を表示。 (defadvice xscheme-send-string (before exp-newline activate) (insert ?\n)) ;; xscheme-yank-{push,pop} では改行を削る。 (defadvice xscheme-yank-push (after shave-newline activate) (backward-delete-char)) (defadvice xscheme-yank-pop (after shave-newline-pop activate) (backward-delete-char)) ;; xscheme-mode で font-lock. (add-hook 'scheme-mode-hook #'(lambda () (font-lock-mode)))
として、取り敢えずは好みに使える様になりました。