]> code.delx.au - gnu-emacs/blobdiff - lisp/cmuscheme.el
(ispell-highlight-spelling-error): Use
[gnu-emacs] / lisp / cmuscheme.el
index 76fff6d9a5e9224dfec216de4422a48b4466d74b..71040bd4030902bfca6ef2e7c4add6cba8e8f59d 100644 (file)
 (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
 
 (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:
@@ -189,22 +194,18 @@ C-M-q does Tab on each line starting within following expression.
 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"
@@ -230,8 +231,10 @@ Defaults to a regexp ignoring all inputs of 0, 1, or 2 letters.")
                 (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)
@@ -275,8 +278,10 @@ of `scheme-program-name').  Runs the hooks `inferior-scheme-mode-hook'
   (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.
@@ -335,11 +340,13 @@ Then switch to the process buffer."
   (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.
@@ -425,9 +432,11 @@ for a minimal, simple implementation. Feel free to extend it.")
 
 ;;; 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)