xlisp-mode出来た。

arcとclispxyzzyから使えるようにするメジャーモード。例によって、配布はこっちで。
メジャーモードといっても、ほとんどlispmodeに乗っかる形だけどね。

インタプリタを別のプロセスで実行して、そこへ式を投げるだけの代物なので、インタプリタで動かすものなら他のものにも使えそう。
とりあえずこれで、arcを試すのが楽になる。インデントは、紫藤のlispmodeを使わせてもらって、適当に直していけばいいし。
本格的に使うようになったら、コンパイラに回すとか、makefileを作るとかも必要になるかな。

今回は、他のバッファの状態を、バッファのローカル変数に登録しなければならない処理があるので、変に手間取ってしまった。
バッファを移動するとローカル変数が変わってしまうので、評価順が曖昧になっていると上手く行かない。
(setq 呼び出し元バッファのローカル変数 呼び出し先バッファのサブプロセス)
を、そのままsetq内部でサブプロセスを呼び出して、呼び出し元に保存しようとしたら、書き込まれる変数の方が後に評価されるようなので、呼び出し先の変数として保存されていた。
呼び出し元以外ではローカル変数にしていないので、広域変数としての値が呼ばれる。
これが分からなくて、呼び出し先で変数が参照できてしまうことと、呼び出し元に違うプロセスが登録されていることで混乱した。
一度しかsetqしてないのに、どうして違う値が出るのかと思っていたが、前の状態を残していただけだった。中身を全部記録していれば、すぐ分かったんだろうな。