;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el.
-;; Copyright (C) 1988, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1988, 1994, 1997 Free Software Foundation, Inc.
;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
;; Maintainer: FSF
;; Cscheme-specific; you must use cmuscheme.el. Interested parties are
;; invited to port xscheme functionality on top of comint mode...
+;;; CHANGE LOG
+;;; ===========================================================================
+;;; 8/88 Olin
+;;; Created.
+;;;
+;;; 2/15/89 Olin
+;;; Removed -emacs flag from process invocation. It's only useful for
+;;; cscheme, and makes cscheme assume it's running under xscheme.el,
+;;; which messes things up royally. A bug.
+;;;
+;;; 5/22/90 Olin
+;;; - Upgraded to use comint-send-string and comint-send-region.
+;;; - run-scheme now offers to let you edit the command line if
+;;; you invoke it with a prefix-arg. M-x scheme is redundant, and
+;;; has been removed.
+;;; - Explicit references to process "scheme" have been replaced with
+;;; (scheme-proc). This allows better handling of multiple process bufs.
+;;; - Added scheme-send-last-sexp, bound to C-x C-e. A gnu convention.
+;;; - Have not added process query facility a la cmulisp.el's lisp-show-arglist
+;;; and friends, but interested hackers might find a useful application
+;;; of this facility.
+;;;
+;;; 3/12/90 Olin
+;;; - scheme-load-file and scheme-compile-file no longer switch-to-scheme.
+;;; Tale suggested this.
+
;;; Code:
(require 'scheme)
(require 'comint)
+
+(defgroup cmuscheme nil
+ "Run a scheme process in a buffer."
+ :group 'lisp)
+
;;; INFERIOR SCHEME MODE STUFF
;;;============================================================================
-(defvar inferior-scheme-mode-hook nil
- "*Hook for customising inferior-scheme mode.")
-(defvar inferior-scheme-mode-map nil)
+(defcustom inferior-scheme-mode-hook nil
+ "*Hook for customising inferior-scheme mode."
+ :type 'hook
+ :group 'cmuscheme)
-(cond ((not inferior-scheme-mode-map)
- (setq inferior-scheme-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 inferior-scheme-mode-map "\C-c\C-l" 'scheme-load-file)
- (define-key inferior-scheme-mode-map "\C-c\C-k" 'scheme-compile-file)
- (scheme-mode-commands inferior-scheme-mode-map)))
+(defvar inferior-scheme-mode-map
+ (let ((m (make-sparse-keymap)))
+ (define-key m "\M-\C-x" 'scheme-send-definition) ;gnu convention
+ (define-key m "\C-x\C-e" 'scheme-send-last-sexp)
+ (define-key m "\C-c\C-l" 'scheme-load-file)
+ (define-key m "\C-c\C-k" 'scheme-compile-file)
+ (scheme-mode-commands m)
+ m))
;; Install the process communication commands in the scheme-mode keymap.
(define-key scheme-mode-map "\M-\C-x" 'scheme-send-definition);gnu convention
(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"
+(let ((map (lookup-key scheme-mode-map [menu-bar scheme])))
+ (define-key map [separator-eval] '("--"))
+ (define-key map [compile-file]
+ '("Compile Scheme File" . scheme-compile-file))
+ (define-key map [load-file]
+ '("Load Scheme File" . scheme-load-file))
+ (define-key map [switch]
+ '("Switch to Scheme" . switch-to-scheme))
+ (define-key map [com-def-go]
+ '("Compile Definitiion & Go" . scheme-compile-definition-and-go))
+ (define-key map [com-def]
+ '("Compile Definitiion" . scheme-compile-definition))
+ (define-key map [send-def-go]
+ '("Evaluate Last Definition & Go" . scheme-send-definition-and-go))
+ (define-key map [send-def]
+ '("Evaluate Last Definition" . scheme-send-definition))
+ (define-key map [send-region-go]
+ '("Evaluate Region & Go" . scheme-send-region-and-go))
+ (define-key map [send-region]
+ '("Evaluate Region" . scheme-send-region))
+ (define-key map [send-sexp]
+ '("Evaluate Last S-expression" . scheme-send-last-sexp))
+)
+
(defvar scheme-buffer)
-(defun inferior-scheme-mode ()
+(define-derived-mode inferior-scheme-mode comint-mode "Inferior Scheme"
"Major mode for interacting with an inferior Scheme process.
The following commands are available:
Paragraphs are separated only by blank lines. Semicolons start comments.
If you accidentally suspend your process, use \\[comint-continue-subjob]
to continue it."
- (interactive)
- (comint-mode)
;; Customise in inferior-scheme-mode-hook
(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"))
- (use-local-map inferior-scheme-mode-map)
(setq comint-input-filter (function scheme-input-filter))
- (setq comint-get-old-input (function scheme-get-old-input))
- (run-hooks 'inferior-scheme-mode-hook))
+ (setq comint-get-old-input (function scheme-get-old-input)))
-(defvar inferior-scheme-filter-regexp "\\`\\s *\\S ?\\S ?\\s *\\'"
+(defcustom 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.")
+Defaults to a regexp ignoring all inputs of 0, 1, or 2 letters."
+ :type 'regexp
+ :group 'cmuscheme)
(defun scheme-input-filter (str)
"Don't save anything matching inferior-scheme-filter-regexp"
(scheme-args-to-list (substring string pos
(length string)))))))))
-(defvar scheme-program-name "scheme"
- "*Program invoked by the run-scheme command")
+(defcustom scheme-program-name "scheme"
+ "*Program invoked by the run-scheme command"
+ :type 'string
+ :group 'cmuscheme)
;;;###autoload
(defun run-scheme (cmd)
(interactive)
(scheme-send-region (save-excursion (backward-sexp) (point)) (point)))
-(defvar scheme-compile-exp-command "(compile '%s)"
- "*Template for issuing commands to compile arbitrary Scheme expressions.")
+(defcustom scheme-compile-exp-command "(compile '%s)"
+ "*Template for issuing commands to compile arbitrary Scheme expressions."
+ :type 'string
+ :group 'cmuscheme)
(defun scheme-compile-region (start end)
"Compile the current region in the inferior Scheme process.
(scheme-compile-region start end)
(switch-to-scheme t))
-(defvar scheme-source-modes '(scheme-mode)
+(defcustom scheme-source-modes '(scheme-mode)
"*Used to determine if a buffer contains Scheme source code.
If it's loaded into a buffer that is in one of these major modes, it's
considered a scheme source file by scheme-load-file and scheme-compile-file.
-Used by these commands to determine defaults.")
+Used by these commands to determine defaults."
+ :type '(repeat function)
+ :group 'cmuscheme)
(defvar scheme-prev-l/c-dir/file nil
"Caches the last (directory . file) pair.
;;; Do the user's customisation...
-(defvar cmuscheme-load-hook nil
+(defcustom cmuscheme-load-hook nil
"This hook is run when cmuscheme is loaded in.
-This is a good place to put keybindings.")
+This is a good place to put keybindings."
+ :type 'hook
+ :group 'cmuscheme)
(run-hooks 'cmuscheme-load-hook)
-
-;;; CHANGE LOG
-;;; ===========================================================================
-;;; 8/88 Olin
-;;; Created.
-;;;
-;;; 2/15/89 Olin
-;;; Removed -emacs flag from process invocation. It's only useful for
-;;; cscheme, and makes cscheme assume it's running under xscheme.el,
-;;; which messes things up royally. A bug.
-;;;
-;;; 5/22/90 Olin
-;;; - Upgraded to use comint-send-string and comint-send-region.
-;;; - run-scheme now offers to let you edit the command line if
-;;; you invoke it with a prefix-arg. M-x scheme is redundant, and
-;;; has been removed.
-;;; - Explicit references to process "scheme" have been replaced with
-;;; (scheme-proc). This allows better handling of multiple process bufs.
-;;; - Added scheme-send-last-sexp, bound to C-x C-e. A gnu convention.
-;;; - Have not added process query facility a la cmulisp.el's lisp-show-arglist
-;;; and friends, but interested hackers might find a useful application
-;;; of this facility.
-;;;
-;;; 3/12/90 Olin
-;;; - scheme-load-file and scheme-compile-file no longer switch-to-scheme.
-;;; Tale suggested this.
-
(provide 'cmuscheme)
;;; cmuscheme.el ends here