;;; ielm.el --- interaction mode for Emacs Lisp
-;; Copyright (C) 1994, 2002, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: David Smith <maa036@lancaster.ac.uk>
;; Maintainer: FSF
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(defcustom ielm-prompt-read-only t
"If non-nil, the IELM prompt is read only.
+The read only region includes the newline before the prompt.
Setting this variable does not affect existing IELM runs.
This works by setting the buffer-local value of `comint-prompt-read-only'.
-Setting that value directly affects new prompts in the current buffer."
+Setting that value directly affects new prompts in the current buffer.
+
+If this option is enabled, then the safe way to temporarily
+override the read-only-ness of ielm prompts is to call
+`comint-kill-whole-line' or `comint-kill-region' with no
+narrowing in effect. This way you will be certain that none of
+the remaining prompts will be accidentally messed up. You may
+wish to put something like the following in your `.emacs' file:
+
+\(add-hook 'ielm-mode-hook
+ '(lambda ()
+ (define-key ielm-map \"\\C-w\" 'comint-kill-region)
+ (define-key ielm-map [C-S-backspace]
+ 'comint-kill-whole-line)))
+
+If you set `comint-prompt-read-only' to t, you might wish to use
+`comint-mode-hook' and `comint-mode-map' instead of
+`ielm-mode-hook' and `ielm-map'. That will affect all comint
+buffers, including ielm buffers. If you sometimes use ielm on
+text-only terminals or with `emacs -nw', you might wish to use
+another binding for `comint-kill-whole-line'."
:type 'boolean
:group 'ielm
- :version "21.4")
+ :version "22.1")
(defcustom ielm-prompt "ELISP> "
"Prompt used in IELM.
customizes `ielm-prompt'.")
(defcustom ielm-dynamic-return t
- "*Controls whether \\<ielm-map>\\[ielm-return] has intelligent behaviour in IELM.
+ "*Controls whether \\<ielm-map>\\[ielm-return] has intelligent behavior in IELM.
If non-nil, \\[ielm-return] evaluates input for complete sexps, or inserts a newline
and indents for incomplete sexps. If nil, always inserts newlines."
:type 'boolean
;;; Completion stuff
(defun ielm-tab nil
- "Possibly indent the current line as lisp code."
+ "Possibly indent the current line as Lisp code."
(interactive)
(if (or (eq (preceding-char) ?\n)
(eq (char-syntax (preceding-char)) ? ))
t)))
(defun ielm-complete-symbol nil
- "Complete the lisp symbol before point."
+ "Complete the Lisp symbol before point."
;; A wrapper for lisp-complete symbol that returns non-nil if
;; completion has occurred
(let* ((btick (buffer-modified-tick))
Expressions evaluated by IELM are not subject to `debug-on-quit' or
`debug-on-error'.
-The behaviour of IELM may be customized with the following variables:
+The behavior of IELM may be customized with the following variables:
* To stop beeping on error, set `ielm-noisy' to nil.
* If you don't like the prompt, you can change it by setting `ielm-prompt'.
* If you do not like that the prompt is (by default) read-only, set
Customized bindings may be defined in `ielm-map', which currently contains:
\\{ielm-map}"
(interactive)
- (comint-mode)
+ (delay-mode-hooks
+ (comint-mode))
(setq comint-prompt-regexp (concat "^" (regexp-quote ielm-prompt)))
+ (set (make-local-variable 'paragraph-separate) "\\'")
(make-local-variable 'paragraph-start)
(setq paragraph-start comint-prompt-regexp)
(setq comint-input-sender 'ielm-input-sender)
(condition-case nil
(start-process "ielm" (current-buffer) "hexl")
(file-error (start-process "ielm" (current-buffer) "cat")))
- (process-kill-without-query (ielm-process))
+ (set-process-query-on-exit-flag (ielm-process) nil)
(goto-char (point-max))
;; Lisp output can include raw characters that confuse comint's
;; Add a silly header
(insert ielm-header)
(ielm-set-pm (point-max))
- (unless comint-use-prompt-regexp-instead-of-fields
+ (unless comint-use-prompt-regexp
(let ((inhibit-read-only t))
(add-text-properties
(point-min) (point-max)
(set-marker comint-last-input-start (ielm-pm))
(set-process-filter (get-buffer-process (current-buffer)) 'comint-output-filter))
- (run-hooks 'ielm-mode-hook))
+ (run-mode-hooks 'ielm-mode-hook))
(defun ielm-get-old-input nil
;; Return the previous input surrounding point