その他、gauche-mode の軽い設定など。
C-x C-e で評価すると、評価結果が minibuffer に表示されますが、末尾に改行が付いていて、不必要に minibuffer が拡がってしまうので、
;; C-x C-e 時に minibuffer が不必要に拡がるのを抑止。 (defadvice gauche-message (around expand-echoarea activate) "Not expand echo area, when the message was single-line." (let* ((fmt (ad-get-arg 0)) (message (ad-get-args 1)) (lines (with-temp-buffer (insert (car message)) (count-lines-buffer)))) (if (= 1 lines) (message fmt (car message)) ad-do-it)))
としてそれを抑止してみました。
Emacs Lisp の M-: と同様の動作をして貰うために、
;; eval-expression. (defun gauche-util-eval-expression (sexp) "Evaluate SEXP and print value in minibuffer." (interactive (list (read-string "Sexp: "))) (gauche-send-string-to-process (gauche-process) sexp)) (add-hook 'gauche-mode-hook (lambda () (define-key (current-local-map) ;; [(control c) (meta :)] 'gauche-util-eval-expression))) [(meta control :)] 'gauche-util-eval-expression)))
として M-C-: で minibuffer での評価もできる様にしてみました。
また、function-menu (fume) が動作してくれなくて悲しかったので、
;; setting for function-menu (fume). (add-to-list 'fume-function-name-regexp-alist ;; Gauche '(gauche-mode . fume-function-name-regexp-scheme)) (add-to-list 'fume-find-function-name-method-alist ;; Gauche '(gauche-mode . fume-find-next-scheme-function)) (add-hook 'gauche-mode-hook (lambda () (define-key (current-local-map) [(control c) r] 'fume-rescan-buffer) (define-key (current-local-map) [(meta p)] 'fume-goto-previous-function) (define-key (current-local-map) [(meta n)] 'fume-goto-next-function)))
と設定を追加しました。
こんな設定で、それなりに Emacs Lisp ライクな利用環境になってます。
あとは debugger かなあ。;; これは苦しいなあ。
しかし、gauche を使う設定とかで現実逃避してただけで、多値のこととか、
(use gauche.collection) #<undef> (fold2 (lambda (elt a b) (values (min elt a) (max elt b))) 256 0 (list 1 2 34 5 678 9 0 987 6 54 321)) 0, 987
とかして、おおー、多値になるなるー、ってしただけです。
全く何やってんだか……。