Gauche関連のメモ書き。
はてなブックマークで情報集めてたけど、一度outputしないと埋もれそうだったので備忘録化。
tips
今日学んだ関数。
(add-load-path "/path/to/dir/") (load "some.scm")
GaucheとEmacs
開発環境は整えないといけない。
EmacsでのGuacheキーバインドがまとめてあるサイト見つけた。
ひとまず今の私のemacs.el
~/.emacs.d/site-lisp/にはauto-completeが入ってる。
;load library (setq load-path (append (list (expand-file-name "~/.emacs.d/site-lisp/")) load-path)) ;~file go to backup-dir (setq backup-dir "~/.emacs.d/backup/") (setq backup-by-copying t) (fset 'make-backup-file-name '(lambda (file) (concat (expand-file-name backup-dir) (file-name-nondirectory file)))) ;display transient-mark (transient-mark-mode 1) ;display line-number (line-number-mode t) (setq-default tab-width 2) (setq tab-width 2) (setq-default tab-stop-list '(0 1 2 3 4 6 8 12 16 20)) (setq-default indent-tabs-mode nil) ;Show tab, zenkaku-space, white spaces at end of line ;; http://www.bookshelf.jp/soft/meadow_26.html#SEC317 (defface my-face-tab '((t (:background "Yellow"))) nil :group 'my-faces) (defface my-face-zenkaku-spc '((t (:background "LightBlue"))) nil :group 'my-faces) (defface my-face-spc-at-eol '((t (:foreground "Red" :underline t))) nil :group 'my-faces) (defvar my-face-tab 'my-face-tab) (defvar my-face-zenkaku-spc 'my-face-zenkaku-spc) (defvar my-face-spc-at-eol 'my-face-spc-at-eol) (defadvice font-lock-mode (before my-font-lock-mode ()) (font-lock-add-keywords major-mode '(("\t" 0 my-face-tab append) (" " 0 my-face-zenkaku-spc append) ("[ \t]+$" 0 my-face-spc-at-eol append) ))) (ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode) (ad-activate 'font-lock-mode) ;settings for text file (add-hook 'text-mode-hook '(lambda () (progn (font-lock-mode t) (font-lock-fontify-buffer)))) ;auto-complete ;;http://www.emacswiki.org/emacs/AutoComplete (require 'auto-complete) (global-auto-complete-mode t) ;gauche ;;http://www.atmarkit.co.jp/fcoding/articles/gauche/02/gauche02c.html ;;http://www.rokujyouhitoma.com/javapg/cat34/2008/12/ ;; Gaucheのデフォルトエンコード (setq process-coding-system-alist (cons '("gosh" utf-8 . utf-8) process-coding-system-alist)) ;; goshインタプリンタのパスに合わせる。-iは対話モードを意味する。 ;(setq scheme-program-name "/usr/local/bin/gosh -i") (setq scheme-program-name "gosh-rl -i") ;; schemeモードとrun-schemeモードにcmuscheme.elを使用します。 (autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t) (autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t) ;; ウィンドウを2つに分け、一方でgoshインタプリタを実行するコマンドを定義する。 (defun scheme-other-window () "Run scheme on other window" (interactive) (switch-to-buffer-other-window (get-buffer-create "*scheme*")) (run-scheme scheme-program-name)) ;; そのコマンドをCtrl-csで呼び出す。 (define-key global-map "\C-cs" 'scheme-other-window) ;; 直前/直簿の括弧に対応する括弧を点滅する (show-paren-mode) ;; 以下はインデントの定義 (put 'and-let* 'scheme-indent-function 1) (put 'begin0 'scheme-indent-function 0) (put 'call-with-client-socket 'scheme-indent-function 1) (put 'call-with-input-conversion 'scheme-indent-function 1) (put 'call-with-input-file 'scheme-indent-function 1) (put 'call-with-input-process 'scheme-indent-function 1) (put 'call-with-input-string 'scheme-indent-function 1) (put 'call-with-iterator 'scheme-indent-function 1) (put 'call-with-output-conversion 'scheme-indent-function 1) (put 'call-with-output-file 'scheme-indent-function 1) (put 'call-with-output-string 'scheme-indent-function 0) (put 'call-with-temporary-file 'scheme-indent-function 1) (put 'call-with-values 'scheme-indent-function 1) (put 'dolist 'scheme-indent-function 1) (put 'dotimes 'scheme-indent-function 1) (put 'if-match 'scheme-indent-function 2) (put 'let*-values 'scheme-indent-function 1) (put 'let-args 'scheme-indent-function 2) (put 'let-keywords* 'scheme-indent-function 2) (put 'let-match 'scheme-indent-function 2) (put 'let-optionals* 'scheme-indent-function 2) (put 'let-syntax 'scheme-indent-function 1) (put 'let-values 'scheme-indent-function 1) (put 'let/cc 'scheme-indent-function 1) (put 'let1 'scheme-indent-function 2) (put 'letrec-syntax 'scheme-indent-function 1) (put 'make 'scheme-indent-function 1) (put 'multiple-value-bind 'scheme-indent-function 2) (put 'match 'scheme-indent-function 1) (put 'parameterize 'scheme-indent-function 1) (put 'parse-options 'scheme-indent-function 1) (put 'receive 'scheme-indent-function 2) (put 'rxmatch-case 'scheme-indent-function 1) (put 'rxmatch-cond 'scheme-indent-function 0) (put 'rxmatch-if 'scheme-indent-function 2) (put 'rxmatch-let 'scheme-indent-function 2) (put 'syntax-rules 'scheme-indent-function 1) (put 'unless 'scheme-indent-function 1) (put 'until 'scheme-indent-function 1) (put 'when 'scheme-indent-function 1) (put 'while 'scheme-indent-function 1) (put 'with-builder 'scheme-indent-function 1) (put 'with-error-handler 'scheme-indent-function 0) (put 'with-error-to-port 'scheme-indent-function 1) (put 'with-input-convrsion 'scheme-indent-function 1) (put 'with-input-from-port 'scheme-indent-function 1) (put 'with-input-from-process 'scheme-indent-function 1) (put 'with-input-from-string 'scheme-indent-function 1) (put 'with-iterator 'scheme-indent-function 1) (put 'with-module 'scheme-indent-function 1) (put 'with-output-conversion 'scheme-indent-function 1) (put 'with-output-to-port 'scheme-indent-function 1) (put 'with-output-to-process 'scheme-indent-function 1) (put 'with-output-to-string 'scheme-indent-function 1) (put 'with-port-locking 'scheme-indent-function 1) (put 'with-string-io 'scheme-indent-function 1) (put 'with-time-counter 'scheme-indent-function 1) (put 'with-signal-handlers 'scheme-indent-function 1) (put 'with-locking-mutex 'scheme-indent-function 1) (put 'guard 'scheme-indent-function 1) ;; gont-lockを有効化 (global-font-lock-mode t)