Mercurial > emacs
annotate lisp/ielm.el @ 51010:f79532778159
Rewrote the local minor mode so that it can be
sticky as well and made sticky the default. Reimplemented the
global minor mode. Updated the commentary section to document
these changes.
(hl-line-sticky-flag): New user option.
(hl-line-overlay): Made it buffer-local and gave it a docstring.
(global-hl-line-overlay): New variable.
(hl-line-mode): Rewritten to use `hl-line-sticky-flag'.
(hl-line-highlight): Rewritten to use `hl-line-sticky-flag'.
(hl-line-unhighlight): Updated docstring.
(global-hl-line-mode): Implemented directly so that is does not
depend on `hl-line-mode' any more.
(global-hl-line-highlight, global-hl-line-unhighlight): New
functions.
author | Lute Kamstra <lute@gnu.org> |
---|---|
date | Thu, 15 May 2003 13:21:23 +0000 |
parents | 37645a051842 |
children | 695cf19ef79e d7ddb3e565de |
rev | line source |
---|---|
7267 | 1 ;;; ielm.el --- interaction mode for Emacs Lisp |
14169 | 2 |
49161
7d0428387d83
(inferior-emacs-lisp-mode): Bind comint-dynamic-complete-functions locally.
Andreas Schwab <schwab@suse.de>
parents:
47969
diff
changeset
|
3 ;; Copyright (C) 1994, 2002, 2003 Free Software Foundation, Inc. |
7267 | 4 |
5 ;; Author: David Smith <maa036@lancaster.ac.uk> | |
17976 | 6 ;; Maintainer: FSF |
7267 | 7 ;; Created: 25 Feb 1994 |
8 ;; Keywords: lisp | |
9 | |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
14 ;; the Free Software Foundation; either version 2, or (at your option) | |
15 ;; any later version. | |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
25 ;; Boston, MA 02111-1307, USA. | |
7267 | 26 |
27 ;;; Commentary: | |
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 | 30 ;; Input is handled by the comint package, and output is passed |
31 ;; through the pretty-printer. | |
32 | |
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 | 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 | 37 ;; |
18387 | 38 ;; For completion to work, the comint.el from Emacs 19.23 is |
7267 | 39 ;; required. If you do not have it, or if you are running Lemacs, |
40 ;; also add the following code to your .emacs: | |
41 ;; | |
42 ;; (setq ielm-mode-hook | |
43 ;; '(lambda nil | |
44 ;; (define-key ielm-map "\t" | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
45 ;; '(lambda nil (interactive) (or (ielm-tab) |
7267 | 46 ;; (lisp-complete-symbol)))))) |
47 | |
48 ;; To start: M-x ielm. Type C-h m in the *ielm* buffer for more info. | |
49 | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
50 ;; The latest version is available by WWW from |
7267 | 51 ;; http://mathssun5.lancs.ac.uk:2080/~maa036/elisp/dir.html |
52 ;; or by anonymous FTP from | |
53 ;; /anonymous@wingra.stat.wisc.edu:pub/src/emacs-lisp/ielm.el.gz | |
54 ;; or from the author: David M. Smith <maa036@lancaster.ac.uk> | |
55 | |
56 ;;; Code: | |
57 | |
58 (require 'comint) | |
59 (require 'pp) | |
60 | |
61 ;;; User variables | |
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 | 72 |
43524
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
73 (defcustom ielm-prompt "ELISP> " |
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
74 "Prompt used in IELM." |
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
75 :type 'string |
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
76 :group 'ielm |
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
77 :get #'(lambda (symbol) (substring-no-properties (symbol-value symbol))) |
ca53e91e0186
(ielm-prompt): Allow customization; make it read-only.
Juanma Barranquero <lekktu@gmail.com>
parents:
43519
diff
changeset
|
78 :set #'(lambda (symbol value) (set symbol (propertize value 'read-only t 'rear-nonsticky t)))) |
7267 | 79 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
80 (defcustom ielm-dynamic-return t |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
81 "*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
|
82 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
|
83 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
|
84 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
85 :group 'ielm) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
86 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
87 (defcustom ielm-dynamic-multiline-inputs t |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
88 "*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
|
89 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
|
90 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
|
91 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
|
92 such as `edebug-defun' to work with such inputs." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
93 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
94 :group 'ielm) |
7267 | 95 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
96 (defcustom ielm-mode-hook nil |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
97 "*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
|
98 :type 'hook |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17148
diff
changeset
|
99 :group 'ielm) |
7267 | 100 |
21834
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
101 (defvar * nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
102 "Most recent value evaluated in IELM.") |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
103 |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
104 (defvar ** nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
105 "Second-most-recent value evaluated in IELM.") |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
106 |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
107 (defvar *** nil |
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
108 "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
|
109 |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
110 (defvar ielm-match-data nil |
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
111 "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
|
112 |
47586
86b3a5572fda
(*1): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
47551
diff
changeset
|
113 (defvar *1 nil |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
114 "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
|
115 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
|
116 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
|
117 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
|
118 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
|
119 |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
120 (defvar *2 nil |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
121 "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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
127 (defvar *3 nil |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
128 "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
|
129 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
|
130 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
|
131 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
|
132 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
|
133 |
7267 | 134 ;;; System variables |
135 | |
136 (defvar ielm-working-buffer nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
137 "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
|
138 This variable is buffer-local.") |
7267 | 139 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
140 (defvar ielm-header |
18400
16de434b8026
(ielm-header): Delete version and RCS header.
Richard M. Stallman <rms@gnu.org>
parents:
18387
diff
changeset
|
141 "*** 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
|
142 "Message to display when IELM is started.") |
7267 | 143 |
144 (defvar ielm-map nil) | |
145 (if ielm-map nil | |
146 (if (string-match "Lucid" emacs-version) | |
147 ;; Lemacs | |
148 (progn | |
149 (setq ielm-map (make-sparse-keymap)) | |
150 (set-keymap-parent ielm-map comint-mode-map)) | |
151 ;; FSF | |
152 (setq ielm-map (cons 'keymap comint-mode-map))) | |
153 (define-key ielm-map "\t" 'comint-dynamic-complete) | |
154 (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
|
155 (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
|
156 (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
|
157 (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
|
158 ;; 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
|
159 ;; 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
|
160 (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
|
161 (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
|
162 ;; 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
|
163 (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
|
164 (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
|
165 (define-key ielm-map "\C-c\C-v" 'ielm-print-working-buffer)) |
7267 | 166 |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
167 (defvar ielm-font-lock-keywords |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
168 (list |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
169 (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
|
170 '("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)" |
f3f9df46d008
Changed font-lock-reference-face to font-lock-constant-face.
Simon Marshall <simon@gnu.org>
parents:
18400
diff
changeset
|
171 (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
|
172 (2 font-lock-constant-face))) |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
173 "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
|
174 |
7267 | 175 ;;; Completion stuff |
176 | |
177 (defun ielm-tab nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
178 "Possibly indent the current line as lisp code." |
7267 | 179 (interactive) |
180 (if (or (eq (preceding-char) ?\n) | |
181 (eq (char-syntax (preceding-char)) ? )) | |
182 (progn | |
183 (ielm-indent-line) | |
184 t))) | |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
185 |
7267 | 186 (defun ielm-complete-symbol nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
187 "Complete the lisp symbol before point." |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
188 ;; 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
|
189 ;; completion has occurred |
7267 | 190 (let* ((btick (buffer-modified-tick)) |
7842
50676390b162
(ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
7275
diff
changeset
|
191 (cbuffer (get-buffer "*Completions*")) |
7267 | 192 (ctick (and cbuffer (buffer-modified-tick cbuffer)))) |
193 (lisp-complete-symbol) | |
194 ;; 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
|
195 (or |
7267 | 196 ;; 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
|
197 (not (= btick (buffer-modified-tick))) |
14040 | 198 ;; a completions buffer has been modified or created |
7267 | 199 (if cbuffer |
200 (not (= ctick (buffer-modified-tick cbuffer))) | |
7842
50676390b162
(ielm-complete-symbol): Likewise.
Richard M. Stallman <rms@gnu.org>
parents:
7275
diff
changeset
|
201 (get-buffer "*Completions*"))))) |
7267 | 202 |
203 (defun ielm-complete-filename nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
204 "Dynamically complete filename before point, if in a string." |
7267 | 205 (if (nth 3 (parse-partial-sexp comint-last-input-start (point))) |
206 (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
|
207 |
7267 | 208 (defun ielm-indent-line nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
209 "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
|
210 (when (save-excursion (comint-bol) (bolp)) |
7267 | 211 (lisp-indent-line))) |
212 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
213 ;;; Working buffer manipulation |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
214 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
215 (defun ielm-print-working-buffer nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
216 "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
|
217 (interactive) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
218 (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
|
219 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
220 (defun ielm-display-working-buffer nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
221 "Display the current IELM working buffer. |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
222 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
|
223 to its value of `window-point'!" |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
224 (interactive) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
225 (display-buffer ielm-working-buffer) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
226 (ielm-print-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
227 |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
228 (defun ielm-change-working-buffer (buf) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
229 "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
|
230 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
|
231 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
|
232 `set-buffer' at the IELM prompt." |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
233 (interactive "bSet working buffer to: ") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
234 (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
|
235 (ielm-print-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
236 |
7267 | 237 ;;; Other bindings |
238 | |
239 (defun ielm-return nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
240 "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
|
241 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
|
242 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
|
243 simply inserts a newline." |
7267 | 244 (interactive) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
245 (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
|
246 (let ((state |
7267 | 247 (save-excursion |
248 (end-of-line) | |
249 (parse-partial-sexp (ielm-pm) | |
250 (point))))) | |
251 (if (and (< (car state) 1) (not (nth 3 state))) | |
252 (ielm-send-input) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
253 (if (and ielm-dynamic-multiline-inputs |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
254 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
255 (beginning-of-line) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
256 (looking-at comint-prompt-regexp))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
257 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
258 (goto-char (ielm-pm)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
259 (newline 1))) |
7267 | 260 (newline-and-indent))) |
261 (newline))) | |
262 | |
17978
1471676365ac
(ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
17976
diff
changeset
|
263 (defvar ielm-input) |
1471676365ac
(ielm-input): New defvar.
Richard M. Stallman <rms@gnu.org>
parents:
17976
diff
changeset
|
264 |
7267 | 265 (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
|
266 ;; 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
|
267 ;; `ielm-send-input's call. |
7267 | 268 (setq ielm-input input)) |
269 | |
270 (defun ielm-send-input nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
271 "Evaluate the Emacs Lisp expression after the prompt." |
7267 | 272 (interactive) |
273 (let ((buf (current-buffer)) | |
274 ielm-input) ; set by ielm-input-sender | |
275 (comint-send-input) ; update history, markers etc. | |
276 (ielm-eval-input ielm-input))) | |
277 | |
278 ;;; Utility functions | |
279 | |
280 (defun ielm-is-whitespace (string) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
281 "Return non-nil if STRING is all whitespace." |
7267 | 282 (or (string= string "") (string-match "\\`[ \t\n]+\\'" string))) |
283 | |
284 ;;; Evaluation | |
285 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
286 (defun ielm-eval-input (ielm-string) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
287 "Evaluate the Lisp expression IELM-STRING, and pretty-print the result." |
7267 | 288 ;; 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
|
289 ;; `inferior Lisp process'. All comint-send-input does is works out |
7267 | 290 ;; what that input is. What this function does is evaluates that |
291 ;; input and produces `output' which gets inserted into the buffer, | |
292 ;; along with a new prompt. A better way of doing this might have | |
293 ;; been to actually send the output to the `cat' process, and write | |
294 ;; this as in output filter that converted sexps in the output | |
295 ;; stream to their evaluated value. But that would have involved | |
296 ;; 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
|
297 ;; |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
298 ;; 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
|
299 ;; 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
|
300 (let (ielm-form ; form to evaluate |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
301 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
|
302 ielm-result ; Result, or error message |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
303 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
|
304 (ielm-output "") ; result to display |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
305 (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
|
306 (ielm-pmark (ielm-pm))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
307 (if (not (ielm-is-whitespace ielm-string)) |
7267 | 308 (progn |
309 (condition-case err | |
310 (let (rout) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
311 (setq rout (read-from-string ielm-string)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
312 (setq ielm-form (car rout)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
313 (setq ielm-pos (cdr rout))) |
45833
e7a3c79415d6
(ielm-eval-input): Use error-message-string.
Richard M. Stallman <rms@gnu.org>
parents:
43524
diff
changeset
|
314 (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
|
315 (setq ielm-error-type "Read error"))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
316 (if ielm-error-type nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
317 ;; 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
|
318 (if (not (buffer-name ielm-working-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
319 (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
|
320 ielm-error-type "IELM Error" |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
321 ielm-wbuf (current-buffer)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
322 (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
|
323 ;; To correctly handle the ielm-local variables *, |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
324 ;; ** and ***, we need a temporary buffer to be |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
325 ;; 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
|
326 ;; forms. We need another temporary buffer to exit |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
327 ;; that same let. To avoid problems, neither of |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
328 ;; these buffers should be alive during the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
329 ;; evaluation of ielm-form. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
330 (let ((*1 *) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
331 (*2 **) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
332 (*3 ***) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
333 ielm-temp-buffer) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
334 (set-match-data ielm-match-data) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
335 (save-excursion |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
336 (with-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
337 (condition-case err |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
338 (unwind-protect |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
339 ;; The next let form creates default |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
340 ;; bindings for *, ** and ***. But |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
341 ;; these default bindings are |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
342 ;; identical to the ielm-local |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
343 ;; bindings. Hence, during the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
344 ;; evaluation of ielm-form, the |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
345 ;; ielm-local values are going to be |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
346 ;; used in all buffers except for |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
347 ;; other ielm buffers, which override |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
348 ;; them. Normally, the variables *1, |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
349 ;; *2 and *3 also have default |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
350 ;; bindings, which are not overridden. |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
351 (let ((* *1) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
352 (** *2) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
353 (*** *3)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
354 (kill-buffer (current-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
355 (set-buffer ielm-wbuf) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
356 (setq ielm-result (eval ielm-form)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
357 (setq ielm-wbuf (current-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
358 (setq |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
359 ielm-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
360 (generate-new-buffer " *ielm-temp*")) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
361 (set-buffer ielm-temp-buffer)) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
362 (when ielm-temp-buffer |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
363 (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
|
364 (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
|
365 (setq ielm-error-type "Eval error")) |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
366 (quit (setq ielm-result "Quit during evaluation") |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
367 (setq ielm-error-type "Eval error"))))) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
368 (setq ielm-match-data (match-data))) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
369 (setq ielm-error-type "IELM error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
370 (setq ielm-result "More than one sexp in input")))) |
7267 | 371 |
372 ;; 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
|
373 (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
|
374 (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
|
375 (setq ielm-working-buffer ielm-wbuf)) |
7267 | 376 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
377 (goto-char ielm-pmark) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
378 (if (not ielm-error-type) |
7267 | 379 (condition-case err |
380 ;; Self-referential objects cause loops in the printer, so | |
381 ;; 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
|
382 (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
|
383 (error (setq ielm-error-type "IELM Error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
384 (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
|
385 (quit (setq ielm-error-type "IELM Error") |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
386 (setq ielm-result "Quit during pretty-printing")))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
387 (if ielm-error-type |
7267 | 388 (progn |
389 (if ielm-noisy (ding)) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
390 (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
|
391 (setq ielm-output (concat ielm-output ielm-result))) |
21834
8ba41a7b6464
(*, **, ***): Add defvars.
Richard M. Stallman <rms@gnu.org>
parents:
21795
diff
changeset
|
392 ;; 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
|
393 (setq *** **) |
444b6677cc4e
(ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
21781
diff
changeset
|
394 (setq ** *) |
444b6677cc4e
(ielm-eval-input): More of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
21781
diff
changeset
|
395 (setq * ielm-result)) |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
396 (setq ielm-output (concat ielm-output "\n")))) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
397 (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
|
398 (comint-output-filter (ielm-process) ielm-output))) |
7267 | 399 |
400 ;;; Process and marker utilities | |
401 | |
402 (defun ielm-process nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
403 ;; Return the current buffer's process. |
7267 | 404 (get-buffer-process (current-buffer))) |
405 | |
406 (defun ielm-pm nil | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
407 ;; Return the process mark of the current buffer. |
7267 | 408 (process-mark (get-buffer-process (current-buffer)))) |
409 | |
410 (defun ielm-set-pm (pos) | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
411 ;; Set the process mark in the current buffer to POS. |
7267 | 412 (set-marker (process-mark (get-buffer-process (current-buffer))) pos)) |
413 | |
414 ;;; Major mode | |
415 | |
17649
28037dab627c
(inferior-emacs-lisp-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17634
diff
changeset
|
416 (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
|
417 |
7267 | 418 (defun inferior-emacs-lisp-mode nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
419 "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
|
420 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
|
421 |
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
|
422 * \\<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
|
423 one top level sexp per prompt. |
7267 | 424 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
425 * \\[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
|
426 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
|
427 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
|
428 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
|
429 |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
430 * \\[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
|
431 or indents the line if there is nothing to complete. |
7267 | 432 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
433 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
|
434 `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
|
435 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
|
436 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
|
437 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
|
438 or the buffer itself with \\[ielm-display-working-buffer]. |
7267 | 439 |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
440 During evaluations, the values of the variables `*', `**', and `***' |
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
441 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
|
442 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
|
443 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
|
444 `*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
|
445 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
446 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
|
447 `debug-on-error'. |
7267 | 448 |
449 The behaviour of IELM may be customised with the following variables: | |
450 * To stop beeping on error, set `ielm-noisy' to nil | |
451 * If you don't like the prompt, you can change it by setting `ielm-prompt'. | |
452 * Set `ielm-dynamic-return' to nil for bindings like `lisp-interaction-mode' | |
453 * Entry to this mode runs `comint-mode-hook' and `ielm-mode-hook' | |
454 (in that order). | |
455 | |
456 Customised bindings may be defined in `ielm-map', which currently contains: | |
457 \\{ielm-map}" | |
458 (interactive) | |
459 (comint-mode) | |
460 (setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt))) | |
461 (make-local-variable 'paragraph-start) | |
462 (setq paragraph-start comint-prompt-regexp) | |
463 (setq comint-input-sender 'ielm-input-sender) | |
464 (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
|
465 (make-local-variable 'comint-dynamic-complete-functions) |
32367
7c181d033dae
use lisp-mode-shared-map instead of shared-lisp-mode-map
Sam Steingold <sds@gnu.org>
parents:
30644
diff
changeset
|
466 (setq comint-dynamic-complete-functions |
7267 | 467 '(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
|
468 (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
|
469 (make-local-variable 'comint-completion-addsuffix) |
10107950ac5e
(inferior-emacs-lisp-mode): Set comint-completion-addsuffix.
Karl Heuer <kwzh@gnu.org>
parents:
15886
diff
changeset
|
470 (setq comint-completion-addsuffix |
10107950ac5e
(inferior-emacs-lisp-mode): Set comint-completion-addsuffix.
Karl Heuer <kwzh@gnu.org>
parents:
15886
diff
changeset
|
471 (cons (char-to-string directory-sep-char) "")) |
7267 | 472 |
473 (setq major-mode 'inferior-emacs-lisp-mode) | |
474 (setq mode-name "IELM") | |
475 (use-local-map ielm-map) | |
476 (set-syntax-table emacs-lisp-mode-syntax-table) | |
477 | |
478 (make-local-variable 'indent-line-function) | |
479 (make-local-variable 'ielm-working-buffer) | |
480 (setq ielm-working-buffer (current-buffer)) | |
481 (setq indent-line-function 'ielm-indent-line) | |
15886 | 482 (make-local-variable 'fill-paragraph-function) |
483 (setq fill-paragraph-function 'lisp-fill-paragraph) | |
7267 | 484 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
485 ;; Value holders |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
486 (make-local-variable '*) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
487 (setq * nil) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
488 (make-local-variable '**) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
489 (setq ** nil) |
47529
9b53ca22ace7
(*1, *2, *3): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
46942
diff
changeset
|
490 (make-local-variable '***) |
21781
6e9ef4991da8
(ielm-eval-input): Use variables *, **, *** not :, ::, :::.
Richard M. Stallman <rms@gnu.org>
parents:
20953
diff
changeset
|
491 (setq *** nil) |
43519
a604392198d7
(ielm-match-data): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43509
diff
changeset
|
492 (set (make-local-variable 'ielm-match-data) nil) |
7267 | 493 |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
494 ;; font-lock support |
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
495 (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
|
496 (setq font-lock-defaults |
12439
6141f81a80e5
(ielm-font-lock-keywords): New variable
Richard M. Stallman <rms@gnu.org>
parents:
10981
diff
changeset
|
497 '(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
|
498 |
7267 | 499 ;; 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
|
500 (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
|
501 ;; 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
|
502 ;; 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
|
503 (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
|
504 (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
|
505 (file-error (start-process "ielm" (current-buffer) "cat"))) |
7267 | 506 (process-kill-without-query (ielm-process)) |
507 (goto-char (point-max)) | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49161
diff
changeset
|
508 |
46942
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
509 ;; 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
|
510 ;; carriage control code. |
15fab402303e
[original idea from Luc Teirlinck <teirllm@mail.auburn.edu>]
Miles Bader <miles@gnu.org>
parents:
45833
diff
changeset
|
511 (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
|
512 |
7267 | 513 ;; Add a silly header |
514 (insert ielm-header) | |
515 (ielm-set-pm (point-max)) | |
47626
9e91beee44a6
(inferior-emacs-lisp-mode): Treat the header as output,
Richard M. Stallman <rms@gnu.org>
parents:
47586
diff
changeset
|
516 (unless comint-use-prompt-regexp-instead-of-fields |
9e91beee44a6
(inferior-emacs-lisp-mode): Treat the header as output,
Richard M. Stallman <rms@gnu.org>
parents:
47586
diff
changeset
|
517 (add-text-properties |
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
|
518 (point-min) (point-max) |
47626
9e91beee44a6
(inferior-emacs-lisp-mode): Treat the header as output,
Richard M. Stallman <rms@gnu.org>
parents:
47586
diff
changeset
|
519 '(rear-nonsticky t field output inhibit-line-move-field-capture t))) |
7267 | 520 (comint-output-filter (ielm-process) ielm-prompt) |
521 (set-marker comint-last-input-start (ielm-pm)) | |
522 (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
|
523 |
7267 | 524 (run-hooks 'ielm-mode-hook)) |
525 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
526 (defun ielm-get-old-input nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
527 ;; Return the previous input surrounding point |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
528 (save-excursion |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
529 (beginning-of-line) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
530 (if (looking-at comint-prompt-regexp) nil |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
531 (re-search-backward comint-prompt-regexp)) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
532 (comint-skip-prompt) |
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
533 (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
|
534 |
7267 | 535 ;;; User command |
536 | |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
537 ;;;###autoload (add-hook 'same-window-buffer-names "*ielm*") |
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
538 |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
539 ;;;###autoload |
7267 | 540 (defun ielm nil |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
541 "Interactively evaluate Emacs Lisp expressions. |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
542 Switches to the buffer `*ielm*', or creates it if it does not exist." |
7267 | 543 (interactive) |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
544 (if (comint-check-proc "*ielm*") |
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
545 nil |
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
546 (save-excursion |
7267 | 547 (set-buffer (get-buffer-create "*ielm*")) |
548 (inferior-emacs-lisp-mode))) | |
10981
54697b892d3a
(ielm): Use pop-to-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
7842
diff
changeset
|
549 (pop-to-buffer "*ielm*")) |
7267 | 550 |
18383 | 551 (provide 'ielm) |
552 | |
7275
cd1541f4c87c
(ielm-dynamic-multiline-inputs): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7267
diff
changeset
|
553 ;;; ielm.el ends here |