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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; ielm.el --- interaction mode for Emacs Lisp
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Author: David Smith <maa036@lancaster.ac.uk>
17976
852464ce5d6a Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17649
diff changeset
7 ;; Maintainer: FSF
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Created: 25 Feb 1994
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; Keywords: lisp
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; any later version.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63253
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63253
diff changeset
26 ;; Boston, MA 02110-1301, USA.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; Input is handled by the comint package, and output is passed
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; through the pretty-printer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; To start: M-x ielm. Type C-h m in the *ielm* buffer for more info.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;; Code:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 (require 'comint)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 (require 'pp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;; User variables
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
2683a7145ceb (ielm-mode-hook): Add :options.
Dave Love <fx@gnu.org>
parents: 52401
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;;; System variables
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (defvar ielm-map nil)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (if ielm-map nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 (if (string-match "Lucid" emacs-version)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; Lemacs
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (setq ielm-map (make-sparse-keymap))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 (set-keymap-parent ielm-map comint-mode-map))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;; FSF
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (setq ielm-map (cons 'keymap comint-mode-map)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 (define-key ielm-map "\t" 'comint-dynamic-complete)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 ;;; Completion stuff
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (if (or (eq (preceding-char) ?\n)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 (eq (char-syntax (preceding-char)) ? ))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 (ielm-indent-line)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (ctick (and cbuffer (buffer-modified-tick cbuffer))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (lisp-complete-symbol)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 12439
diff changeset
222 ;; a completions buffer has been modified or created
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (if cbuffer
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 (if (nth 3 (parse-partial-sexp comint-last-input-start (point)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (lisp-indent-line)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 ;;; Other bindings
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (end-of-line)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 (parse-partial-sexp (ielm-pm)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (point)))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (if (and (< (car state) 1) (not (nth 3 state)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (newline-and-indent)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 (newline)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (setq ielm-input input))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (comint-send-input) ; update history, markers etc.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (ielm-eval-input ielm-input)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;;; Utility functions
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 (or (string= string "") (string-match "\\`[ \t\n]+\\'" string)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 ;;; Evaluation
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 ;; what that input is. What this function does is evaluates that
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 ;; input and produces `output' which gets inserted into the buffer,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 ;; along with a new prompt. A better way of doing this might have
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 ;; been to actually send the output to the `cat' process, and write
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;; this as in output filter that converted sexps in the output
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 ;; stream to their evaluated value. But that would have involved
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (condition-case err
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (condition-case err
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 ;; Self-referential objects cause loops in the printer, so
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 ;;; Process and marker utilities
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (get-buffer-process (current-buffer)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (process-mark (get-buffer-process (current-buffer))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (set-marker (process-mark (get-buffer-process (current-buffer))) pos))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 ;;; Major mode
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 * Entry to this mode runs `comint-mode-hook' and `ielm-mode-hook'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 (in that order).
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 \\{ielm-map}"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (make-local-variable 'paragraph-start)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (setq paragraph-start comint-prompt-regexp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 (setq comint-input-sender 'ielm-input-sender)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (setq major-mode 'inferior-emacs-lisp-mode)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (use-local-map ielm-map)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (set-syntax-table emacs-lisp-mode-syntax-table)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (make-local-variable 'indent-line-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (make-local-variable 'ielm-working-buffer)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (setq ielm-working-buffer (current-buffer))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (setq indent-line-function 'ielm-indent-line)
15886
4877d1aa80ad (ielm-map): Don't bind M-q.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
510 (make-local-variable 'fill-paragraph-function)
4877d1aa80ad (ielm-map): Don't bind M-q.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
511 (setq fill-paragraph-function 'lisp-fill-paragraph)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 ;; Add a silly header
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (insert ielm-header)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 (set-marker comint-last-input-start (ielm-pm))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;;; User command
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17978
diff changeset
581 (provide 'ielm)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17978
diff changeset
582
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49588
diff changeset
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