Mercurial > emacs
annotate lisp/ielm.el @ 69571:4f6b547120ec
(set_cursor_from_row): Fix cursor property on overlay string,
so it doesn't associate overlay string with following glyph by default.
Allow integer property value to specify explicit number of buffer
positions associate with overlay string.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 19 Mar 2006 19:38:48 +0000 |
parents | 3bd95f4f2941 |
children | b2e5081b9320 c5406394f567 |
rev | line source |
---|---|
7267 | 1 ;;; ielm.el --- interaction mode for Emacs Lisp |
14169 | 2 |
68651
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64762
diff
changeset
|
3 ;; Copyright (C) 1994, 2002, 2003, 2004, 2005, |
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64762
diff
changeset
|
4 ;; 2006 Free Software Foundation, Inc. |
7267 | 5 |
6 ;; Author: David Smith <maa036@lancaster.ac.uk> | |
17976 | 7 ;; Maintainer: FSF |
7267 | 8 ;; Created: 25 Feb 1994 |
9 ;; Keywords: lisp | |
10 | |
11 ;; This file is part of GNU Emacs. | |
12 | |
13 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
14 ;; it under the terms of the GNU General Public License as published by | |
15 ;; the Free Software Foundation; either version 2, or (at your option) | |
16 ;; any later version. | |
17 | |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; You should have received a copy of the GNU General Public License | |
14169 | 24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
26 ;; Boston, MA 02110-1301, USA. | |
7267 | 27 |
28 ;;; Commentary: | |
29 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
30 ;; Provides a nice interface to evaluating Emacs Lisp expressions. |
7267 | 31 ;; Input is handled by the comint package, and output is passed |
32 ;; through the pretty-printer. | |
33 | |
34 ;; To start: M-x ielm. Type C-h m in the *ielm* buffer for more info. | |
35 | |
36 ;;; Code: | |
37 | |
38 (require 'comint) | |
39 (require 'pp) | |
40 | |
41 ;;; User variables | |
42 | |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
43 (defgroup ielm nil |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
44 "Interaction mode for Emacs Lisp." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
45 :group 'lisp) |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
46 |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
47 |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
48 (defcustom ielm-noisy t |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
49 "*If non-nil, IELM will beep on error." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
50 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
51 :group 'ielm) |
7267 | 52 |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
53 (defcustom ielm-prompt-read-only t |
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
54 "If non-nil, the IELM prompt is read only. |
55296
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
55 The read only region includes the newline before the prompt. |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
56 Setting this variable does not affect existing IELM runs. |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
57 This works by setting the buffer-local value of `comint-prompt-read-only'. |
55296
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
58 Setting that value directly affects new prompts in the current buffer. |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
59 |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
60 If this option is enabled, then the safe way to temporarily |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
61 override the read-only-ness of ielm prompts is to call |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
62 `comint-kill-whole-line' or `comint-kill-region' with no |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
63 narrowing in effect. This way you will be certain that none of |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
64 the remaining prompts will be accidentally messed up. You may |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
65 wish to put something like the following in your `.emacs' file: |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
66 |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
67 \(add-hook 'ielm-mode-hook |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
68 '(lambda () |
61370
116c10e516e5
(ielm-prompt-read-only): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
59996
diff
changeset
|
69 (define-key ielm-map \"\\C-w\" 'comint-kill-region) |
55296
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
70 (define-key ielm-map [C-S-backspace] |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
71 'comint-kill-whole-line))) |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
72 |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
73 If you set `comint-prompt-read-only' to t, you might wish to use |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
74 `comint-mode-hook' and `comint-mode-map' instead of |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
75 `ielm-mode-hook' and `ielm-map'. That will affect all comint |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
76 buffers, including ielm buffers. If you sometimes use ielm on |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
77 text-only terminals or with `emacs -nw', you might wish to use |
24a3d142d101
(ielm-prompt-read-only): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55224
diff
changeset
|
78 another binding for `comint-kill-whole-line'." |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
79 :type 'boolean |
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
80 :group 'ielm |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
56790
diff
changeset
|
81 :version "22.1") |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
82 |
43524
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
83 (defcustom ielm-prompt "ELISP> " |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
84 "Prompt used in IELM. |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
85 Setting this variable does not affect existing IELM runs. |
55144
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
86 |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
87 Interrupting the IELM process with \\<ielm-map>\\[comint-interrupt-subjob], |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
88 and then restarting it using \\[ielm], makes the then current |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
89 default value affect _new_ prompts. Unless the new prompt |
55144
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
90 differs only in text properties from the old one, IELM will no |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
91 longer recognize the old prompts. However, executing \\[ielm] |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
92 does not update the prompt of an *ielm* buffer with a running process. |
55146
1a8fe9f88f09
(ielm-prompt-read-only, ielm-prompt): Minor doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55144
diff
changeset
|
93 For IELM buffers that are not called `*ielm*', you can execute |
55144
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
94 \\[inferior-emacs-lisp-mode] in that IELM buffer to update the value, |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
95 for new prompts. This works even if the buffer has a running process." |
43524
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
96 :type 'string |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
97 :group 'ielm) |
7267 | 98 |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
99 (defvar ielm-prompt-internal "ELISP> " |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
100 "Stored value of `ielm-prompt' in the current IELM buffer. |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
101 This is an internal variable used by IELM. Its purpose is to |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
102 prevent a running IELM process from being messed up when the user |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
103 customizes `ielm-prompt'.") |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
104 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
105 (defcustom ielm-dynamic-return t |
63253
20e759335619
(ielm-dynamic-return, inferior-emacs-lisp-mode): Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
62875
diff
changeset
|
106 "*Controls whether \\<ielm-map>\\[ielm-return] has intelligent behavior in IELM. |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
107 If non-nil, \\[ielm-return] evaluates input for complete sexps, or inserts a newline |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
108 and indents for incomplete sexps. If nil, always inserts newlines." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
109 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
110 :group 'ielm) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
111 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
112 (defcustom ielm-dynamic-multiline-inputs t |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
113 "*Force multiline inputs to start from column zero? |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
114 If non-nil, after entering the first line of an incomplete sexp, a newline |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
115 will be inserted after the prompt, moving the input to the next line. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
116 This gives more frame width for large indented sexps, and allows functions |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
117 such as `edebug-defun' to work with such inputs." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
118 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
119 :group 'ielm) |
7267 | 120 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
121 (defcustom ielm-mode-hook nil |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
122 "*Hooks to be run when IELM (`inferior-emacs-lisp-mode') is started." |
52446 | 123 :options '(turn-on-eldoc-mode) |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
124 :type 'hook |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
125 :group 'ielm) |
7267 | 126 |
21834
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
127 (defvar * nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
128 "Most recent value evaluated in IELM.") |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
129 |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
130 (defvar ** nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
131 "Second-most-recent value evaluated in IELM.") |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
132 |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
133 (defvar *** nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
134 "Third-most-recent value evaluated in IELM.") |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
135 |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
136 (defvar ielm-match-data nil |
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
137 "Match data saved at the end of last command.") |
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
138 |
47586
86b3a5572fda
(*1): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
47551
diff
changeset
|
139 (defvar *1 nil |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
140 "During IELM evaluation, most recent value evaluated in IELM. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
141 Normally identical to `*'. However, if the working buffer is an IELM |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
142 buffer, distinct from the process buffer, then `*' gives the value in |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49161
diff
changeset
|
143 the working buffer, `*1' the value in the process buffer. |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
144 The intended value is only accessible during IELM evaluation.") |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
145 |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
146 (defvar *2 nil |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
147 "During IELM evaluation, second-most-recent value evaluated in IELM. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
148 Normally identical to `**'. However, if the working buffer is an IELM |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
149 buffer, distinct from the process buffer, then `**' gives the value in |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
150 the working buffer, `*2' the value in the process buffer. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
151 The intended value is only accessible during IELM evaluation.") |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
152 |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
153 (defvar *3 nil |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
154 "During IELM evaluation, third-most-recent value evaluated in IELM. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
155 Normally identical to `***'. However, if the working buffer is an IELM |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
156 buffer, distinct from the process buffer, then `***' gives the value in |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
157 the working buffer, `*3' the value in the process buffer. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
158 The intended value is only accessible during IELM evaluation.") |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
159 |
7267 | 160 ;;; System variables |
161 | |
162 (defvar ielm-working-buffer nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
163 "Buffer in which IELM sexps will be evaluated. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
164 This variable is buffer-local.") |
7267 | 165 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
166 (defvar ielm-header |
18400
16de434b8026
(ielm-header): Delete version and RCS header.
Richard M. Stallman <rms@gnu.org>
parents:
18387
diff
changeset
|
167 "*** Welcome to IELM *** Type (describe-mode) for help.\n" |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
168 "Message to display when IELM is started.") |
7267 | 169 |
170 (defvar ielm-map nil) | |
171 (if ielm-map nil | |
172 (if (string-match "Lucid" emacs-version) | |
173 ;; Lemacs | |
174 (progn | |
175 (setq ielm-map (make-sparse-keymap)) | |
176 (set-keymap-parent ielm-map comint-mode-map)) | |
177 ;; FSF | |
178 (setq ielm-map (cons 'keymap comint-mode-map))) | |
179 (define-key ielm-map "\t" 'comint-dynamic-complete) | |
180 (define-key ielm-map "\C-m" 'ielm-return) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
181 (define-key ielm-map "\C-j" 'ielm-send-input) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
182 (define-key ielm-map "\e\C-x" 'eval-defun) ; for consistency with |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
183 (define-key ielm-map "\e\t" 'lisp-complete-symbol) ; lisp-interaction-mode |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
184 ;; These bindings are from `lisp-mode-shared-map' -- can you inherit |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
185 ;; from more than one keymap?? |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
186 (define-key ielm-map "\e\C-q" 'indent-sexp) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
187 (define-key ielm-map "\177" 'backward-delete-char-untabify) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
188 ;; Some convenience bindings for setting the working buffer |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
189 (define-key ielm-map "\C-c\C-b" 'ielm-change-working-buffer) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
190 (define-key ielm-map "\C-c\C-f" 'ielm-display-working-buffer) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
191 (define-key ielm-map "\C-c\C-v" 'ielm-print-working-buffer)) |
7267 | 192 |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
193 (defvar ielm-font-lock-keywords |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
194 '(("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)" |
20953
f3f9df46d008
Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents:
18400
diff
changeset
|
195 (1 font-lock-comment-face) |
f3f9df46d008
Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents:
18400
diff
changeset
|
196 (2 font-lock-constant-face))) |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
197 "Additional expressions to highlight in ielm buffers.") |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
198 |
7267 | 199 ;;; Completion stuff |
200 | |
201 (defun ielm-tab nil | |
56790
80dba6d2451b
(ielm-tab, ielm-complete-symbol): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
55296
diff
changeset
|
202 "Possibly indent the current line as Lisp code." |
7267 | 203 (interactive) |
204 (if (or (eq (preceding-char) ?\n) | |
205 (eq (char-syntax (preceding-char)) ? )) | |
206 (progn | |
207 (ielm-indent-line) | |
208 t))) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
209 |
7267 | 210 (defun ielm-complete-symbol nil |
56790
80dba6d2451b
(ielm-tab, ielm-complete-symbol): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
55296
diff
changeset
|
211 "Complete the Lisp symbol before point." |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
212 ;; A wrapper for lisp-complete symbol that returns non-nil if |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
213 ;; completion has occurred |
7267 | 214 (let* ((btick (buffer-modified-tick)) |
7842
50676390b162
(ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
7275
diff
changeset
|
215 (cbuffer (get-buffer "*Completions*")) |
7267 | 216 (ctick (and cbuffer (buffer-modified-tick cbuffer)))) |
217 (lisp-complete-symbol) | |
218 ;; completion has occurred if: | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
219 (or |
7267 | 220 ;; the buffer has been modified |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
221 (not (= btick (buffer-modified-tick))) |
14040 | 222 ;; a completions buffer has been modified or created |
7267 | 223 (if cbuffer |
224 (not (= ctick (buffer-modified-tick cbuffer))) | |
7842
50676390b162
(ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
7275
diff
changeset
|
225 (get-buffer "*Completions*"))))) |
7267 | 226 |
227 (defun ielm-complete-filename nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
228 "Dynamically complete filename before point, if in a string." |
7267 | 229 (if (nth 3 (parse-partial-sexp comint-last-input-start (point))) |
230 (comint-dynamic-complete-filename))) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
231 |
7267 | 232 (defun ielm-indent-line nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
233 "Indent the current line as Lisp code if it is not a prompt line." |
30644
ce7385745191
(ielm-indent-line): Detect a "prompt" line by seeing if comint-bol
Miles Bader <miles@gnu.org>
parents:
21834
diff
changeset
|
234 (when (save-excursion (comint-bol) (bolp)) |
7267 | 235 (lisp-indent-line))) |
236 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
237 ;;; Working buffer manipulation |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
238 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
239 (defun ielm-print-working-buffer nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
240 "Print the current IELM working buffer's name in the echo area." |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
241 (interactive) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
242 (message "The current working buffer is: %s" (buffer-name ielm-working-buffer))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
243 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
244 (defun ielm-display-working-buffer nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
245 "Display the current IELM working buffer. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
246 Don't forget that selecting that buffer will change its value of `point' |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
247 to its value of `window-point'!" |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
248 (interactive) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
249 (display-buffer ielm-working-buffer) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
250 (ielm-print-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
251 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
252 (defun ielm-change-working-buffer (buf) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
253 "Change the current IELM working buffer to BUF. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
254 This is the buffer in which all sexps entered at the IELM prompt are |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
255 evaluated. You can achieve the same effect with a call to |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
256 `set-buffer' at the IELM prompt." |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
257 (interactive "bSet working buffer to: ") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
258 (setq ielm-working-buffer (or (get-buffer buf) (error "No such buffer"))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
259 (ielm-print-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
260 |
7267 | 261 ;;; Other bindings |
262 | |
263 (defun ielm-return nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
264 "Newline and indent, or evaluate the sexp before the prompt. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
265 Complete sexps are evaluated; for incomplete sexps inserts a newline |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
266 and indents. If however `ielm-dynamic-return' is nil, this always |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
267 simply inserts a newline." |
7267 | 268 (interactive) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
269 (if ielm-dynamic-return |
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
270 (let ((state |
7267 | 271 (save-excursion |
272 (end-of-line) | |
273 (parse-partial-sexp (ielm-pm) | |
274 (point))))) | |
275 (if (and (< (car state) 1) (not (nth 3 state))) | |
276 (ielm-send-input) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
277 (if (and ielm-dynamic-multiline-inputs |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
278 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
279 (beginning-of-line) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
280 (looking-at comint-prompt-regexp))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
281 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
282 (goto-char (ielm-pm)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
283 (newline 1))) |
7267 | 284 (newline-and-indent))) |
285 (newline))) | |
286 | |
17978
1471676365ac
(ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
17976
diff
changeset
|
287 (defvar ielm-input) |
1471676365ac
(ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
17976
diff
changeset
|
288 |
7267 | 289 (defun ielm-input-sender (proc input) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
290 ;; Just sets the variable ielm-input, which is in the scope of |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
291 ;; `ielm-send-input's call. |
7267 | 292 (setq ielm-input input)) |
293 | |
294 (defun ielm-send-input nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
295 "Evaluate the Emacs Lisp expression after the prompt." |
7267 | 296 (interactive) |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
297 (let (ielm-input) ; set by ielm-input-sender |
7267 | 298 (comint-send-input) ; update history, markers etc. |
299 (ielm-eval-input ielm-input))) | |
300 | |
301 ;;; Utility functions | |
302 | |
303 (defun ielm-is-whitespace (string) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
304 "Return non-nil if STRING is all whitespace." |
7267 | 305 (or (string= string "") (string-match "\\`[ \t\n]+\\'" string))) |
306 | |
307 ;;; Evaluation | |
308 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
309 (defun ielm-eval-input (ielm-string) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
310 "Evaluate the Lisp expression IELM-STRING, and pretty-print the result." |
7267 | 311 ;; This is the function that actually `sends' the input to the |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
312 ;; `inferior Lisp process'. All comint-send-input does is works out |
7267 | 313 ;; what that input is. What this function does is evaluates that |
314 ;; input and produces `output' which gets inserted into the buffer, | |
315 ;; along with a new prompt. A better way of doing this might have | |
316 ;; been to actually send the output to the `cat' process, and write | |
317 ;; this as in output filter that converted sexps in the output | |
318 ;; stream to their evaluated value. But that would have involved | |
319 ;; more process coordination than I was happy to deal with. | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
320 ;; |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
321 ;; NOTE: all temporary variables in this function will be in scope |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
322 ;; during the eval, and so need to have non-clashing names. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
323 (let (ielm-form ; form to evaluate |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
324 ielm-pos ; End posn of parse in string |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
325 ielm-result ; Result, or error message |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
326 ielm-error-type ; string, nil if no error |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
327 (ielm-output "") ; result to display |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
328 (ielm-wbuf ielm-working-buffer) ; current buffer after evaluation |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
329 (ielm-pmark (ielm-pm))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
330 (if (not (ielm-is-whitespace ielm-string)) |
7267 | 331 (progn |
332 (condition-case err | |
333 (let (rout) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
334 (setq rout (read-from-string ielm-string)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
335 (setq ielm-form (car rout)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
336 (setq ielm-pos (cdr rout))) |
45833
e7a3c79415d6
(ielm-eval-input): Use error-message-string.
Richard M. Stallman <rms@gnu.org>
parents:
43524
diff
changeset
|
337 (error (setq ielm-result (error-message-string err)) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
338 (setq ielm-error-type "Read error"))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
339 (if ielm-error-type nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
340 ;; Make sure working buffer has not been killed |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
341 (if (not (buffer-name ielm-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
342 (setq ielm-result "Working buffer has been killed" |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
343 ielm-error-type "IELM Error" |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
344 ielm-wbuf (current-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
345 (if (ielm-is-whitespace (substring ielm-string ielm-pos)) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
346 ;; To correctly handle the ielm-local variables *, |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
347 ;; ** and ***, we need a temporary buffer to be |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
348 ;; current at entry to the inner of the next two let |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
349 ;; forms. We need another temporary buffer to exit |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
350 ;; that same let. To avoid problems, neither of |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
351 ;; these buffers should be alive during the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
352 ;; evaluation of ielm-form. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
353 (let ((*1 *) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
354 (*2 **) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
355 (*3 ***) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
356 ielm-temp-buffer) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
357 (set-match-data ielm-match-data) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
358 (save-excursion |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
359 (with-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
360 (condition-case err |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
361 (unwind-protect |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
362 ;; The next let form creates default |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
363 ;; bindings for *, ** and ***. But |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
364 ;; these default bindings are |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
365 ;; identical to the ielm-local |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
366 ;; bindings. Hence, during the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
367 ;; evaluation of ielm-form, the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
368 ;; ielm-local values are going to be |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
369 ;; used in all buffers except for |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
370 ;; other ielm buffers, which override |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
371 ;; them. Normally, the variables *1, |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
372 ;; *2 and *3 also have default |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
373 ;; bindings, which are not overridden. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
374 (let ((* *1) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
375 (** *2) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
376 (*** *3)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
377 (kill-buffer (current-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
378 (set-buffer ielm-wbuf) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
379 (setq ielm-result (eval ielm-form)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
380 (setq ielm-wbuf (current-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
381 (setq |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
382 ielm-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
383 (generate-new-buffer " *ielm-temp*")) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
384 (set-buffer ielm-temp-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
385 (when ielm-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
386 (kill-buffer ielm-temp-buffer))) |
47551
9c28c23c3153
(ielm-eval-input): Call `error-message-string' instead of the non-existent
Juanma Barranquero <lekktu@gmail.com>
parents:
47529
diff
changeset
|
387 (error (setq ielm-result (error-message-string err)) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
388 (setq ielm-error-type "Eval error")) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
389 (quit (setq ielm-result "Quit during evaluation") |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
390 (setq ielm-error-type "Eval error"))))) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
391 (setq ielm-match-data (match-data))) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
392 (setq ielm-error-type "IELM error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
393 (setq ielm-result "More than one sexp in input")))) |
7267 | 394 |
395 ;; If the eval changed the current buffer, mention it here | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
396 (if (eq ielm-wbuf ielm-working-buffer) nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
397 (message "current buffer is now: %s" ielm-wbuf) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
398 (setq ielm-working-buffer ielm-wbuf)) |
7267 | 399 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
400 (goto-char ielm-pmark) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
401 (if (not ielm-error-type) |
7267 | 402 (condition-case err |
403 ;; Self-referential objects cause loops in the printer, so | |
404 ;; trap quits here. May as well do errors, too | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
405 (setq ielm-output (concat ielm-output (pp-to-string ielm-result))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
406 (error (setq ielm-error-type "IELM Error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
407 (setq ielm-result "Error during pretty-printing (bug in pp)")) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
408 (quit (setq ielm-error-type "IELM Error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
409 (setq ielm-result "Quit during pretty-printing")))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
410 (if ielm-error-type |
7267 | 411 (progn |
412 (if ielm-noisy (ding)) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
413 (setq ielm-output (concat ielm-output "*** " ielm-error-type " *** ")) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
414 (setq ielm-output (concat ielm-output ielm-result))) |
21834
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
415 ;; There was no error, so shift the *** values |
21795
444b6677cc4e
(ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
21781
diff
changeset
|
416 (setq *** **) |
444b6677cc4e
(ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
21781
diff
changeset
|
417 (setq ** *) |
444b6677cc4e
(ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
21781
diff
changeset
|
418 (setq * ielm-result)) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
419 (setq ielm-output (concat ielm-output "\n")))) |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
420 (setq ielm-output (concat ielm-output ielm-prompt-internal)) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
421 (comint-output-filter (ielm-process) ielm-output))) |
7267 | 422 |
423 ;;; Process and marker utilities | |
424 | |
425 (defun ielm-process nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
426 ;; Return the current buffer's process. |
7267 | 427 (get-buffer-process (current-buffer))) |
428 | |
429 (defun ielm-pm nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
430 ;; Return the process mark of the current buffer. |
7267 | 431 (process-mark (get-buffer-process (current-buffer)))) |
432 | |
433 (defun ielm-set-pm (pos) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
434 ;; Set the process mark in the current buffer to POS. |
7267 | 435 (set-marker (process-mark (get-buffer-process (current-buffer))) pos)) |
436 | |
437 ;;; Major mode | |
438 | |
17649
28037dab627c
(inferior-emacs-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17634
diff
changeset
|
439 (put 'inferior-emacs-lisp-mode 'mode-class 'special) |
28037dab627c
(inferior-emacs-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17634
diff
changeset
|
440 |
7267 | 441 (defun inferior-emacs-lisp-mode nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
442 "Major mode for interactively evaluating Emacs Lisp expressions. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
443 Uses the interface provided by `comint-mode' (which see). |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
444 |
47969
cdc87bc8e049
(inferior-emacs-lisp-mode): If hexl not found, use cat. point-min != 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47626
diff
changeset
|
445 * \\<ielm-map>\\[ielm-send-input] evaluates the sexp following the prompt. There must be at most |
cdc87bc8e049
(inferior-emacs-lisp-mode): If hexl not found, use cat. point-min != 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47626
diff
changeset
|
446 one top level sexp per prompt. |
7267 | 447 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
448 * \\[ielm-return] inserts a newline and indents, or evaluates a |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
449 complete expression (but see variable `ielm-dynamic-return'). |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
450 Inputs longer than one line are moved to the line following the |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
451 prompt (but see variable `ielm-dynamic-multiline-inputs'). |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
452 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
453 * \\[comint-dynamic-complete] completes Lisp symbols (or filenames, within strings), |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
454 or indents the line if there is nothing to complete. |
7267 | 455 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
456 The current working buffer may be changed (with a call to |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
457 `set-buffer', or with \\[ielm-change-working-buffer]), and its value |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
458 is preserved between successive evaluations. In this way, expressions |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
459 may be evaluated in a different buffer than the *ielm* buffer. |
55135
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
460 By default, its name is shown on the mode line; you can always display |
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
461 it with \\[ielm-print-working-buffer], or the buffer itself with \\[ielm-display-working-buffer]. |
7267 | 462 |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
463 During evaluations, the values of the variables `*', `**', and `***' |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
464 are the results of the previous, second previous and third previous |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
465 evaluations respectively. If the working buffer is another IELM |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
466 buffer, then the values in the working buffer are used. The variables |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
467 `*1', `*2' and `*3', yield the process buffer values. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
468 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
469 Expressions evaluated by IELM are not subject to `debug-on-quit' or |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
470 `debug-on-error'. |
7267 | 471 |
63253
20e759335619
(ielm-dynamic-return, inferior-emacs-lisp-mode): Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
62875
diff
changeset
|
472 The behavior of IELM may be customized with the following variables: |
55104
60202911eed0
(inferior-emacs-lisp-mode): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
52446
diff
changeset
|
473 * To stop beeping on error, set `ielm-noisy' to nil. |
7267 | 474 * If you don't like the prompt, you can change it by setting `ielm-prompt'. |
55121
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
475 * If you do not like that the prompt is (by default) read-only, set |
06d6dda8a91c
(ielm-prompt-read-only): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55104
diff
changeset
|
476 `ielm-prompt-read-only' to nil. |
55104
60202911eed0
(inferior-emacs-lisp-mode): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
52446
diff
changeset
|
477 * Set `ielm-dynamic-return' to nil for bindings like `lisp-interaction-mode'. |
7267 | 478 * Entry to this mode runs `comint-mode-hook' and `ielm-mode-hook' |
479 (in that order). | |
480 | |
55104
60202911eed0
(inferior-emacs-lisp-mode): Fix docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
52446
diff
changeset
|
481 Customized bindings may be defined in `ielm-map', which currently contains: |
7267 | 482 \\{ielm-map}" |
483 (interactive) | |
62875
71dfb5a8e485
(inferior-emacs-lisp-mode): Use delay-mode-hooks..
Luc Teirlinck <teirllm@auburn.edu>
parents:
62732
diff
changeset
|
484 (delay-mode-hooks |
71dfb5a8e485
(inferior-emacs-lisp-mode): Use delay-mode-hooks..
Luc Teirlinck <teirllm@auburn.edu>
parents:
62732
diff
changeset
|
485 (comint-mode)) |
7267 | 486 (setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt))) |
61878
75267b99e585
(inferior-emacs-lisp-mode): Set paragraph-separate buffer locally to
Luc Teirlinck <teirllm@auburn.edu>
parents:
61370
diff
changeset
|
487 (set (make-local-variable 'paragraph-separate) "\\'") |
7267 | 488 (make-local-variable 'paragraph-start) |
489 (setq paragraph-start comint-prompt-regexp) | |
490 (setq comint-input-sender 'ielm-input-sender) | |
491 (setq comint-process-echoes nil) | |
49161
7d0428387d83
(inferior-emacs-lisp-mode): Bind comint-dynamic-complete-functions locally.
Andreas Schwab <schwab@suse.de>
parents:
47969
diff
changeset
|
492 (make-local-variable 'comint-dynamic-complete-functions) |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
493 (set (make-local-variable 'ielm-prompt-internal) ielm-prompt) |
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
494 (set (make-local-variable 'comint-prompt-read-only) ielm-prompt-read-only) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
495 (setq comint-dynamic-complete-functions |
7267 | 496 '(ielm-tab comint-replace-by-expanded-history ielm-complete-filename ielm-complete-symbol)) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
497 (setq comint-get-old-input 'ielm-get-old-input) |
17148
10107950ac5e
(inferior-emacs-lisp-mode): Set comint-completion-addsuffix.
Karl Heuer <kwzh@gnu.org>
parents:
15886
diff
changeset
|
498 (make-local-variable 'comint-completion-addsuffix) |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
499 (setq comint-completion-addsuffix '("/" . "")) |
7267 | 500 (setq major-mode 'inferior-emacs-lisp-mode) |
501 (setq mode-name "IELM") | |
55135
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
502 (setq mode-line-process '(":%s on " (:eval (buffer-name ielm-working-buffer)))) |
7267 | 503 (use-local-map ielm-map) |
504 (set-syntax-table emacs-lisp-mode-syntax-table) | |
505 | |
506 (make-local-variable 'indent-line-function) | |
507 (make-local-variable 'ielm-working-buffer) | |
508 (setq ielm-working-buffer (current-buffer)) | |
509 (setq indent-line-function 'ielm-indent-line) | |
15886 | 510 (make-local-variable 'fill-paragraph-function) |
511 (setq fill-paragraph-function 'lisp-fill-paragraph) | |
7267 | 512 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
513 ;; Value holders |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
514 (make-local-variable '*) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
515 (setq * nil) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
516 (make-local-variable '**) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
517 (setq ** nil) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
518 (make-local-variable '***) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
519 (setq *** nil) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
520 (set (make-local-variable 'ielm-match-data) nil) |
7267 | 521 |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
522 ;; font-lock support |
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
523 (make-local-variable 'font-lock-defaults) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
524 (setq font-lock-defaults |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
525 '(ielm-font-lock-keywords nil nil ((?: . "w") (?- . "w") (?* . "w")))) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
526 |
7267 | 527 ;; A dummy process to keep comint happy. It will never get any input |
46942
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
528 (unless (comint-check-proc (current-buffer)) |
43509
d4b9f0aaf4f7
(inferior-emacs-lisp-mode): Use hexl for the dummy process.
Jason Rumney <jasonr@gnu.org>
parents:
32367
diff
changeset
|
529 ;; Was cat, but on non-Unix platforms that might not exist, so |
d4b9f0aaf4f7
(inferior-emacs-lisp-mode): Use hexl for the dummy process.
Jason Rumney <jasonr@gnu.org>
parents:
32367
diff
changeset
|
530 ;; use hexl instead, which is part of the Emacs distribution. |
47969
cdc87bc8e049
(inferior-emacs-lisp-mode): If hexl not found, use cat. point-min != 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47626
diff
changeset
|
531 (condition-case nil |
cdc87bc8e049
(inferior-emacs-lisp-mode): If hexl not found, use cat. point-min != 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47626
diff
changeset
|
532 (start-process "ielm" (current-buffer) "hexl") |
cdc87bc8e049
(inferior-emacs-lisp-mode): If hexl not found, use cat. point-min != 1.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47626
diff
changeset
|
533 (file-error (start-process "ielm" (current-buffer) "cat"))) |
56790
80dba6d2451b
(ielm-tab, ielm-complete-symbol): Doc fix.
John Paul Wallington <jpw@pobox.com>
parents:
55296
diff
changeset
|
534 (set-process-query-on-exit-flag (ielm-process) nil) |
7267 | 535 (goto-char (point-max)) |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49161
diff
changeset
|
536 |
46942
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
537 ;; Lisp output can include raw characters that confuse comint's |
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
538 ;; carriage control code. |
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
539 (set (make-local-variable 'comint-inhibit-carriage-motion) t) |
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
540 |
7267 | 541 ;; Add a silly header |
542 (insert ielm-header) | |
543 (ielm-set-pm (point-max)) | |
61878
75267b99e585
(inferior-emacs-lisp-mode): Set paragraph-separate buffer locally to
Luc Teirlinck <teirllm@auburn.edu>
parents:
61370
diff
changeset
|
544 (unless comint-use-prompt-regexp |
55135
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
545 (let ((inhibit-read-only t)) |
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
546 (add-text-properties |
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
547 (point-min) (point-max) |
0d9ec2b24429
(inferior-emacs-lisp-mode): Display working buffer on the mode line. Bind
Juanma Barranquero <lekktu@gmail.com>
parents:
55121
diff
changeset
|
548 '(rear-nonsticky t field output inhibit-line-move-field-capture t)))) |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
549 (comint-output-filter (ielm-process) ielm-prompt-internal) |
7267 | 550 (set-marker comint-last-input-start (ielm-pm)) |
551 (set-process-filter (get-buffer-process (current-buffer)) 'comint-output-filter)) | |
46942
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
552 |
62732
8c8cb4cd8909
(inferior-emacs-lisp-mode): Use run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents:
61878
diff
changeset
|
553 (run-mode-hooks 'ielm-mode-hook)) |
7267 | 554 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
555 (defun ielm-get-old-input nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
556 ;; Return the previous input surrounding point |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
557 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
558 (beginning-of-line) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
559 (if (looking-at comint-prompt-regexp) nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
560 (re-search-backward comint-prompt-regexp)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
561 (comint-skip-prompt) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
562 (buffer-substring (point) (progn (forward-sexp 1) (point))))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
563 |
7267 | 564 ;;; User command |
565 | |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
566 ;;;###autoload (add-hook 'same-window-buffer-names "*ielm*") |
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
567 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
568 ;;;###autoload |
7267 | 569 (defun ielm nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
570 "Interactively evaluate Emacs Lisp expressions. |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
571 Switches to the buffer `*ielm*', or creates it if it does not exist." |
7267 | 572 (interactive) |
55144
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
573 (let (old-point) |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
574 (unless (comint-check-proc "*ielm*") |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
575 (with-current-buffer (get-buffer-create "*ielm*") |
55224
649d109f3222
(ielm-prompt-read-only, ielm-prompt): Update docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55146
diff
changeset
|
576 (unless (zerop (buffer-size)) (setq old-point (point))) |
55144
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
577 (inferior-emacs-lisp-mode))) |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
578 (pop-to-buffer "*ielm*") |
ab3d5c605cad
(ielm-prompt-read-only, ielm-prompt): Expand docstring.
Luc Teirlinck <teirllm@auburn.edu>
parents:
55135
diff
changeset
|
579 (when old-point (push-mark old-point)))) |
7267 | 580 |
18383 | 581 (provide 'ielm) |
582 | |
52401 | 583 ;;; arch-tag: ef60e4c0-9c4f-4bdb-8402-271313329790 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
584 ;;; ielm.el ends here |