xyzzy 偽scheme-mode

今迄WindowsSchemeプログラム書くときは、普段使ってるxyzzyでは前に拾ったscheme-mode*1やとインデントが上手くいかんのでDr.Schemeを使ってた。が、いい加減我慢できなくなってきたんで、なんとかならんもんかと思ってちょっと探ってみた。
何やらlisp-modeを改造して、任意のシンボルを他のシンボルと同様に扱うことができるようにしてくれた人がいるらしい。

これを元に、似非Schemeモードをでっち上げることにする。
まず、アーカイブをダウンロードしてきてlispmode.lをscheme-mode.lにリネームする。
次に、変数の衝突を避けるためにファイルの中のlisp-をscheme-に全て置換。*indent-def-file*も*sindent-def-file*か何かに置換。勿論mode-nameとかもSchemeに。
あと先頭の後あたりに

(defvar *scheme-keyword-hash-table* nil)
(defvar *scheme-keyword-file* "Scheme")

(defun scheme-mode () の真ん中あたりに

  (and *scheme-keyword-file*
      (null *scheme-keyword-hash-table*)
      (setq *scheme-keyword-hash-table*
            (load-keyword-file *scheme-keyword-file* t)))
  (when *scheme-keyword-hash-table*
    (make-local-variable 'keyword-hash-table)
    (setq keyword-hash-table *scheme-keyword-hash-table*))

とか挿入して、このファイルをsite-lispに突っこむ。んで色分けファイルetc/Schemeを作る。これは、

;*0
define
let
;*1
eq?

とかやって、;*数字で色分けのグループを作るだけらしい。(参考)

で、これで動くけど、まだインデントが直ってへんので改造lisp-modeで追加された機能を使ってなんとかする。

とりあえずダンプファイルを消してscheme-modeを立ち上げ、M-iを押してdefine,defunとか、LispにないSchemeのシンボルを、Lispのシンボルと同様に扱うように指定してやればとりあえずインデント問題解決。バンザーイ。式の評価とかできんけど。というか、lisp-modeに色付けするだけの気がしてきた。

あと、ifのインデントをどうしても理解できない感じにやってくれるんで、indent-hookのテーブルから外すの推奨。なんでこんな気持ち悪い仕様になってるんやろう?(lispだと誰もifなんか使わないから気付かないとか?)

しかし、未だにemacs-lispとかxyzzy-lispとかはよくわからんなぁ。lispがわからんというより、各処理系の仕様がよくわからん。いや、俺に勉強する気がないだけか。

*1:なんか今配布してへんっぽい