annotate lisp/cmuscheme.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents ac1673121774
children 95a07dc453f4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2229
bd3c525fa6fc Added standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1367
diff changeset
1 ;;; cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el.
bd3c525fa6fc Added standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1367
diff changeset
2
17354
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
3 ;; Copyright (C) 1988, 1994, 1997 Free Software Foundation, Inc.
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
4
798
b7932f859d4e *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 795
diff changeset
5 ;; Author: Olin Shivers <olin.shivers@cs.cmu.edu>
6188
599aa761e6be (inferior-scheme-mode): Removed unnecessary
Richard M. Stallman <rms@gnu.org>
parents: 6149
diff changeset
6 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2229
diff changeset
7 ;; Keywords: processes, lisp
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
8
924
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
9 ;; This file is part of GNU Emacs.
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
10
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
14 ;; any later version.
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
15
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
19 ;; GNU General Public License for more details.
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
20
93730fc2e7c3 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
24 ;; Boston, MA 02111-1307, USA.
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
25
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
26 ;;; Commentary:
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
27
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
28 ;; This is a customisation of comint-mode (see comint.el)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
29 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
30 ;; Written by Olin Shivers (olin.shivers@cs.cmu.edu). With bits and pieces
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
31 ;; lifted from scheme.el, shell.el, clisp.el, newclisp.el, cobol.el, et al..
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
32 ;; 8/88
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
33 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
34 ;; Please send me bug reports, bug fixes, and extensions, so that I can
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
35 ;; merge them into the master source.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
36 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
37 ;; The changelog is at the end of this file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
38 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
39 ;; NOTE: MIT Cscheme, when invoked with the -emacs flag, has a special user
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
40 ;; interface that communicates process state back to the superior emacs by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
41 ;; outputting special control sequences. The gnumacs package, xscheme.el, has
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
42 ;; lots and lots of special purpose code to read these control sequences, and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
43 ;; so is very tightly integrated with the cscheme process. The cscheme
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
44 ;; interrupt handler and debugger read single character commands in cbreak
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
45 ;; mode; when this happens, xscheme.el switches to special keymaps that bind
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
46 ;; the single letter command keys to emacs functions that directly send the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
47 ;; character to the scheme process. Cmuscheme mode does *not* provide this
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
48 ;; functionality. If you are a cscheme user, you may prefer to use the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
49 ;; xscheme.el/cscheme -emacs interaction.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
50 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
51 ;; Here's a summary of the pros and cons, as I see them.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
52 ;; xscheme: Tightly integrated with inferior cscheme process! A few commands
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
53 ;; not in cmuscheme. But. Integration is a bit of a hack. Input
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
54 ;; history only keeps the immediately prior input. Bizarre
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
55 ;; keybindings.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
56 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
57 ;; cmuscheme: Not tightly integrated with inferior cscheme process. But.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
58 ;; Carefully integrated functionality with the entire suite of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
59 ;; comint-derived CMU process modes. Keybindings reminiscent of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
60 ;; Zwei and Hemlock. Good input history. A few commands not in
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
61 ;; xscheme.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
62 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
63 ;; It's a tradeoff. Pay your money; take your choice. If you use a Scheme
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
64 ;; that isn't Cscheme, of course, there isn't a choice. Xscheme.el is *very*
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
65 ;; Cscheme-specific; you must use cmuscheme.el. Interested parties are
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12867
diff changeset
66 ;; invited to port xscheme functionality on top of comint mode...
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
20601
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
68 ;;; CHANGE LOG
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
69 ;;; ===========================================================================
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
70 ;;; 8/88 Olin
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
71 ;;; Created.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
72 ;;;
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
73 ;;; 2/15/89 Olin
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
74 ;;; Removed -emacs flag from process invocation. It's only useful for
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
75 ;;; cscheme, and makes cscheme assume it's running under xscheme.el,
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
76 ;;; which messes things up royally. A bug.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
77 ;;;
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
78 ;;; 5/22/90 Olin
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
79 ;;; - Upgraded to use comint-send-string and comint-send-region.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
80 ;;; - run-scheme now offers to let you edit the command line if
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
81 ;;; you invoke it with a prefix-arg. M-x scheme is redundant, and
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
82 ;;; has been removed.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
83 ;;; - Explicit references to process "scheme" have been replaced with
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
84 ;;; (scheme-proc). This allows better handling of multiple process bufs.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
85 ;;; - Added scheme-send-last-sexp, bound to C-x C-e. A gnu convention.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
86 ;;; - Have not added process query facility a la cmulisp.el's lisp-show-arglist
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
87 ;;; and friends, but interested hackers might find a useful application
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
88 ;;; of this facility.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
89 ;;;
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
90 ;;; 3/12/90 Olin
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
91 ;;; - scheme-load-file and scheme-compile-file no longer switch-to-scheme.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
92 ;;; Tale suggested this.
97249de6bbfa Move change log comment block so lm-commentary doesn't lose.
Dave Love <fx@gnu.org>
parents: 19997
diff changeset
93
795
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
94 ;;; Code:
c693d56ef36d *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
95
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 (require 'scheme)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 (require 'comint)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
99
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
100 (defgroup cmuscheme nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
101 "Run a scheme process in a buffer."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
102 :group 'lisp)
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
103
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 ;;; INFERIOR SCHEME MODE STUFF
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 ;;;============================================================================
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
107 (defcustom inferior-scheme-mode-hook nil
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
108 "*Hook for customising inferior-scheme mode."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
109 :type 'hook
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
110 :group 'cmuscheme)
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
111
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 (defvar inferior-scheme-mode-map nil)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 (cond ((not inferior-scheme-mode-map)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 (setq inferior-scheme-mode-map
6149
a093cbbdf14d (inferior-scheme-mode-map): Use copy-keymap.
Richard M. Stallman <rms@gnu.org>
parents: 5304
diff changeset
116 (copy-keymap comint-mode-map))
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 (define-key inferior-scheme-mode-map "\M-\C-x" ;gnu convention
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 'scheme-send-definition)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 (define-key inferior-scheme-mode-map "\C-x\C-e" 'scheme-send-last-sexp)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (define-key inferior-scheme-mode-map "\C-c\C-l" 'scheme-load-file)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 (define-key inferior-scheme-mode-map "\C-c\C-k" 'scheme-compile-file)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (scheme-mode-commands inferior-scheme-mode-map)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 ;; Install the process communication commands in the scheme-mode keymap.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (define-key scheme-mode-map "\M-\C-x" 'scheme-send-definition);gnu convention
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (define-key scheme-mode-map "\C-x\C-e" 'scheme-send-last-sexp);gnu convention
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (define-key scheme-mode-map "\C-c\C-e" 'scheme-send-definition)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 (define-key scheme-mode-map "\C-c\M-e" 'scheme-send-definition-and-go)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (define-key scheme-mode-map "\C-c\C-r" 'scheme-send-region)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (define-key scheme-mode-map "\C-c\M-r" 'scheme-send-region-and-go)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 (define-key scheme-mode-map "\C-c\M-c" 'scheme-compile-definition)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (define-key scheme-mode-map "\C-c\C-c" 'scheme-compile-definition-and-go)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (define-key scheme-mode-map "\C-c\C-z" 'switch-to-scheme)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 (define-key scheme-mode-map "\C-c\C-l" 'scheme-load-file)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (define-key scheme-mode-map "\C-c\C-k" 'scheme-compile-file) ;k for "kompile"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136
17354
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
137 (let ((map (lookup-key scheme-mode-map [menu-bar scheme])))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
138 (define-key map [separator-eval] '("--"))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
139 (define-key map [compile-file]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
140 '("Compile Scheme File" . scheme-compile-file))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
141 (define-key map [load-file]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
142 '("Load Scheme File" . scheme-load-file))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
143 (define-key map [switch]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
144 '("Switch to Scheme" . switch-to-scheme))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
145 (define-key map [com-def-go]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
146 '("Compile Definitiion & Go" . scheme-compile-definition-and-go))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
147 (define-key map [com-def]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
148 '("Compile Definitiion" . scheme-compile-definition))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
149 (define-key map [send-def-go]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
150 '("Evaluate Last Definition & Go" . scheme-send-definition-and-go))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
151 (define-key map [send-def]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
152 '("Evaluate Last Definition" . scheme-send-definition))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
153 (define-key map [send-region-go]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
154 '("Evaluate Region & Go" . scheme-send-region-and-go))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
155 (define-key map [send-region]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
156 '("Evaluate Region" . scheme-send-region))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
157 (define-key map [send-sexp]
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
158 '("Evaluate Last S-expression" . scheme-send-last-sexp))
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
159 )
7c7aaf0aeedb (scheme-mode-map): Add some menu items.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
160
1367
475a8122e0a5 (inferior-scheme-filter-regexp):
Richard M. Stallman <rms@gnu.org>
parents: 1355
diff changeset
161 (defvar scheme-buffer)
475a8122e0a5 (inferior-scheme-filter-regexp):
Richard M. Stallman <rms@gnu.org>
parents: 1355
diff changeset
162
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 (defun inferior-scheme-mode ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 "Major mode for interacting with an inferior Scheme process.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 The following commands are available:
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 \\{inferior-scheme-mode-map}
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 A Scheme process can be fired up with M-x run-scheme.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 Customisation: Entry to this mode runs the hooks on comint-mode-hook and
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 inferior-scheme-mode-hook (in that order).
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 You can send text to the inferior Scheme process from other buffers containing
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 Scheme source.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 switch-to-scheme switches the current buffer to the Scheme process buffer.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 scheme-send-definition sends the current definition to the Scheme process.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 scheme-compile-definition compiles the current definition.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 scheme-send-region sends the current region to the Scheme process.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 scheme-compile-region compiles the current region.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 scheme-send-definition-and-go, scheme-compile-definition-and-go,
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 scheme-send-region-and-go, and scheme-compile-region-and-go
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 switch to the Scheme process buffer after sending their text.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 For information on running multiple processes in multiple buffers, see
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 documentation for variable scheme-buffer.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 Commands:
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 Return after the end of the process' output sends the text from the
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 end of process to point.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 Return before the end of the process' output copies the sexp ending at point
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 to the end of the process' output, and sends it.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 Delete converts tabs to spaces as it moves back.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 Tab indents for Scheme; with argument, shifts rest
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 of expression rigidly with the current line.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 C-M-q does Tab on each line starting within following expression.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 Paragraphs are separated only by blank lines. Semicolons start comments.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 If you accidentally suspend your process, use \\[comint-continue-subjob]
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 to continue it."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 (comint-mode)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 ;; Customise in inferior-scheme-mode-hook
5304
092d5d60f803 (inferior-scheme-mode):
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
203 (setq comint-prompt-regexp "^[^>\n]*>+ *") ; OK for cscheme, oaklisp, T,...
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 (scheme-mode-variables)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (setq major-mode 'inferior-scheme-mode)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (setq mode-name "Inferior Scheme")
7070
d3334311fc58 (inferior-scheme-mode):
Richard M. Stallman <rms@gnu.org>
parents: 6188
diff changeset
207 (setq mode-line-process '(":%s"))
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 (use-local-map inferior-scheme-mode-map)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (setq comint-input-filter (function scheme-input-filter))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (setq comint-get-old-input (function scheme-get-old-input))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 (run-hooks 'inferior-scheme-mode-hook))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
213 (defcustom inferior-scheme-filter-regexp "\\`\\s *\\S ?\\S ?\\s *\\'"
1367
475a8122e0a5 (inferior-scheme-filter-regexp):
Richard M. Stallman <rms@gnu.org>
parents: 1355
diff changeset
214 "*Input matching this regexp are not saved on the history list.
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
215 Defaults to a regexp ignoring all inputs of 0, 1, or 2 letters."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
216 :type 'regexp
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
217 :group 'cmuscheme)
1367
475a8122e0a5 (inferior-scheme-filter-regexp):
Richard M. Stallman <rms@gnu.org>
parents: 1355
diff changeset
218
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (defun scheme-input-filter (str)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 "Don't save anything matching inferior-scheme-filter-regexp"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 (not (string-match inferior-scheme-filter-regexp str)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 (defun scheme-get-old-input ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 "Snarf the sexp ending at point"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 (let ((end (point)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 (backward-sexp)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 (buffer-substring (point) end))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 (defun scheme-args-to-list (string)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (let ((where (string-match "[ \t]" string)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 (cond ((null where) (list string))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 ((not (= where 0))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (cons (substring string 0 where)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 (scheme-args-to-list (substring string (+ 1 where)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 (length string)))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (t (let ((pos (string-match "[^ \t]" string)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 (if (null pos)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 nil
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (scheme-args-to-list (substring string pos
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 (length string)))))))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
243 (defcustom scheme-program-name "scheme"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
244 "*Program invoked by the run-scheme command"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
245 :type 'string
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
246 :group 'cmuscheme)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
9589
2bee58e79145 (run-scheme): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 9538
diff changeset
248 ;;;###autoload
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (defun run-scheme (cmd)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 "Run an inferior Scheme process, input and output via buffer *scheme*.
12867
26e4b5392530 (run-scheme): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9589
diff changeset
251 If there is a process already running in `*scheme*', switch to that buffer.
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 With argument, allows you to edit the command line (default is value
12867
26e4b5392530 (run-scheme): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9589
diff changeset
253 of `scheme-program-name'). Runs the hooks `inferior-scheme-mode-hook'
26e4b5392530 (run-scheme): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9589
diff changeset
254 \(after the `comint-mode-hook' is run).
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 \(Type \\[describe-mode] in the process buffer for a list of commands.)"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 (interactive (list (if current-prefix-arg
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (read-string "Run Scheme: " scheme-program-name)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 scheme-program-name)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 (if (not (comint-check-proc "*scheme*"))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 (let ((cmdlist (scheme-args-to-list cmd)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 (set-buffer (apply 'make-comint "scheme" (car cmdlist)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 nil (cdr cmdlist)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 (inferior-scheme-mode)))
9538
5c6da502d9a5 (run-scheme): Set scheme-program-name.
Richard M. Stallman <rms@gnu.org>
parents: 9057
diff changeset
265 (setq scheme-program-name cmd)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (setq scheme-buffer "*scheme*")
12867
26e4b5392530 (run-scheme): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9589
diff changeset
267 (pop-to-buffer "*scheme*"))
26e4b5392530 (run-scheme): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 9589
diff changeset
268 ;;;###autoload (add-hook 'same-window-buffer-names "*scheme*")
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 (defun scheme-send-region (start end)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 "Send the current region to the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 (interactive "r")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 (comint-send-region (scheme-proc) start end)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 (comint-send-string (scheme-proc) "\n"))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 (defun scheme-send-definition ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 "Send the current definition to the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 (end-of-defun)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 (let ((end (point)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 (beginning-of-defun)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (scheme-send-region (point) end))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (defun scheme-send-last-sexp ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 "Send the previous sexp to the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (scheme-send-region (save-excursion (backward-sexp) (point)) (point)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
290 (defcustom scheme-compile-exp-command "(compile '%s)"
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
291 "*Template for issuing commands to compile arbitrary Scheme expressions."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
292 :type 'string
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
293 :group 'cmuscheme)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (defun scheme-compile-region (start end)
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
296 "Compile the current region in the inferior Scheme process.
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 \(A BEGIN is wrapped around the region: (BEGIN <region>))"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (interactive "r")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 (comint-send-string (scheme-proc) (format scheme-compile-exp-command
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 (format "(begin %s)"
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 (buffer-substring start end))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 (comint-send-string (scheme-proc) "\n"))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 (defun scheme-compile-definition ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 "Compile the current definition in the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 (save-excursion
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (end-of-defun)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 (let ((end (point)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 (beginning-of-defun)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 (scheme-compile-region (point) end))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (defun switch-to-scheme (eob-p)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 "Switch to the scheme process buffer.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 With argument, positions cursor at end of buffer."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 (interactive "P")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 (if (get-buffer scheme-buffer)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 (pop-to-buffer scheme-buffer)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 (error "No current process buffer. See variable scheme-buffer."))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (cond (eob-p
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 (push-mark)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 (goto-char (point-max)))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (defun scheme-send-region-and-go (start end)
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
325 "Send the current region to the inferior Scheme process.
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
326 Then switch to the process buffer."
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (interactive "r")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 (scheme-send-region start end)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 (switch-to-scheme t))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 (defun scheme-send-definition-and-go ()
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
332 "Send the current definition to the inferior Scheme.
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
333 Then switch to the process buffer."
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (scheme-send-definition)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 (switch-to-scheme t))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 (defun scheme-compile-definition-and-go ()
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
339 "Compile the current definition in the inferior Scheme.
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
340 Then switch to the process buffer."
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 (interactive)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 (scheme-compile-definition)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 (switch-to-scheme t))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 (defun scheme-compile-region-and-go (start end)
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
346 "Compile the current region in the inferior Scheme.
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
347 Then switch to the process buffer."
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 (interactive "r")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 (scheme-compile-region start end)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 (switch-to-scheme t))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
352 (defcustom scheme-source-modes '(scheme-mode)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 "*Used to determine if a buffer contains Scheme source code.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 If it's loaded into a buffer that is in one of these major modes, it's
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 considered a scheme source file by scheme-load-file and scheme-compile-file.
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
356 Used by these commands to determine defaults."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
357 :type '(repeat function)
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
358 :group 'cmuscheme)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 (defvar scheme-prev-l/c-dir/file nil
1355
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
361 "Caches the last (directory . file) pair.
1777d125c0a7 Doc fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 924
diff changeset
362 Caches the last pair used in the last scheme-load-file or
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 scheme-compile-file command. Used for determining the default in the
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 next one.")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 (defun scheme-load-file (file-name)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 "Load a Scheme file into the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 (interactive (comint-get-source "Load Scheme file: " scheme-prev-l/c-dir/file
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 scheme-source-modes t)) ; T because LOAD
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 ; needs an exact name
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 (comint-check-source file-name) ; Check to see if buffer needs saved.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 (setq scheme-prev-l/c-dir/file (cons (file-name-directory file-name)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 (file-name-nondirectory file-name)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 (comint-send-string (scheme-proc) (concat "(load \""
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 file-name
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 "\"\)\n")))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 (defun scheme-compile-file (file-name)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 "Compile a Scheme file in the inferior Scheme process."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 (interactive (comint-get-source "Compile Scheme file: "
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 scheme-prev-l/c-dir/file
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 scheme-source-modes
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 nil)) ; NIL because COMPILE doesn't
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 ; need an exact name.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 (comint-check-source file-name) ; Check to see if buffer needs saved.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 (setq scheme-prev-l/c-dir/file (cons (file-name-directory file-name)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 (file-name-nondirectory file-name)))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 (comint-send-string (scheme-proc) (concat "(compile-file \""
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 file-name
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 "\"\)\n")))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 (defvar scheme-buffer nil "*The current scheme process buffer.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 MULTIPLE PROCESS SUPPORT
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 ===========================================================================
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 Cmuscheme.el supports, in a fairly simple fashion, running multiple Scheme
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 processes. To run multiple Scheme processes, you start the first up with
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 \\[run-scheme]. It will be in a buffer named *scheme*. Rename this buffer
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 with \\[rename-buffer]. You may now start up a new process with another
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 \\[run-scheme]. It will be in a new buffer, named *scheme*. You can
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 switch between the different process buffers with \\[switch-to-buffer].
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 Commands that send text from source buffers to Scheme processes --
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 like scheme-send-definition or scheme-compile-region -- have to choose a
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 process to send to, when you have more than one Scheme process around. This
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 is determined by the global variable scheme-buffer. Suppose you
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 have three inferior Schemes running:
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 Buffer Process
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 foo scheme
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 bar scheme<2>
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 *scheme* scheme<3>
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 If you do a \\[scheme-send-definition-and-go] command on some Scheme source
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 code, what process do you send it to?
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 - If you're in a process buffer (foo, bar, or *scheme*),
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 you send it to that process.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 - If you're in some other buffer (e.g., a source file), you
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 send it to the process attached to buffer scheme-buffer.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 This process selection is performed by function scheme-proc.
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 Whenever \\[run-scheme] fires up a new process, it resets scheme-buffer
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 to be the new process's buffer. If you only run one process, this will
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 do the right thing. If you run multiple processes, you can change
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 scheme-buffer to another process buffer with \\[set-variable].
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2307
diff changeset
427 More sophisticated approaches are, of course, possible. If you find yourself
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 needing to switch back and forth between multiple processes frequently,
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 you may wish to consider ilisp.el, a larger, more sophisticated package
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 for running inferior Lisp and Scheme processes. The approach taken here is
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 for a minimal, simple implementation. Feel free to extend it.")
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 (defun scheme-proc ()
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 "Returns the current scheme process. See variable scheme-buffer."
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 (let ((proc (get-buffer-process (if (eq major-mode 'inferior-scheme-mode)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 (current-buffer)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 scheme-buffer))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 (or proc
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 (error "No current process. See variable scheme-buffer"))))
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 ;;; Do the user's customisation...
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
444 (defcustom cmuscheme-load-hook nil
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 "This hook is run when cmuscheme is loaded in.
21088
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
446 This is a good place to put keybindings."
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
447 :type 'hook
ac1673121774 Customized.
Stephen Eglen <stephen@gnu.org>
parents: 20601
diff changeset
448 :group 'cmuscheme)
267
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 (run-hooks 'cmuscheme-load-hook)
d83efd759350 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 267
diff changeset
452 (provide 'cmuscheme)
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
453
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
454 ;;; cmuscheme.el ends here