Mercurial > emacs
annotate lisp/progmodes/inf-lisp.el @ 98182:19ec1646fe6c
The Rmail/mbox merge has been abandoned in favor of a restart using
the current rmail.el file. A comprehensive list of changes will be
supplied when pmail.el is morphed back into rmail.el
The current status is that pmail.el supports basic Rmail navigation
(no summary support) and shows the current message in a special
buffer using buffer-swap-text. No decoding is done yet. That is the
next step.
author | Paul Reilly <pmr@pajato.com> |
---|---|
date | Mon, 15 Sep 2008 20:56:53 +0000 |
parents | 52b7a8c22af5 |
children | a9dc0e7c3f2b |
rev | line source |
---|---|
835 | 1 ;;; inf-lisp.el --- an inferior-lisp mode |
14169 | 2 |
79717 | 3 ;; Copyright (C) 1988, 1993, 1994, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 |
64699
629afbe74e61
Update copyright for release of 22.1 for progmodes directory.
Nick Roberts <nickrob@snap.net.nz>
parents:
64085
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
836
diff
changeset
|
5 |
798
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
6 ;; Author: Olin Shivers <shivers@cs.cmu.edu> |
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
957
diff
changeset
|
7 ;; Keywords: processes, lisp |
798
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
8 |
14169 | 9 ;; This file is part of GNU Emacs. |
835 | 10 |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify |
14169 | 12 ;; it under the terms of the GNU General Public License as published by |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
13 ;; the Free Software Foundation, either version 3 of the License, or |
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
14 ;; (at your option) any later version. |
835 | 15 |
14169 | 16 ;; GNU Emacs is distributed in the hope that it will be useful, |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
835 | 20 |
14169 | 21 ;; You should have received a copy of the GNU General Public License |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
267 | 23 |
798
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
24 ;;; Commentary: |
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
25 |
14169 | 26 ;; Hacked from tea.el by Olin Shivers (shivers@cs.cmu.edu). 8/88 |
267 | 27 |
46153 | 28 ;; This file defines a lisp-in-a-buffer package (inferior-lisp mode) |
46158
61df14a62e39
Fix spacing (garbled by previous patch).
Juanma Barranquero <lekktu@gmail.com>
parents:
46153
diff
changeset
|
29 ;; built on top of comint mode. This version is more featureful, |
61df14a62e39
Fix spacing (garbled by previous patch).
Juanma Barranquero <lekktu@gmail.com>
parents:
46153
diff
changeset
|
30 ;; robust, and uniform than the Emacs 18 version. The key bindings are |
46153 | 31 ;; also more compatible with the bindings of Hemlock and Zwei (the |
32 ;; Lisp Machine emacs). | |
267 | 33 |
14169 | 34 ;; Since this mode is built on top of the general command-interpreter-in- |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
35 ;; a-buffer mode (comint mode), it shares a common base functionality, |
14169 | 36 ;; and a common set of bindings, with all modes derived from comint mode. |
37 ;; This makes these modes easier to use. | |
267 | 38 |
14169 | 39 ;; For documentation on the functionality provided by comint mode, and |
40 ;; the hooks available for customising it, see the file comint.el. | |
41 ;; For further information on inferior-lisp mode, see the comments below. | |
267 | 42 |
14169 | 43 ;; Needs fixin: |
44 ;; The load-file/compile-file default mechanism could be smarter -- it | |
45 ;; doesn't know about the relationship between filename extensions and | |
46 ;; whether the file is source or executable. If you compile foo.lisp | |
47 ;; with compile-file, then the next load-file should use foo.bin for | |
48 ;; the default, not foo.lisp. This is tricky to do right, particularly | |
49 ;; because the extension for executable files varies so much (.o, .bin, | |
50 ;; .lbin, .mo, .vo, .ao, ...). | |
51 ;; | |
52 ;; It would be nice if inferior-lisp (and inferior scheme, T, ...) modes | |
53 ;; had a verbose minor mode wherein sending or compiling defuns, etc. | |
54 ;; would be reflected in the transcript with suitable comments, e.g. | |
55 ;; ";;; redefining fact". Several ways to do this. Which is right? | |
56 ;; | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
57 ;; When sending text from a source file to a subprocess, the process-mark can |
14169 | 58 ;; move off the window, so you can lose sight of the process interactions. |
59 ;; Maybe I should ensure the process mark is in the window when I send | |
60 ;; text to the process? Switch selectable? | |
267 | 61 |
798
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
62 ;;; Code: |
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
63 |
b7932f859d4e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
727
diff
changeset
|
64 (require 'comint) |
836 | 65 (require 'lisp-mode) |
66 | |
267 | 67 |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
68 (defgroup inferior-lisp nil |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
69 "Run an outside Lisp in an Emacs buffer." |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
70 :group 'lisp |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
71 :version "22.1") |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
72 |
957 | 73 ;;;###autoload |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
74 (defcustom inferior-lisp-filter-regexp |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
75 "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'" |
3663 | 76 "*What not to save on inferior Lisp's input history. |
77 Input matching this regexp is not saved on the input history in Inferior Lisp | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
78 mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
79 \(as in :a, :c, etc.)" |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
80 :type 'regexp |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
81 :group 'inferior-lisp) |
267 | 82 |
835 | 83 (defvar inferior-lisp-mode-map nil) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
84 (unless inferior-lisp-mode-map |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
85 (setq inferior-lisp-mode-map (copy-keymap comint-mode-map)) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
86 (set-keymap-parent inferior-lisp-mode-map lisp-mode-shared-map) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
87 (define-key inferior-lisp-mode-map "\C-x\C-e" 'lisp-eval-last-sexp) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
88 (define-key inferior-lisp-mode-map "\C-c\C-l" 'lisp-load-file) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
89 (define-key inferior-lisp-mode-map "\C-c\C-k" 'lisp-compile-file) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
90 (define-key inferior-lisp-mode-map "\C-c\C-a" 'lisp-show-arglist) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
91 (define-key inferior-lisp-mode-map "\C-c\C-d" 'lisp-describe-sym) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
92 (define-key inferior-lisp-mode-map "\C-c\C-f" |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
93 'lisp-show-function-documentation) |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
94 (define-key inferior-lisp-mode-map "\C-c\C-v" |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
95 'lisp-show-variable-documentation)) |
267 | 96 |
97 ;;; These commands augment Lisp mode, so you can process Lisp code in | |
98 ;;; the source files. | |
99 (define-key lisp-mode-map "\M-\C-x" 'lisp-eval-defun) ; Gnu convention | |
100 (define-key lisp-mode-map "\C-x\C-e" 'lisp-eval-last-sexp) ; Gnu convention | |
101 (define-key lisp-mode-map "\C-c\C-e" 'lisp-eval-defun) | |
102 (define-key lisp-mode-map "\C-c\C-r" 'lisp-eval-region) | |
103 (define-key lisp-mode-map "\C-c\C-c" 'lisp-compile-defun) | |
104 (define-key lisp-mode-map "\C-c\C-z" 'switch-to-lisp) | |
105 (define-key lisp-mode-map "\C-c\C-l" 'lisp-load-file) | |
106 (define-key lisp-mode-map "\C-c\C-k" 'lisp-compile-file) ; "kompile" file | |
107 (define-key lisp-mode-map "\C-c\C-a" 'lisp-show-arglist) | |
108 (define-key lisp-mode-map "\C-c\C-d" 'lisp-describe-sym) | |
109 (define-key lisp-mode-map "\C-c\C-f" 'lisp-show-function-documentation) | |
110 (define-key lisp-mode-map "\C-c\C-v" 'lisp-show-variable-documentation) | |
111 | |
112 | |
727 | 113 ;;; This function exists for backwards compatibility. |
114 ;;; Previous versions of this package bound commands to C-c <letter> | |
115 ;;; bindings, which is not allowed by the gnumacs standard. | |
116 | |
3663 | 117 ;;; "This function binds many inferior-lisp commands to C-c <letter> bindings, |
118 ;;;where they are more accessible. C-c <letter> bindings are reserved for the | |
119 ;;;user, so these bindings are non-standard. If you want them, you should | |
120 ;;;have this function called by the inferior-lisp-load-hook: | |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
121 ;;; (add-hook 'inferior-lisp-load-hook 'inferior-lisp-install-letter-bindings) |
3663 | 122 ;;;You can modify this function to install just the bindings you want." |
835 | 123 (defun inferior-lisp-install-letter-bindings () |
727 | 124 (define-key lisp-mode-map "\C-ce" 'lisp-eval-defun-and-go) |
125 (define-key lisp-mode-map "\C-cr" 'lisp-eval-region-and-go) | |
126 (define-key lisp-mode-map "\C-cc" 'lisp-compile-defun-and-go) | |
127 (define-key lisp-mode-map "\C-cz" 'switch-to-lisp) | |
128 (define-key lisp-mode-map "\C-cl" 'lisp-load-file) | |
129 (define-key lisp-mode-map "\C-ck" 'lisp-compile-file) | |
130 (define-key lisp-mode-map "\C-ca" 'lisp-show-arglist) | |
131 (define-key lisp-mode-map "\C-cd" 'lisp-describe-sym) | |
132 (define-key lisp-mode-map "\C-cf" 'lisp-show-function-documentation) | |
133 (define-key lisp-mode-map "\C-cv" 'lisp-show-variable-documentation) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
134 |
835 | 135 (define-key inferior-lisp-mode-map "\C-cl" 'lisp-load-file) |
136 (define-key inferior-lisp-mode-map "\C-ck" 'lisp-compile-file) | |
137 (define-key inferior-lisp-mode-map "\C-ca" 'lisp-show-arglist) | |
138 (define-key inferior-lisp-mode-map "\C-cd" 'lisp-describe-sym) | |
139 (define-key inferior-lisp-mode-map "\C-cf" 'lisp-show-function-documentation) | |
140 (define-key inferior-lisp-mode-map "\C-cv" | |
141 'lisp-show-variable-documentation)) | |
727 | 142 |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
143 ;;;###autoload |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
144 (defcustom inferior-lisp-program "lisp" |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
145 "*Program name for invoking an inferior Lisp in Inferior Lisp mode." |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
146 :type 'string |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
147 :group 'inferior-lisp) |
727 | 148 |
957 | 149 ;;;###autoload |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
150 (defcustom inferior-lisp-load-command "(load \"%s\")\n" |
267 | 151 "*Format-string for building a Lisp expression to load a file. |
3663 | 152 This format string should use `%s' to substitute a file name |
267 | 153 and should result in a Lisp expression that will command the inferior Lisp |
154 to load that file. The default works acceptably on most Lisps. | |
13644
e36da6ad58fe
(inferior-lisp-load-command): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12868
diff
changeset
|
155 The string \"(progn (load \\\"%s\\\" :verbose nil :print t) (values))\\n\" |
267 | 156 produces cosmetically superior output for this application, |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
157 but it works only in Common Lisp." |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
158 :type 'string |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
159 :group 'inferior-lisp) |
267 | 160 |
957 | 161 ;;;###autoload |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
162 (defcustom inferior-lisp-prompt "^[^> \n]*>+:? *" |
63519
e33c4b9caa8a
(inferior-lisp-prompt): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
62874
diff
changeset
|
163 "Regexp to recognize prompts in the Inferior Lisp mode. |
5303
8e6ba05e1271
(inferior-lisp-prompt): Don't match more than one line.
Richard M. Stallman <rms@gnu.org>
parents:
5104
diff
changeset
|
164 Defaults to \"^[^> \\n]*>+:? *\", which works pretty good for Lucid, kcl, |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
165 and franz. This variable is used to initialize `comint-prompt-regexp' in the |
3663 | 166 Inferior Lisp buffer. |
267 | 167 |
30647
9d266998439c
(inferior-lisp-prompt): Doc change.
Miles Bader <miles@gnu.org>
parents:
28656
diff
changeset
|
168 This variable is only used if the variable |
61877
395f55ef5adc
(inferior-lisp-prompt): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61707
diff
changeset
|
169 `comint-use-prompt-regexp' is non-nil. |
30647
9d266998439c
(inferior-lisp-prompt): Doc change.
Miles Bader <miles@gnu.org>
parents:
28656
diff
changeset
|
170 |
267 | 171 More precise choices: |
13644
e36da6ad58fe
(inferior-lisp-load-command): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12868
diff
changeset
|
172 Lucid Common Lisp: \"^\\\\(>\\\\|\\\\(->\\\\)+\\\\) *\" |
e36da6ad58fe
(inferior-lisp-load-command): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12868
diff
changeset
|
173 franz: \"^\\\\(->\\\\|<[0-9]*>:\\\\) *\" |
267 | 174 kcl: \"^>+ *\" |
175 | |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
176 This is a fine thing to set in your .emacs file or through Custom." |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
177 :type 'regexp |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
178 :group 'inferior-lisp) |
267 | 179 |
3744
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
180 (defvar inferior-lisp-buffer nil "*The current inferior-lisp process buffer. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
181 |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
182 MULTIPLE PROCESS SUPPORT |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
183 =========================================================================== |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
184 To run multiple Lisp processes, you start the first up |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
185 with \\[inferior-lisp]. It will be in a buffer named `*inferior-lisp*'. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
186 Rename this buffer with \\[rename-buffer]. You may now start up a new |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
187 process with another \\[inferior-lisp]. It will be in a new buffer, |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
188 named `*inferior-lisp*'. You can switch between the different process |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
189 buffers with \\[switch-to-buffer]. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
190 |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
191 Commands that send text from source buffers to Lisp processes -- |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
192 like `lisp-eval-defun' or `lisp-show-arglist' -- have to choose a process |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
193 to send to, when you have more than one Lisp process around. This |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
194 is determined by the global variable `inferior-lisp-buffer'. Suppose you |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
195 have three inferior Lisps running: |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
196 Buffer Process |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
197 foo inferior-lisp |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
198 bar inferior-lisp<2> |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
199 *inferior-lisp* inferior-lisp<3> |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
200 If you do a \\[lisp-eval-defun] command on some Lisp source code, |
3744
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
201 what process do you send it to? |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
202 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
203 - If you're in a process buffer (foo, bar, or *inferior-lisp*), |
3744
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
204 you send it to that process. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
205 - If you're in some other buffer (e.g., a source file), you |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
206 send it to the process attached to buffer `inferior-lisp-buffer'. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
207 This process selection is performed by function `inferior-lisp-proc'. |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
208 |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
209 Whenever \\[inferior-lisp] fires up a new process, it resets |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
210 `inferior-lisp-buffer' to be the new process's buffer. If you only run |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
211 one process, this does the right thing. If you run multiple |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
212 processes, you can change `inferior-lisp-buffer' to another process |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
213 buffer with \\[set-variable].") |
f344542ac7fd
(inferior-lisp-buffer): Move defvar earlier.
Richard M. Stallman <rms@gnu.org>
parents:
3663
diff
changeset
|
214 |
957 | 215 ;;;###autoload |
62270
a5516bad2c77
(inferior-lisp-mode-hook, inferior-lisp-load-hook): Convert defcustoms
Luc Teirlinck <teirllm@auburn.edu>
parents:
61877
diff
changeset
|
216 (defvar inferior-lisp-mode-hook '() |
a5516bad2c77
(inferior-lisp-mode-hook, inferior-lisp-load-hook): Convert defcustoms
Luc Teirlinck <teirllm@auburn.edu>
parents:
61877
diff
changeset
|
217 "*Hook for customising Inferior Lisp mode.") |
267 | 218 |
17654
9005c1013176
(inferior-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
14857
diff
changeset
|
219 (put 'inferior-lisp-mode 'mode-class 'special) |
9005c1013176
(inferior-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
14857
diff
changeset
|
220 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
221 (defun inferior-lisp-mode () |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
222 "Major mode for interacting with an inferior Lisp process. |
267 | 223 Runs a Lisp interpreter as a subprocess of Emacs, with Lisp I/O through an |
3663 | 224 Emacs buffer. Variable `inferior-lisp-program' controls which Lisp interpreter |
225 is run. Variables `inferior-lisp-prompt', `inferior-lisp-filter-regexp' and | |
226 `inferior-lisp-load-command' can customize this mode for different Lisp | |
267 | 227 interpreters. |
228 | |
229 For information on running multiple processes in multiple buffers, see | |
3663 | 230 documentation for variable `inferior-lisp-buffer'. |
267 | 231 |
835 | 232 \\{inferior-lisp-mode-map} |
267 | 233 |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
234 Customization: Entry to this mode runs the hooks on `comint-mode-hook' and |
3663 | 235 `inferior-lisp-mode-hook' (in that order). |
267 | 236 |
237 You can send text to the inferior Lisp process from other buffers containing | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
238 Lisp source. |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
239 `switch-to-lisp' switches the current buffer to the Lisp process buffer. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
240 `lisp-eval-defun' sends the current defun to the Lisp process. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
241 `lisp-compile-defun' compiles the current defun. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
242 `lisp-eval-region' sends the current region to the Lisp process. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
243 `lisp-compile-region' compiles the current region. |
267 | 244 |
727 | 245 Prefixing the lisp-eval/compile-defun/region commands with |
246 a \\[universal-argument] causes a switch to the Lisp process buffer after sending | |
247 the text. | |
267 | 248 |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
249 Commands:\\<inferior-lisp-mode-map> |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
250 \\[comint-send-input] after the end of the process' output sends the text from the |
267 | 251 end of process to point. |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
252 \\[comint-send-input] before the end of the process' output copies the sexp ending at point |
267 | 253 to the end of the process' output, and sends it. |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
254 \\[comint-copy-old-input] copies the sexp ending at point to the end of the process' output, |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
255 allowing you to edit it before sending it. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
256 If `comint-use-prompt-regexp' is nil (the default), \\[comint-insert-input] on old input |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
257 copies the entire old input to the end of the process' output, allowing |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
258 you to edit it before sending it. When not used on old input, or if |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
259 `comint-use-prompt-regexp' is non-nil, \\[comint-insert-input] behaves according to |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
260 its global binding. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
261 \\[backward-delete-char-untabify] converts tabs to spaces as it moves back. |
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
262 \\[lisp-indent-line] indents for Lisp; with argument, shifts rest |
267 | 263 of expression rigidly with the current line. |
71143
12144c8b3b94
(inferior-lisp-mode): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
68773
diff
changeset
|
264 \\[indent-sexp] does \\[lisp-indent-line] on each line starting within following expression. |
267 | 265 Paragraphs are separated only by blank lines. Semicolons start comments. |
266 If you accidentally suspend your process, use \\[comint-continue-subjob] | |
267 to continue it." | |
268 (interactive) | |
62874
e179d5e9c0fe
(inferior-lisp-mode): Use delay-mode-hooks.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62772
diff
changeset
|
269 (delay-mode-hooks |
e179d5e9c0fe
(inferior-lisp-mode): Use delay-mode-hooks.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62772
diff
changeset
|
270 (comint-mode)) |
267 | 271 (setq comint-prompt-regexp inferior-lisp-prompt) |
835 | 272 (setq major-mode 'inferior-lisp-mode) |
273 (setq mode-name "Inferior Lisp") | |
7075
7c7b98107b4c
(inferior-lisp-mode): Remove space after `:' in mode-line-process.
Richard M. Stallman <rms@gnu.org>
parents:
6151
diff
changeset
|
274 (setq mode-line-process '(":%s")) |
835 | 275 (lisp-mode-variables t) |
276 (use-local-map inferior-lisp-mode-map) ;c-c c-k for "kompile" file | |
267 | 277 (setq comint-get-old-input (function lisp-get-old-input)) |
278 (setq comint-input-filter (function lisp-input-filter)) | |
62772
f2892faa87d4
* progmodes/ada-mode.el (ada-mode):
Lute Kamstra <lute@gnu.org>
parents:
62270
diff
changeset
|
279 (run-mode-hooks 'inferior-lisp-mode-hook)) |
267 | 280 |
281 (defun lisp-get-old-input () | |
3663 | 282 "Return a string containing the sexp ending at point." |
267 | 283 (save-excursion |
284 (let ((end (point))) | |
285 (backward-sexp) | |
286 (buffer-substring (point) end)))) | |
287 | |
288 (defun lisp-input-filter (str) | |
3663 | 289 "t if STR does not match `inferior-lisp-filter-regexp'." |
835 | 290 (not (string-match inferior-lisp-filter-regexp str))) |
267 | 291 |
957 | 292 ;;;###autoload |
835 | 293 (defun inferior-lisp (cmd) |
3663 | 294 "Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'. |
295 If there is a process already running in `*inferior-lisp*', just switch | |
835 | 296 to that buffer. |
727 | 297 With argument, allows you to edit the command line (default is value |
3663 | 298 of `inferior-lisp-program'). Runs the hooks from |
299 `inferior-lisp-mode-hook' (after the `comint-mode-hook' is run). | |
267 | 300 \(Type \\[describe-mode] in the process buffer for a list of commands.)" |
727 | 301 (interactive (list (if current-prefix-arg |
302 (read-string "Run lisp: " inferior-lisp-program) | |
835 | 303 inferior-lisp-program))) |
304 (if (not (comint-check-proc "*inferior-lisp*")) | |
28656
ebc349d16eb9
(inferior-lisp-mode): Don't set
Gerd Moellmann <gerd@gnu.org>
parents:
23700
diff
changeset
|
305 (let ((cmdlist (split-string cmd))) |
835 | 306 (set-buffer (apply (function make-comint) |
307 "inferior-lisp" (car cmdlist) nil (cdr cmdlist))) | |
308 (inferior-lisp-mode))) | |
309 (setq inferior-lisp-buffer "*inferior-lisp*") | |
12868
8c777db02099
(inferior-lisp): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
310 (pop-to-buffer "*inferior-lisp*")) |
8c777db02099
(inferior-lisp): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7639
diff
changeset
|
311 ;;;###autoload (add-hook 'same-window-buffer-names "*inferior-lisp*") |
835 | 312 |
3663 | 313 ;;;###autoload |
314 (defalias 'run-lisp 'inferior-lisp) | |
267 | 315 |
727 | 316 (defun lisp-eval-region (start end &optional and-go) |
317 "Send the current region to the inferior Lisp process. | |
3663 | 318 Prefix argument means switch to the Lisp buffer afterwards." |
727 | 319 (interactive "r\nP") |
835 | 320 (comint-send-region (inferior-lisp-proc) start end) |
321 (comint-send-string (inferior-lisp-proc) "\n") | |
727 | 322 (if and-go (switch-to-lisp t))) |
267 | 323 |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
324 (defun lisp-compile-string (string) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
325 "Send the string to the inferior Lisp process to be compiled and executed." |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
326 (comint-send-string |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
327 (inferior-lisp-proc) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
328 (format "(funcall (compile nil (lambda () %s)))\n" string))) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
329 |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
330 (defun lisp-eval-string (string) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
331 "Send the string to the inferior Lisp process to be executed." |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
332 (comint-send-string (inferior-lisp-proc) (concat string "\n"))) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
333 |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
334 (defun lisp-do-defun (do-string do-region) |
727 | 335 "Send the current defun to the inferior Lisp process. |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
336 The actually processing is done by `do-string' and `do-region' |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
337 which determine whether the code is compiled before evaluation. |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
338 DEFVAR forms reset the variables to the init values." |
267 | 339 (save-excursion |
727 | 340 (end-of-defun) |
341 (skip-chars-backward " \t\n\r\f") ; Makes allegro happy | |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
342 (let ((end (point)) (case-fold-search t)) |
727 | 343 (beginning-of-defun) |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
344 (if (looking-at "(defvar") |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
345 (funcall do-string |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
346 ;; replace `defvar' with `defparameter' |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
347 (concat "(defparameter " |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
348 (buffer-substring-no-properties (+ (point) 7) end) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
349 "\n")) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
350 (funcall do-region (point) end))))) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
351 |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
352 (defun lisp-eval-defun (&optional and-go) |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
353 "Send the current defun to the inferior Lisp process. |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
354 DEFVAR forms reset the variables to the init values. |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
355 Prefix argument means switch to the Lisp buffer afterwards." |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
356 (interactive "P") |
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
357 (lisp-do-defun 'lisp-eval-string 'lisp-eval-region) |
727 | 358 (if and-go (switch-to-lisp t))) |
267 | 359 |
727 | 360 (defun lisp-eval-last-sexp (&optional and-go) |
361 "Send the previous sexp to the inferior Lisp process. | |
3663 | 362 Prefix argument means switch to the Lisp buffer afterwards." |
727 | 363 (interactive "P") |
364 (lisp-eval-region (save-excursion (backward-sexp) (point)) (point) and-go)) | |
267 | 365 |
727 | 366 (defun lisp-compile-region (start end &optional and-go) |
367 "Compile the current region in the inferior Lisp process. | |
3663 | 368 Prefix argument means switch to the Lisp buffer afterwards." |
727 | 369 (interactive "r\nP") |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
370 (lisp-compile-string (buffer-substring-no-properties start end)) |
727 | 371 (if and-go (switch-to-lisp t))) |
835 | 372 |
727 | 373 (defun lisp-compile-defun (&optional and-go) |
374 "Compile the current defun in the inferior Lisp process. | |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
375 DEFVAR forms reset the variables to the init values. |
3663 | 376 Prefix argument means switch to the Lisp buffer afterwards." |
727 | 377 (interactive "P") |
93823
11a95e2059c8
lisp-eval-defun & lisp-compile-defun: DEFVAR forms reset the variables
Sam Steingold <sds@gnu.org>
parents:
79717
diff
changeset
|
378 (lisp-do-defun 'lisp-compile-string 'lisp-compile-region) |
727 | 379 (if and-go (switch-to-lisp t))) |
267 | 380 |
381 (defun switch-to-lisp (eob-p) | |
382 "Switch to the inferior Lisp process buffer. | |
383 With argument, positions cursor at end of buffer." | |
384 (interactive "P") | |
23700
3be52677d330
(switch-to-lisp): if no inferior lisp present, call
Karl Heuer <kwzh@gnu.org>
parents:
17654
diff
changeset
|
385 (if (get-buffer-process inferior-lisp-buffer) |
14857
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
386 (let ((pop-up-frames |
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
387 ;; Be willing to use another frame |
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
388 ;; that already has the window in it. |
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
389 (or pop-up-frames |
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
390 (get-buffer-window inferior-lisp-buffer t)))) |
eb23eca2abf9
(switch-to-lisp): Sometimes turn on pop-up-frames.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
391 (pop-to-buffer inferior-lisp-buffer)) |
23700
3be52677d330
(switch-to-lisp): if no inferior lisp present, call
Karl Heuer <kwzh@gnu.org>
parents:
17654
diff
changeset
|
392 (run-lisp inferior-lisp-program)) |
3be52677d330
(switch-to-lisp): if no inferior lisp present, call
Karl Heuer <kwzh@gnu.org>
parents:
17654
diff
changeset
|
393 (when eob-p |
267 | 394 (push-mark) |
23700
3be52677d330
(switch-to-lisp): if no inferior lisp present, call
Karl Heuer <kwzh@gnu.org>
parents:
17654
diff
changeset
|
395 (goto-char (point-max)))) |
267 | 396 |
727 | 397 |
398 ;;; Now that lisp-compile/eval-defun/region takes an optional prefix arg, | |
399 ;;; these commands are redundant. But they are kept around for the user | |
400 ;;; to bind if he wishes, for backwards functionality, and because it's | |
401 ;;; easier to type C-c e than C-u C-c C-e. | |
402 | |
267 | 403 (defun lisp-eval-region-and-go (start end) |
3663 | 404 "Send the current region to the inferior Lisp, and switch to its buffer." |
267 | 405 (interactive "r") |
727 | 406 (lisp-eval-region start end t)) |
267 | 407 |
408 (defun lisp-eval-defun-and-go () | |
3663 | 409 "Send the current defun to the inferior Lisp, and switch to its buffer." |
267 | 410 (interactive) |
727 | 411 (lisp-eval-defun t)) |
267 | 412 |
413 (defun lisp-compile-region-and-go (start end) | |
3663 | 414 "Compile the current region in the inferior Lisp, and switch to its buffer." |
267 | 415 (interactive "r") |
727 | 416 (lisp-compile-region start end t)) |
267 | 417 |
418 (defun lisp-compile-defun-and-go () | |
3663 | 419 "Compile the current defun in the inferior Lisp, and switch to its buffer." |
267 | 420 (interactive) |
727 | 421 (lisp-compile-defun t)) |
267 | 422 |
423 ;;; A version of the form in H. Shevis' soar-mode.el package. Less robust. | |
835 | 424 ;;; (defun lisp-compile-sexp (start end) |
425 ;;; "Compile the s-expression bounded by START and END in the inferior lisp. | |
426 ;;; If the sexp isn't a DEFUN form, it is evaluated instead." | |
427 ;;; (cond ((looking-at "(defun\\s +") | |
428 ;;; (goto-char (match-end 0)) | |
429 ;;; (let ((name-start (point))) | |
430 ;;; (forward-sexp 1) | |
431 ;;; (process-send-string "inferior-lisp" | |
432 ;;; (format "(compile '%s #'(lambda " | |
433 ;;; (buffer-substring name-start | |
434 ;;; (point))))) | |
435 ;;; (let ((body-start (point))) | |
436 ;;; (goto-char start) (forward-sexp 1) ; Can't use end-of-defun. | |
437 ;;; (process-send-region "inferior-lisp" | |
438 ;;; (buffer-substring body-start (point)))) | |
439 ;;; (process-send-string "inferior-lisp" ")\n")) | |
440 ;;; (t (lisp-eval-region start end))))) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
441 ;;; |
835 | 442 ;;; (defun lisp-compile-region (start end) |
443 ;;; "Each s-expression in the current region is compiled (if a DEFUN) | |
444 ;;; or evaluated (if not) in the inferior lisp." | |
445 ;;; (interactive "r") | |
446 ;;; (save-excursion | |
447 ;;; (goto-char start) (end-of-defun) (beginning-of-defun) ; error check | |
448 ;;; (if (< (point) start) (error "region begins in middle of defun")) | |
449 ;;; (goto-char start) | |
450 ;;; (let ((s start)) | |
451 ;;; (end-of-defun) | |
452 ;;; (while (<= (point) end) ; Zip through | |
453 ;;; (lisp-compile-sexp s (point)) ; compiling up defun-sized chunks. | |
454 ;;; (setq s (point)) | |
455 ;;; (end-of-defun)) | |
456 ;;; (if (< s end) (lisp-compile-sexp s end))))) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
457 ;;; |
267 | 458 ;;; End of HS-style code |
459 | |
460 | |
461 (defvar lisp-prev-l/c-dir/file nil | |
3663 | 462 "Record last directory and file used in loading or compiling. |
463 This holds a cons cell of the form `(DIRECTORY . FILE)' | |
464 describing the last `lisp-load-file' or `lisp-compile-file' command.") | |
267 | 465 |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
466 (defcustom lisp-source-modes '(lisp-mode) |
267 | 467 "*Used to determine if a buffer contains Lisp source code. |
468 If it's loaded into a buffer that is in one of these major modes, it's | |
3663 | 469 considered a Lisp source file by `lisp-load-file' and `lisp-compile-file'. |
61707
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
470 Used by these commands to determine defaults." |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
471 :type '(repeat symbol) |
5a21477f3dd8
(inferior-lisp): New defgroup.
Luc Teirlinck <teirllm@auburn.edu>
parents:
52401
diff
changeset
|
472 :group 'inferior-lisp) |
267 | 473 |
474 (defun lisp-load-file (file-name) | |
475 "Load a Lisp file into the inferior Lisp process." | |
476 (interactive (comint-get-source "Load Lisp file: " lisp-prev-l/c-dir/file | |
42205 | 477 lisp-source-modes nil)) ; nil because LOAD |
835 | 478 ; doesn't need an exact name |
267 | 479 (comint-check-source file-name) ; Check to see if buffer needs saved. |
480 (setq lisp-prev-l/c-dir/file (cons (file-name-directory file-name) | |
481 (file-name-nondirectory file-name))) | |
835 | 482 (comint-send-string (inferior-lisp-proc) |
727 | 483 (format inferior-lisp-load-command file-name)) |
484 (switch-to-lisp t)) | |
267 | 485 |
486 | |
487 (defun lisp-compile-file (file-name) | |
488 "Compile a Lisp file in the inferior Lisp process." | |
489 (interactive (comint-get-source "Compile Lisp file: " lisp-prev-l/c-dir/file | |
42205 | 490 lisp-source-modes nil)) ; nil = don't need |
835 | 491 ; suffix .lisp |
267 | 492 (comint-check-source file-name) ; Check to see if buffer needs saved. |
493 (setq lisp-prev-l/c-dir/file (cons (file-name-directory file-name) | |
494 (file-name-nondirectory file-name))) | |
835 | 495 (comint-send-string (inferior-lisp-proc) (concat "(compile-file \"" |
496 file-name | |
497 "\"\)\n")) | |
727 | 498 (switch-to-lisp t)) |
267 | 499 |
500 | |
501 | |
502 ;;; Documentation functions: function doc, var doc, arglist, and | |
503 ;;; describe symbol. | |
504 ;;; =========================================================================== | |
505 | |
506 ;;; Command strings | |
507 ;;; =============== | |
508 | |
509 (defvar lisp-function-doc-command | |
510 "(let ((fn '%s)) | |
511 (format t \"Documentation for ~a:~&~a\" | |
512 fn (documentation fn 'function)) | |
513 (values))\n" | |
514 "Command to query inferior Lisp for a function's documentation.") | |
515 | |
516 (defvar lisp-var-doc-command | |
517 "(let ((v '%s)) | |
518 (format t \"Documentation for ~a:~&~a\" | |
519 v (documentation v 'variable)) | |
520 (values))\n" | |
521 "Command to query inferior Lisp for a variable's documentation.") | |
522 | |
523 (defvar lisp-arglist-command | |
524 "(let ((fn '%s)) | |
525 (format t \"Arglist for ~a: ~a\" fn (arglist fn)) | |
526 (values))\n" | |
527 "Command to query inferior Lisp for a function's arglist.") | |
528 | |
529 (defvar lisp-describe-sym-command | |
530 "(describe '%s)\n" | |
531 "Command to query inferior Lisp for a variable's documentation.") | |
532 | |
533 | |
534 ;;; Ancillary functions | |
535 ;;; =================== | |
536 | |
537 ;;; Reads a string from the user. | |
538 (defun lisp-symprompt (prompt default) | |
539 (list (let* ((prompt (if default | |
540 (format "%s (default %s): " prompt default) | |
835 | 541 (concat prompt ": "))) |
267 | 542 (ans (read-string prompt))) |
543 (if (zerop (length ans)) default ans)))) | |
544 | |
545 | |
546 ;;; Adapted from function-called-at-point in help.el. | |
547 (defun lisp-fn-called-at-pt () | |
548 "Returns the name of the function called in the current call. | |
3663 | 549 The value is nil if it can't find one." |
267 | 550 (condition-case nil |
551 (save-excursion | |
552 (save-restriction | |
553 (narrow-to-region (max (point-min) (- (point) 1000)) (point-max)) | |
554 (backward-up-list 1) | |
555 (forward-char 1) | |
556 (let ((obj (read (current-buffer)))) | |
557 (and (symbolp obj) obj)))) | |
558 (error nil))) | |
559 | |
560 | |
561 ;;; Adapted from variable-at-point in help.el. | |
562 (defun lisp-var-at-pt () | |
563 (condition-case () | |
564 (save-excursion | |
565 (forward-sexp -1) | |
566 (skip-chars-forward "'") | |
567 (let ((obj (read (current-buffer)))) | |
568 (and (symbolp obj) obj))) | |
569 (error nil))) | |
570 | |
571 | |
572 ;;; Documentation functions: fn and var doc, arglist, and symbol describe. | |
573 ;;; ====================================================================== | |
574 | |
575 (defun lisp-show-function-documentation (fn) | |
576 "Send a command to the inferior Lisp to give documentation for function FN. | |
3663 | 577 See variable `lisp-function-doc-command'." |
267 | 578 (interactive (lisp-symprompt "Function doc" (lisp-fn-called-at-pt))) |
835 | 579 (comint-proc-query (inferior-lisp-proc) |
580 (format lisp-function-doc-command fn))) | |
267 | 581 |
582 (defun lisp-show-variable-documentation (var) | |
583 "Send a command to the inferior Lisp to give documentation for function FN. | |
3663 | 584 See variable `lisp-var-doc-command'." |
267 | 585 (interactive (lisp-symprompt "Variable doc" (lisp-var-at-pt))) |
835 | 586 (comint-proc-query (inferior-lisp-proc) (format lisp-var-doc-command var))) |
267 | 587 |
588 (defun lisp-show-arglist (fn) | |
3663 | 589 "Send a query to the inferior Lisp for the arglist for function FN. |
590 See variable `lisp-arglist-command'." | |
267 | 591 (interactive (lisp-symprompt "Arglist" (lisp-fn-called-at-pt))) |
835 | 592 (comint-proc-query (inferior-lisp-proc) (format lisp-arglist-command fn))) |
267 | 593 |
594 (defun lisp-describe-sym (sym) | |
595 "Send a command to the inferior Lisp to describe symbol SYM. | |
3663 | 596 See variable `lisp-describe-sym-command'." |
267 | 597 (interactive (lisp-symprompt "Describe" (lisp-var-at-pt))) |
835 | 598 (comint-proc-query (inferior-lisp-proc) |
599 (format lisp-describe-sym-command sym))) | |
267 | 600 |
601 | |
3663 | 602 ;; "Returns the current inferior Lisp process. |
603 ;; See variable `inferior-lisp-buffer'." | |
835 | 604 (defun inferior-lisp-proc () |
267 | 605 (let ((proc (get-buffer-process (if (eq major-mode 'inferior-lisp-mode) |
606 (current-buffer) | |
835 | 607 inferior-lisp-buffer)))) |
267 | 608 (or proc |
5104
bcf4b8ed1c60
(inferior-lisp-proc): Clean up error message.
Richard M. Stallman <rms@gnu.org>
parents:
3744
diff
changeset
|
609 (error "No Lisp subprocess; see variable `inferior-lisp-buffer'")))) |
267 | 610 |
611 | |
612 ;;; Do the user's customisation... | |
613 ;;;=============================== | |
62270
a5516bad2c77
(inferior-lisp-mode-hook, inferior-lisp-load-hook): Convert defcustoms
Luc Teirlinck <teirllm@auburn.edu>
parents:
61877
diff
changeset
|
614 (defvar inferior-lisp-load-hook nil |
a5516bad2c77
(inferior-lisp-mode-hook, inferior-lisp-load-hook): Convert defcustoms
Luc Teirlinck <teirllm@auburn.edu>
parents:
61877
diff
changeset
|
615 "This hook is run when the library `inf-lisp' is loaded.") |
835 | 616 |
617 (run-hooks 'inferior-lisp-load-hook) | |
267 | 618 |
619 ;;; CHANGE LOG | |
620 ;;; =========================================================================== | |
835 | 621 ;;; 7/21/92 Jim Blandy |
622 ;;; - Changed all uses of the cmulisp name or prefix to inferior-lisp; | |
623 ;;; this is now the official inferior lisp package. Use the global | |
624 ;;; ChangeLog from now on. | |
267 | 625 ;;; 5/24/90 Olin |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
626 ;;; - Split cmulisp and cmushell modes into separate files. |
267 | 627 ;;; Not only is this a good idea, it's apparently the way it'll be rel 19. |
628 ;;; - Upgraded process sends to use comint-send-string instead of | |
629 ;;; process-send-string. | |
630 ;;; - Explicit references to process "cmulisp" have been replaced with | |
631 ;;; (cmulisp-proc). This allows better handling of multiple process bufs. | |
632 ;;; - Added process query and var/function/symbol documentation | |
633 ;;; commands. Based on code written by Douglas Roberts. | |
634 ;;; - Added lisp-eval-last-sexp, bound to C-x C-e. | |
635 ;;; | |
636 ;;; 9/20/90 Olin | |
637 ;;; Added a save-restriction to lisp-fn-called-at-pt. This bug and fix | |
638 ;;; reported by Lennart Staflin. | |
639 ;;; | |
640 ;;; 3/12/90 Olin | |
641 ;;; - lisp-load-file and lisp-compile-file no longer switch-to-lisp. | |
642 ;;; Tale suggested this. | |
727 | 643 ;;; - Reversed this decision 7/15/91. You need the visual feedback. |
644 ;;; | |
645 ;;; 7/25/91 Olin | |
646 ;;; Changed all keybindings of the form C-c <letter>. These are | |
647 ;;; supposed to be reserved for the user to bind. This affected | |
648 ;;; mainly the compile/eval-defun/region[-and-go] commands. | |
649 ;;; This was painful, but necessary to adhere to the gnumacs standard. | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30647
diff
changeset
|
650 ;;; For some backwards compatibility, see the |
727 | 651 ;;; cmulisp-install-letter-bindings |
652 ;;; function. | |
653 ;;; | |
654 ;;; 8/2/91 Olin | |
655 ;;; - The lisp-compile/eval-defun/region commands now take a prefix arg, | |
656 ;;; which means switch-to-lisp after sending the text to the Lisp process. | |
657 ;;; This obsoletes all the -and-go commands. The -and-go commands are | |
658 ;;; kept around for historical reasons, and because the user can bind | |
659 ;;; them to key sequences shorter than C-u C-c C-<letter>. | |
660 ;;; - If M-x cmulisp is invoked with a prefix arg, it allows you to | |
661 ;;; edit the command line. | |
584 | 662 |
835 | 663 (provide 'inf-lisp) |
584 | 664 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93823
diff
changeset
|
665 ;; arch-tag: 5b74abc3-a085-4b91-8ab8-8da6899d3b92 |
835 | 666 ;;; inf-lisp.el ends here |