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)

試してみたい方は、こちら:

http://homepage.mac.com/WebObjects/FileSharing.woa/wa/swank-gauche-0.1.tgz.1.tgz?a=downloadFile&user=tak_szk&path=.Public/swank-gauche-0.1.tgz