Gauche用のSwankサーバ
Slimy hackathon#1には用事があって参加出来なかったのですが、何かやりたいなと思っていまして、gauche用のSwankサーバを書いてみることにしました。
mit-schemeのSwankやswank.lispのコード、あとは*slime-events*バッファへ表示される情報を基に、何とか遊べるレベルまでの実装にはなりました。
以下の様な機能を実装してあります。
- シンボルの補完 (c-p-c形式も)
- replでの評価 (read writeも可)
- 編集バッファでの評価(C-x C-e, C-c C-c どっちもやることは同じですが…)
以下のバージョンで確認しています。
- Slime 2009-03-09
- Gauche 0.8.13
以下の設定を.emacsに追加して、M-x gaucheでreplが起動出来ます。
(push "<path-to-slime-dir>/slime/contrib" load-path) (require 'slime-scheme) (slime-scheme-init) (setq slime-lisp-implementations '((gauche ("gosh") :init gauche-init))) (defun gauche-init (file encoding) (format "%S\n\n" `(begin (add-load-path "<path-to-swank-gauche-dir>") ;; add load path to swank-gauche.scm (require "swank-gauche") (import swank-gauche) (start-swank ,file)))) (defun gauche () (interactive) (slime 'gauche)) (defun find-gauche-package () (interactive) (let ((case-fold-search t) (regexp (concat "^(select-module\\>[ \t']*" "\\([^)]+\\)[ \t]*)"))) (save-excursion (when (or (re-search-backward regexp nil t) (re-search-forward regexp nil t)) (match-string-no-properties 1))))) (setq slime-find-buffer-package-function 'find-gauche-package)
試してみたい方は、こちら: