cygwin上のemacs22のschemeモードでC-cC-l時に自動でwindowを分割する
/usr/local/emacs/22.1/lispに以下のパッチをあてる。
強制保存と*scheme*バッファは3/10のウインドウが割り当てられる。
ファイル名を問い合わせるところはカレントバッファに固定。
$ diff -u cmuscheme.el.orig cmuscheme.el --- cmuscheme.el.orig 2007-12-13 18:30:19.000000000 +0900 +++ cmuscheme.el 2007-12-13 19:27:19.000000000 +0900 @@ -436,17 +436,24 @@ `scheme-compile-file' command. Used for determining the default in the next one.") -(defun scheme-load-file (file-name) +(defun scheme-load-file () "Load a Scheme file FILE-NAME into the inferior Scheme process." - (interactive (comint-get-source "Load Scheme file: " scheme-prev-l/c-dir/file - scheme-source-modes t)) ; t because `load' - ; needs an exact name - (comint-check-source file-name) ; Check to see if buffer needs saved. - (setq scheme-prev-l/c-dir/file (cons (file-name-directory file-name) - (file-name-nondirectory file-name))) - (comint-send-string (scheme-proc) (concat "(load \"" - file-name - "\"\)\n"))) + (interactive) + (let ((file-name (buffer-file-name))) + (save-buffer) + (comint-check-source file-name) ; Check to see if buffer needs saved. + (setq scheme-prev-l/c-dir/file (cons (file-name-directory file-name) + (file-name-nondirectory file-name))) + (comint-send-string (scheme-proc) (concat "(load \"" + file-name + "\"\)\n")) + (let ((file-buffer (current-buffer))) + (if (not (get-buffer-window-list "*scheme*")) + (let ((new-window (split-window (selected-window) (round (* (window-height) 0.7)))) + (old-window (selected-window))) + (select-window new-window) + (switch-to-buffer "*scheme*") + (select-window old-window) ))))) (defun scheme-compile-file (file-name) "Compile a Scheme file FILE-NAME in the inferior Scheme process."