annotate lisp/ielm.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents 8ba41a7b6464
children ce7385745191
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
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1994 Free Software Foundation, Inc.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: David Smith <maa036@lancaster.ac.uk>
17976
852464ce5d6a Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17649
diff changeset
6 ;; Maintainer: FSF
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Created: 25 Feb 1994
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Keywords: lisp
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; 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
14 ;; the Free Software Foundation; either version 2, or (at your option)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; 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
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14040
diff changeset
25 ;; Boston, MA 02111-1307, USA.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
29 ;; Provides a nice interface to evaluating Emacs Lisp expressions.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; Input is handled by the comint package, and output is passed
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; through the pretty-printer.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; To install: copy this file to a directory in your load-path, and
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
34 ;; add the following line to your .emacs file:
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;;
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
36 ;; (autoload 'ielm "ielm" "Start an inferior Emacs Lisp session" t)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;;
18387
c9700d281f81 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 18383
diff changeset
38 ;; For completion to work, the comint.el from Emacs 19.23 is
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; required. If you do not have it, or if you are running Lemacs,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; also add the following code to your .emacs:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; (setq ielm-mode-hook
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; '(lambda nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; (define-key ielm-map "\t"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; '(lambda nil (interactive) (or (ielm-tab)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; (lisp-complete-symbol))))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; 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
49
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; The latest version is available by WWW from
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; http://mathssun5.lancs.ac.uk:2080/~maa036/elisp/dir.html
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; or by anonymous FTP from
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; /anonymous@wingra.stat.wisc.edu:pub/src/emacs-lisp/ielm.el.gz
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; or from the author: David M. Smith <maa036@lancaster.ac.uk>
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;; Code:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 (require 'comint)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 (require 'pp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;; User variables
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
63 (defgroup ielm nil
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
64 "Interaction mode for Emacs Lisp."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
65 :group 'lisp)
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
66
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
67
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
68 (defcustom ielm-noisy t
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
69 "*If non-nil, IELM will beep on error."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
70 :type 'boolean
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
71 :group 'ielm)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
73 (defvar ielm-prompt "ELISP> "
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
74 "Prompt used in IELM.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
76 (defcustom ielm-dynamic-return t
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
77 "*Controls whether \\<ielm-map>\\[ielm-return] has intelligent behaviour in IELM.
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
78 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
79 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
80 :type 'boolean
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
81 :group 'ielm)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
82
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
83 (defcustom ielm-dynamic-multiline-inputs t
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
84 "*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
85 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
86 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
87 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
88 such as `edebug-defun' to work with such inputs."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
89 :type 'boolean
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
90 :group 'ielm)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
92 (defcustom ielm-mode-hook nil
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
93 "*Hooks to be run when IELM (`inferior-emacs-lisp-mode') is started."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
94 :type 'hook
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17148
diff changeset
95 :group 'ielm)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
21834
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
97 (defvar * nil
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
98 "Most recent value evaluated in IELM.")
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
99
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
100 (defvar ** nil
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
101 "Second-most-recent value evaluated in IELM.")
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
102
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
103 (defvar *** nil
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
104 "Third-most-recent value evaluated in IELM.")
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
105
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;;; System variables
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (defvar ielm-working-buffer nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
109 "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
110 This variable is buffer-local.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 (defvar ielm-header
18400
16de434b8026 (ielm-header): Delete version and RCS header.
Richard M. Stallman <rms@gnu.org>
parents: 18387
diff changeset
113 "*** 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
114 "Message to display when IELM is started.")
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (defvar ielm-map nil)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 (if ielm-map nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (if (string-match "Lucid" emacs-version)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; Lemacs
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (setq ielm-map (make-sparse-keymap))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (set-keymap-parent ielm-map comint-mode-map))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; FSF
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (setq ielm-map (cons 'keymap comint-mode-map)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (define-key ielm-map "\t" 'comint-dynamic-complete)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (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
127 (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
128 (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
129 (define-key ielm-map "\e\t" 'lisp-complete-symbol) ; lisp-interaction-mode
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
130 ;; These bindings are from shared-lisp-mode-map -- can you inherit
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
131 ;; from more than one keymap??
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
132 (define-key ielm-map "\e\C-q" 'indent-sexp)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
133 (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
134 ;; 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
135 (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
136 (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
137 (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
138
12439
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
139 (defvar ielm-font-lock-keywords
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
140 (list
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
141 (cons (concat "^" (regexp-quote ielm-prompt)) 'font-lock-keyword-face)
20953
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 18400
diff changeset
142 '("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)"
f3f9df46d008 Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents: 18400
diff changeset
143 (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
144 (2 font-lock-constant-face)))
12439
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
145 "Additional expressions to highlight in ielm buffers.")
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
146
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;;; Completion stuff
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (defun ielm-tab nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
150 "Possibly indent the current line as lisp code."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (if (or (eq (preceding-char) ?\n)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 (eq (char-syntax (preceding-char)) ? ))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 (ielm-indent-line)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 t)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (defun ielm-complete-symbol nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
159 "Complete the lisp symbol before point."
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
160 ;; 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
161 ;; completion has occurred
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (let* ((btick (buffer-modified-tick))
7842
50676390b162 (ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 7275
diff changeset
163 (cbuffer (get-buffer "*Completions*"))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 (ctick (and cbuffer (buffer-modified-tick cbuffer))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (lisp-complete-symbol)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; completion has occurred if:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (or
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; the buffer has been modified
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (not (= btick (buffer-modified-tick)))
14040
187735b53d52 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 12439
diff changeset
170 ;; a completions buffer has been modified or created
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 (if cbuffer
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 (not (= ctick (buffer-modified-tick cbuffer)))
7842
50676390b162 (ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents: 7275
diff changeset
173 (get-buffer "*Completions*")))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 (defun ielm-complete-filename nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
176 "Dynamically complete filename before point, if in a string."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 (if (nth 3 (parse-partial-sexp comint-last-input-start (point)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (comint-dynamic-complete-filename)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 (defun ielm-indent-line nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
181 "Indent the current line as Lisp code if it is not a prompt line."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (if (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (beginning-of-line)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 (looking-at comint-prompt-regexp)) nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (lisp-indent-line)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
187 ;;; Working buffer manipulation
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
188
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
189 (defun ielm-print-working-buffer nil
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
190 "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
191 (interactive)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
192 (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
193
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
194 (defun ielm-display-working-buffer nil
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
195 "Display the current IELM working buffer.
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
196 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
197 to its value of `window-point'!"
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
198 (interactive)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
199 (display-buffer ielm-working-buffer)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
200 (ielm-print-working-buffer))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
201
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
202 (defun ielm-change-working-buffer (buf)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
203 "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
204 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
205 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
206 `set-buffer' at the IELM prompt."
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
207 (interactive "bSet working buffer to: ")
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
208 (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
209 (ielm-print-working-buffer))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
210
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 ;;; Other bindings
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 (defun ielm-return nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
214 "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
215 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
216 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
217 simply inserts a newline."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 (if ielm-dynamic-return
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 (let ((state
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (save-excursion
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (end-of-line)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (parse-partial-sexp (ielm-pm)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (point)))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 (if (and (< (car state) 1) (not (nth 3 state)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (ielm-send-input)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
227 (if (and ielm-dynamic-multiline-inputs
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
228 (save-excursion
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
229 (beginning-of-line)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
230 (looking-at comint-prompt-regexp)))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
231 (save-excursion
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
232 (goto-char (ielm-pm))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
233 (newline 1)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (newline-and-indent)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 (newline)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236
17978
1471676365ac (ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
237 (defvar ielm-input)
1471676365ac (ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
238
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (defun ielm-input-sender (proc input)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
240 ;; Just sets the variable ielm-input, which is in the scope of
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
241 ;; `ielm-send-input's call.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 (setq ielm-input input))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (defun ielm-send-input nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
245 "Evaluate the Emacs Lisp expression after the prompt."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 (let ((buf (current-buffer))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 ielm-input) ; set by ielm-input-sender
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (comint-send-input) ; update history, markers etc.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 (ielm-eval-input ielm-input)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ;;; Utility functions
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (defun ielm-is-whitespace (string)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
255 "Return non-nil if STRING is all whitespace."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 (or (string= string "") (string-match "\\`[ \t\n]+\\'" string)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (defun ielm-format-errors (errlist)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (let ((result ""))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 (while errlist
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (setq result (concat result (prin1-to-string (car errlist)) ", "))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 (setq errlist (cdr errlist)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 (substring result 0 -2)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (defun ielm-format-error (err)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
267 ;; Return a string form of the error ERR.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (format "%s%s"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (or (get (car err) 'error-message) "Peculiar error")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 (if (cdr err)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 (format ": %s" (ielm-format-errors (cdr err)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 "")))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 ;;; Evaluation
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
276 (defun ielm-eval-input (ielm-string)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
277 "Evaluate the Lisp expression IELM-STRING, and pretty-print the result."
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 ;; 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
279 ;; `inferior Lisp process'. All comint-send-input does is works out
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ;; what that input is. What this function does is evaluates that
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ;; input and produces `output' which gets inserted into the buffer,
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 ;; 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
283 ;; been to actually send the output to the `cat' process, and write
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ;; this as in output filter that converted sexps in the output
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;; stream to their evaluated value. But that would have involved
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; 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
287 ;;
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
288 ;; 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
289 ;; 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
290 (let (ielm-form ; form to evaluate
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
291 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
292 ielm-result ; Result, or error message
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
293 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
294 (ielm-output "") ; result to display
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
295 (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
296 (ielm-pmark (ielm-pm)))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
297 (if (not (ielm-is-whitespace ielm-string))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 (condition-case err
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 (let (rout)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
301 (setq rout (read-from-string ielm-string))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
302 (setq ielm-form (car rout))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
303 (setq ielm-pos (cdr rout)))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
304 (error (setq ielm-result (ielm-format-error err))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
305 (setq ielm-error-type "Read error")))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
306 (if ielm-error-type nil
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
307 ;; 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
308 (if (not (buffer-name ielm-working-buffer))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
309 (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
310 ielm-error-type "IELM Error"
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
311 ielm-wbuf (current-buffer))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
312 (if (ielm-is-whitespace (substring ielm-string ielm-pos))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
313 ;; need this awful let convolution to work around
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
314 ;; an Emacs bug involving local vbls and let binding
21781
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
315 (let ((*save *)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
316 (**save **)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
317 (***save ***))
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
318 (save-excursion
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
319 (set-buffer ielm-working-buffer)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
320 (condition-case err
21781
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
321 (let ((* *save)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
322 (** **save)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
323 (*** ***save)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
324 (ielm-obuf (current-buffer)))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
325 (setq ielm-result (eval ielm-form))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
326 (setq ielm-wbuf (current-buffer))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
327 ;; The eval may have changed current-buffer;
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
328 ;; need to set it back here to avoid a bug
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
329 ;; in let. Don't want to use save-excursion
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
330 ;; because we want to allow changes in point.
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
331 (set-buffer ielm-obuf))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
332 (error (setq ielm-result (ielm-format-error err))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
333 (setq ielm-error-type "Eval error"))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
334 (quit (setq ielm-result "Quit during evaluation")
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
335 (setq ielm-error-type "Eval error")))))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
336 (setq ielm-error-type "IELM error")
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
337 (setq ielm-result "More than one sexp in input"))))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 ;; 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
340 (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
341 (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
342 (setq ielm-working-buffer ielm-wbuf))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
344 (goto-char ielm-pmark)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
345 (if (not ielm-error-type)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (condition-case err
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 ;; Self-referential objects cause loops in the printer, so
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 ;; 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
349 (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
350 (error (setq ielm-error-type "IELM Error")
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
351 (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
352 (quit (setq ielm-error-type "IELM Error")
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
353 (setq ielm-result "Quit during pretty-printing"))))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
354 (if ielm-error-type
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (progn
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (if ielm-noisy (ding))
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
357 (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
358 (setq ielm-output (concat ielm-output ielm-result)))
21834
8ba41a7b6464 (*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents: 21795
diff changeset
359 ;; 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
360 (setq *** **)
444b6677cc4e (ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21781
diff changeset
361 (setq ** *)
444b6677cc4e (ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 21781
diff changeset
362 (setq * ielm-result))
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
363 (setq ielm-output (concat ielm-output "\n"))))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
364 (setq ielm-output (concat ielm-output ielm-prompt))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
365 (comint-output-filter (ielm-process) ielm-output)))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 ;;; Process and marker utilities
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 (defun ielm-process nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
370 ;; Return the current buffer's process.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (get-buffer-process (current-buffer)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (defun ielm-pm nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
374 ;; Return the process mark of the current buffer.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (process-mark (get-buffer-process (current-buffer))))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (defun ielm-set-pm (pos)
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
378 ;; Set the process mark in the current buffer to POS.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (set-marker (process-mark (get-buffer-process (current-buffer))) pos))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 ;;; Major mode
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
17649
28037dab627c (inferior-emacs-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17634
diff changeset
383 (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
384
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 (defun inferior-emacs-lisp-mode nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
386 "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
387 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
388
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
389 * \\<ielm-map>\\[ielm-send-input] evaluates the sexp following the prompt. There must be at most
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
390 one top-level sexp per prompt.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
392 * \\[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
393 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
394 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
395 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
396
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
397 * \\[comint-dynamic-complete] completes Lisp symbols (or filenames, within strings),
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
398 or indents the line if there is nothing to complete.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399
21781
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
400 During evaluations, the values of the variables `*', `**', and `***'
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 are the results of the previous, second previous and third previous
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 evaluations respectively.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
404 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
405 `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
406 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
407 may be evaluated in a different buffer than the *ielm* buffer.
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
408 Display the name of the working buffer with \\[ielm-print-working-buffer],
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
409 or the buffer itself with \\[ielm-display-working-buffer].
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
411 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
412 `debug-on-error'.
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 The behaviour of IELM may be customised with the following variables:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 * To stop beeping on error, set `ielm-noisy' to nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 * If you don't like the prompt, you can change it by setting `ielm-prompt'.
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 * Set `ielm-dynamic-return' to nil for bindings like `lisp-interaction-mode'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 * Entry to this mode runs `comint-mode-hook' and `ielm-mode-hook'
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 (in that order).
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 Customised bindings may be defined in `ielm-map', which currently contains:
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 \\{ielm-map}"
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (interactive)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (comint-mode)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt)))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (make-local-variable 'paragraph-start)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (setq paragraph-start comint-prompt-regexp)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (setq comint-input-sender 'ielm-input-sender)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (setq comint-process-echoes nil)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (setq comint-dynamic-complete-functions
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 '(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
432 (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
433 (make-local-variable 'comint-completion-addsuffix)
10107950ac5e (inferior-emacs-lisp-mode): Set comint-completion-addsuffix.
Karl Heuer <kwzh@gnu.org>
parents: 15886
diff changeset
434 (setq comint-completion-addsuffix
10107950ac5e (inferior-emacs-lisp-mode): Set comint-completion-addsuffix.
Karl Heuer <kwzh@gnu.org>
parents: 15886
diff changeset
435 (cons (char-to-string directory-sep-char) ""))
7267
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 (setq major-mode 'inferior-emacs-lisp-mode)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (setq mode-name "IELM")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (use-local-map ielm-map)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (set-syntax-table emacs-lisp-mode-syntax-table)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (make-local-variable 'indent-line-function)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (make-local-variable 'ielm-working-buffer)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (setq ielm-working-buffer (current-buffer))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (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
446 (make-local-variable 'fill-paragraph-function)
4877d1aa80ad (ielm-map): Don't bind M-q.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
447 (setq fill-paragraph-function 'lisp-fill-paragraph)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
449 ;; Value holders
21781
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
450 (setq * nil)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
451 (make-local-variable '*)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
452 (setq ** nil)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
453 (make-local-variable '**)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
454 (setq *** nil)
6e9ef4991da8 (ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents: 20953
diff changeset
455 (make-local-variable '***)
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
12439
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
457 ;; font-lock support
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
458 (make-local-variable 'font-lock-defaults)
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
459 (setq font-lock-defaults
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
460 '(ielm-font-lock-keywords nil nil ((?: . "w") (?- . "w") (?* . "w"))))
6141f81a80e5 (ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents: 10981
diff changeset
461
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 ;; A dummy process to keep comint happy. It will never get any input
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (if (comint-check-proc (current-buffer)) nil
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 (start-process "ielm" (current-buffer) "cat")
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (process-kill-without-query (ielm-process))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (goto-char (point-max))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ;; Add a silly header
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (insert ielm-header)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (ielm-set-pm (point-max))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 (comint-output-filter (ielm-process) ielm-prompt)
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 (set-marker comint-last-input-start (ielm-pm))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (set-process-filter (get-buffer-process (current-buffer)) 'comint-output-filter))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 (run-hooks 'ielm-mode-hook))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
475 (defun ielm-get-old-input nil
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
476 ;; Return the previous input surrounding point
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
477 (save-excursion
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
478 (beginning-of-line)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
479 (if (looking-at comint-prompt-regexp) nil
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
480 (re-search-backward comint-prompt-regexp))
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
481 (comint-skip-prompt)
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
482 (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
483
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 ;;; User command
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
10981
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
486 ;;;###autoload (add-hook 'same-window-buffer-names "*ielm*")
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
487
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
488 ;;;###autoload
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (defun ielm nil
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
490 "Interactively evaluate Emacs Lisp expressions.
10981
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
491 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
492 (interactive)
10981
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
493 (if (comint-check-proc "*ielm*")
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
494 nil
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
495 (save-excursion
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (set-buffer (get-buffer-create "*ielm*"))
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (inferior-emacs-lisp-mode)))
10981
54697b892d3a (ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 7842
diff changeset
498 (pop-to-buffer "*ielm*"))
7267
4aa70d4d981c Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499
18383
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17978
diff changeset
500 (provide 'ielm)
11218164bc54 Add provide call.
Richard M. Stallman <rms@gnu.org>
parents: 17978
diff changeset
501
7275
cd1541f4c87c (ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 7267
diff changeset
502 ;;; ielm.el ends here