xyzzyscheme-modeをgaucheで使う。

  1. scheme-modeを取得。http://fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
  2. site-init.lか.xyzzyに以下を記述
;;; SCHEME-MODE.L SETTING
(load-library "scheme-mode")
(push '("\\.scm$" . scheme-mode) *auto-mode-alist*)
(setf *scheme-process-open-hook*
      #'(lambda (buffer)
          (if (buffer-process)
              (buffer-process)
            (progn
              (set-buffer buffer)
              (make-process
               (format
;                nil "\"~A\""
                nil "~A"
                (map-slash-to-backslash "gosh -i")))))))
  1. 以上でいいのだけど、同じバッファに出力されるのは苦手なので、scheme-mode.lに以下の修正
(defvar *scheme-run-buffer-name* "*run-scheme*")
(defun scheme-default-read-filter (proc text)
;	(insert text) (refresh-screen))
  (let ((prev-buf (selected-buffer))
        (prev-win (selected-window)))
    (set-window (get-buffer-window *scheme-run-buffer-name*))
    (set-buffer *scheme-run-buffer-name*)
    (end-of-buffer)(insert text)(end-of-buffer)
    (set-buffer-modified-p nil *scheme-run-buffer-name*)
    (set-window prev-win)
    (set-buffer prev-buf)
    (refresh-screen)))


(defun scheme-open-process ()
  (interactive)
  (when (null *scheme-process*)
    ;(let* ((process (funcall *scheme-process-open-hook* (selected-buffer))))
    (let* ((process (funcall *scheme-process-open-hook* (switch-to-buffer *scheme-run-buffer-name*))))
      (setf *scheme-process* process)
      (when *scheme-process*
        (set-process-sentinel
         *scheme-process*
         #'(lambda (proc)
             (when *scheme-process-close-hook*
               (funcall *scheme-process-close-hook* proc))
             (setf *scheme-process* nil)))
        (set-process-filter *scheme-process* *scheme-process-read-filter*))))
  *scheme-process*)

.scmファイルを開くか、任意のバッファでM-x scheme-modeでscheme-modeを起動。
C-jで、式を評価できる。