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