# HG changeset patch # User Luc Teirlinck # Date 1083210305 0 # Node ID 649d109f3222ac5ec994b972741a2e189b083479 # Parent 14d50685dce055098c4269d4090f19eefd26fd03 (ielm-prompt-read-only, ielm-prompt): Update docstring. (ielm-prompt-internal): New variable. (ielm-font-lock-keywords): Remove irrelevant ielm-prompt keyword. (ielm-send-input): Delete unused variable `buf'. (ielm-eval-input): Use `ielm-prompt-internal'. (inferior-emacs-lisp-mode): Use new variables `comint-prompt-read-only' and `ielm-prompt-internal'. Get rid of obsolete variable `directory-sep-char'. (ielm): Use `zerop'. diff -r 14d50685dce0 -r 649d109f3222 lisp/ielm.el --- a/lisp/ielm.el Thu Apr 29 03:41:48 2004 +0000 +++ b/lisp/ielm.el Thu Apr 29 03:45:05 2004 +0000 @@ -52,34 +52,19 @@ (defcustom ielm-prompt-read-only t "If non-nil, the IELM prompt is read only. Setting this variable does not affect existing IELM runs. - -You can give the IELM prompt more highly customized read-only -type properties, by setting this option to nil, and then setting -`ielm-prompt', outside of Custom, to a string with the desired -text properties. - -Interrupting the IELM process with \\\\[comint-interrupt-subjob], -and then restarting it using \\[ielm], makes the then current -default value affect _new_ prompts. However, executing \\[ielm] -does not have this effect on *ielm* buffers with a running process. -For IELM buffers that are not called `*ielm*', you can execute -\\[inferior-emacs-lisp-mode] in that IELM buffer to update the value, -for new prompts. This works even if the buffer has a running process." +This works by setting the buffer-local value of `comint-prompt-read-only'. +Setting that value directly affects new prompts in the current buffer." :type 'boolean :group 'ielm :version "21.4") (defcustom ielm-prompt "ELISP> " "Prompt used in IELM. -Setting the default value does not affect existing IELM runs. -`inferior-emacs-lisp-mode' converts this into a buffer-local -variable in IELM buffers. The buffer-local value is meant for -internal use by IELM. Do not try to set the buffer-local value -yourself in any way, unless you really know what you are doing. +Setting this variable does not affect existing IELM runs. Interrupting the IELM process with \\\\[comint-interrupt-subjob], and then restarting it using \\[ielm], makes the then current -_default_ value affect _new_ prompts. Unless the new prompt +default value affect _new_ prompts. Unless the new prompt differs only in text properties from the old one, IELM will no longer recognize the old prompts. However, executing \\[ielm] does not update the prompt of an *ielm* buffer with a running process. @@ -89,6 +74,12 @@ :type 'string :group 'ielm) +(defvar ielm-prompt-internal "ELISP> " + "Stored value of `ielm-prompt' in the current IELM buffer. +This is an internal variable used by IELM. Its purpose is to +prevent a running IELM process from being messed up when the user +customizes `ielm-prompt'.") + (defcustom ielm-dynamic-return t "*Controls whether \\\\[ielm-return] has intelligent behaviour in IELM. If non-nil, \\[ielm-return] evaluates input for complete sexps, or inserts a newline @@ -178,9 +169,7 @@ (define-key ielm-map "\C-c\C-v" 'ielm-print-working-buffer)) (defvar ielm-font-lock-keywords - (list - (cons (concat "^" (regexp-quote ielm-prompt)) 'font-lock-keyword-face) - '("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)" + '(("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)" (1 font-lock-comment-face) (2 font-lock-constant-face))) "Additional expressions to highlight in ielm buffers.") @@ -283,8 +272,7 @@ (defun ielm-send-input nil "Evaluate the Emacs Lisp expression after the prompt." (interactive) - (let ((buf (current-buffer)) - ielm-input) ; set by ielm-input-sender + (let (ielm-input) ; set by ielm-input-sender (comint-send-input) ; update history, markers etc. (ielm-eval-input ielm-input))) @@ -407,7 +395,7 @@ (setq ** *) (setq * ielm-result)) (setq ielm-output (concat ielm-output "\n")))) - (setq ielm-output (concat ielm-output ielm-prompt)) + (setq ielm-output (concat ielm-output ielm-prompt-internal)) (comint-output-filter (ielm-process) ielm-output))) ;;; Process and marker utilities @@ -478,20 +466,13 @@ (setq comint-input-sender 'ielm-input-sender) (setq comint-process-echoes nil) (make-local-variable 'comint-dynamic-complete-functions) - (set (make-local-variable 'ielm-prompt) - (if ielm-prompt-read-only - (propertize ielm-prompt - 'read-only t - 'rear-nonsticky t - 'front-sticky '(read-only)) - ielm-prompt)) + (set (make-local-variable 'ielm-prompt-internal) ielm-prompt) + (set (make-local-variable 'comint-prompt-read-only) ielm-prompt-read-only) (setq comint-dynamic-complete-functions '(ielm-tab comint-replace-by-expanded-history ielm-complete-filename ielm-complete-symbol)) (setq comint-get-old-input 'ielm-get-old-input) (make-local-variable 'comint-completion-addsuffix) - (setq comint-completion-addsuffix - (cons (char-to-string directory-sep-char) "")) - + (setq comint-completion-addsuffix '("/" . "")) (setq major-mode 'inferior-emacs-lisp-mode) (setq mode-name "IELM") (setq mode-line-process '(":%s on " (:eval (buffer-name ielm-working-buffer)))) @@ -541,7 +522,7 @@ (add-text-properties (point-min) (point-max) '(rear-nonsticky t field output inhibit-line-move-field-capture t)))) - (comint-output-filter (ielm-process) ielm-prompt) + (comint-output-filter (ielm-process) ielm-prompt-internal) (set-marker comint-last-input-start (ielm-pm)) (set-process-filter (get-buffer-process (current-buffer)) 'comint-output-filter)) @@ -568,7 +549,7 @@ (let (old-point) (unless (comint-check-proc "*ielm*") (with-current-buffer (get-buffer-create "*ielm*") - (unless (eq (buffer-size) 0) (setq old-point (point))) + (unless (zerop (buffer-size)) (setq old-point (point))) (inferior-emacs-lisp-mode))) (pop-to-buffer "*ielm*") (when old-point (push-mark old-point))))