-;;; cmuscheme.el -- Scheme process in a buffer. Adapted from tea.el.
-;;; Copyright Olin Shivers (1988)
-;;; Please imagine a long, tedious, legalistic 5-page gnu-style copyright
-;;; notice appearing here to the effect that you may use this code any
-;;; way you like, as long as you don't charge money for it, remove this
-;;; notice, or hold me liable for its results.
-;;;
+;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el.
+
+;; Copyright (C) 1988, 1994 Free Software Foundation, Inc.
+
+;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
+;; Maintainer: FSF
+;; Keywords: processes, lisp
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;;; Commentary:
+
;;; This is a customisation of comint-mode (see comint.el)
;;;
;;; Written by Olin Shivers (olin.shivers@cs.cmu.edu). With bits and pieces
;;; Cscheme-specific; you must use cmuscheme.el. Interested parties are
;;; invited to port xscheme functionality on top of comint mode...
-;; YOUR .EMACS FILE
-;;=============================================================================
-;; Some suggestions for your .emacs file.
-;;
-;; ; If cmuscheme lives in some non-standard directory, you must tell emacs
-;; ; where to get it. This may or may not be necessary.
-;; (setq load-path (cons (expand-file-name "~jones/lib/emacs") load-path))
-;;
-;; ; Autoload run-scheme from file cmuscheme.el
-;; (autoload 'run-scheme "cmuscheme"
-;; "Run an inferior Scheme process."
-;; t)
-;;
-;; ; Files ending in ".scm" are Scheme source,
-;; ; so put their buffers in scheme-mode.
-;; (setq auto-mode-alist
-;; (cons '("\\.scm$" . scheme-mode)
-;; auto-mode-alist))
-;;
-;; ; Define C-c t to run my favorite command in inferior scheme mode:
-;; (setq cmuscheme-load-hook
-;; '((lambda () (define-key inferior-scheme-mode-map "\C-ct"
-;; 'favorite-cmd))))
-;;;
-;;; Unfortunately, scheme.el defines run-scheme to autoload from xscheme.el.
-;;; This will womp your declaration to autoload run-scheme from cmuscheme.el
-;;; if you haven't loaded cmuscheme in before scheme. Three fixes:
-;;; - Put the autoload on your scheme mode hook and in your .emacs toplevel:
-;;; (setq scheme-mode-hook
-;;; '((lambda () (autoload 'run-scheme "cmuscheme"
-;;; "Run an inferior Scheme" t))))
-;;; (autoload 'run-scheme "cmuscheme" "Run an inferior Scheme" t)
-;;; Now when scheme.el autoloads, it will restore the run-scheme autoload.
-;;; - Load cmuscheme.el in your .emacs: (load-library 'cmuscheme)
-;;; - Change autoload declaration in scheme.el to point to cmuscheme.el:
-;;; (autoload 'run-scheme "cmuscheme" "Run an inferior Scheme" t)
-;;; *or* just delete the autoload declaration from scheme.el altogether,
-;;; which will allow the autoload in your .emacs to have its say.
+;;; Code:
(require 'scheme)
(require 'comint)
(cond ((not inferior-scheme-mode-map)
(setq inferior-scheme-mode-map
- (full-copy-sparse-keymap comint-mode-map))
+ (copy-keymap comint-mode-map))
(define-key inferior-scheme-mode-map "\M-\C-x" ;gnu convention
'scheme-send-definition)
(define-key inferior-scheme-mode-map "\C-x\C-e" 'scheme-send-last-sexp)
(define-key scheme-mode-map "\C-c\C-l" 'scheme-load-file)
(define-key scheme-mode-map "\C-c\C-k" 'scheme-compile-file) ;k for "kompile"
+(defvar scheme-buffer)
+
(defun inferior-scheme-mode ()
"Major mode for interacting with an inferior Scheme process.
(interactive)
(comint-mode)
;; Customise in inferior-scheme-mode-hook
- (setq comint-prompt-regexp "^[^>]*>+ *") ; OK for cscheme, oaklisp, T,...
+ (setq comint-prompt-regexp "^[^>\n]*>+ *") ; OK for cscheme, oaklisp, T,...
(scheme-mode-variables)
(setq major-mode 'inferior-scheme-mode)
(setq mode-name "Inferior Scheme")
- (setq mode-line-process '(": %s"))
+ (setq mode-line-process '(":%s"))
(use-local-map inferior-scheme-mode-map)
(setq comint-input-filter (function scheme-input-filter))
- (setq comint-input-sentinel (function ignore))
(setq comint-get-old-input (function scheme-get-old-input))
(run-hooks 'inferior-scheme-mode-hook))
-(defun scheme-input-filter (str)
- "Don't save anything matching inferior-scheme-filter-regexp"
- (not (string-match inferior-scheme-filter-regexp str)))
-
(defvar inferior-scheme-filter-regexp "\\`\\s *\\S ?\\S ?\\s *\\'"
"*Input matching this regexp are not saved on the history list.
Defaults to a regexp ignoring all inputs of 0, 1, or 2 letters.")
+(defun scheme-input-filter (str)
+ "Don't save anything matching inferior-scheme-filter-regexp"
+ (not (string-match inferior-scheme-filter-regexp str)))
+
(defun scheme-get-old-input ()
"Snarf the sexp ending at point"
(save-excursion
(defvar scheme-program-name "scheme"
"*Program invoked by the run-scheme command")
-;;; Obsolete
-(defun scheme (&rest foo)
- "Use run-scheme"
- (interactive)
- (message "Use run-scheme")
- (ding))
-
+;;;###autoload
(defun run-scheme (cmd)
"Run an inferior Scheme process, input and output via buffer *scheme*.
-If there is a process already running in *scheme*, just switch to that buffer.
+If there is a process already running in `*scheme*', switch to that buffer.
With argument, allows you to edit the command line (default is value
-of scheme-program-name). Runs the hooks from inferior-scheme-mode-hook
-\(after the comint-mode-hook is run).
+of `scheme-program-name'). Runs the hooks `inferior-scheme-mode-hook'
+\(after the `comint-mode-hook' is run).
\(Type \\[describe-mode] in the process buffer for a list of commands.)"
(interactive (list (if current-prefix-arg
(set-buffer (apply 'make-comint "scheme" (car cmdlist)
nil (cdr cmdlist)))
(inferior-scheme-mode)))
+ (setq scheme-program-name cmd)
(setq scheme-buffer "*scheme*")
- (switch-to-buffer "*scheme*"))
-
+ (pop-to-buffer "*scheme*"))
+;;;###autoload (add-hook 'same-window-buffer-names "*scheme*")
(defun scheme-send-region (start end)
"Send the current region to the inferior Scheme process."
"*Template for issuing commands to compile arbitrary Scheme expressions.")
(defun scheme-compile-region (start end)
- "Compile the current region in the inferior Scheme process
+ "Compile the current region in the inferior Scheme process.
\(A BEGIN is wrapped around the region: (BEGIN <region>))"
(interactive "r")
(comint-send-string (scheme-proc) (format scheme-compile-exp-command
(goto-char (point-max)))))
(defun scheme-send-region-and-go (start end)
- "Send the current region to the inferior Scheme process,
-and switch to the process buffer."
+ "Send the current region to the inferior Scheme process.
+Then switch to the process buffer."
(interactive "r")
(scheme-send-region start end)
(switch-to-scheme t))
(defun scheme-send-definition-and-go ()
- "Send the current definition to the inferior Scheme,
-and switch to the process buffer."
+ "Send the current definition to the inferior Scheme.
+Then switch to the process buffer."
(interactive)
(scheme-send-definition)
(switch-to-scheme t))
(defun scheme-compile-definition-and-go ()
- "Compile the current definition in the inferior Scheme,
-and switch to the process buffer."
+ "Compile the current definition in the inferior Scheme.
+Then switch to the process buffer."
(interactive)
(scheme-compile-definition)
(switch-to-scheme t))
(defun scheme-compile-region-and-go (start end)
- "Compile the current region in the inferior Scheme,
-and switch to the process buffer."
+ "Compile the current region in the inferior Scheme.
+Then switch to the process buffer."
(interactive "r")
(scheme-compile-region start end)
(switch-to-scheme t))
Used by these commands to determine defaults.")
(defvar scheme-prev-l/c-dir/file nil
- "Caches the (directory . file) pair used in the last scheme-load-file or
+ "Caches the last (directory . file) pair.
+Caches the last pair used in the last scheme-load-file or
scheme-compile-file command. Used for determining the default in the
next one.")
do the right thing. If you run multiple processes, you can change
scheme-buffer to another process buffer with \\[set-variable].
-More sophisticated approaches are, of course, possible. If you find youself
+More sophisticated approaches are, of course, possible. If you find yourself
needing to switch back and forth between multiple processes frequently,
you may wish to consider ilisp.el, a larger, more sophisticated package
for running inferior Lisp and Scheme processes. The approach taken here is
;;; Tale suggested this.
(provide 'cmuscheme)
+
+;;; cmuscheme.el ends here