After fixing the startup problem in ielm, I found one other problem.
Hitting return on a previously entered command yields an error:
Signaling: (wrong-type-argument stringp nil)
string-match("\\`[ \n]+\\'" nil)
(or (string= string "") (string-match "\\`[ \n]+\\'" string))
)
ielm-is-whitespace(nil)
(not (ielm-is-whitespace ielm-string))
)
(if (not (ielm-is-whitespace ielm-string)) (progn (condition-case err ... ...) (if
ielm-error-type nil ...) (if ... nil ... ...) (goto-char ielm-pmark) (if ... ...) (if
ielm-error-type ... ... ... ...) (setq ielm-output ...)))
)
(let (ielm-form ielm-pos ielm-result ielm-error-type (ielm-output "")
(ielm-wbuf ielm-working-buffer) (ielm-pmark ...)) (if (not ...) (progn ... ... ... ... ...
... ...)) (setq ielm-output (concat ielm-output ielm-prompt)) (comint-output-filter
(ielm-process) ielm-output))
)
ielm-eval-input(nil)
(let ((buf ...) ielm-input) (comint-send-input) (ielm-eval-input ielm-input))
)
ielm-send-input()
(if (and (< ... 1) (not ...)) (ielm-send-input) (if (and
ielm-dynamic-multiline-inputs ...) (save-excursion ... ...)) (newline-and-indent))
)
(let ((state ...)) (if (and ... ...) (ielm-send-input) (if ... ...)
(newline-and-indent)))
)
(if ielm-dynamic-return (let (...) (if ... ... ... ...)) (newline))
)
(lambda nil "Newline and indent, or evaluate the sexp before the prompt.\nComplete
sexps are evaluated; for incomplete sexps inserts a newline\nand indents. If however
`ielm-dynamic-return' is nil, this always\nsimply inserts a newline."
(interactive) (if ielm-dynamic-return (let ... ...) (newline)))()
call-interactively(ielm-return)
To reproduce:
1. Start ielm (M-x ielm)
2. At the first "ELISP>" prompt, enter something, for example:
(+ 1 1)
3. The result will be printed and you will get another "ELISP>" prompt.
Hit C-p twice so you are back on the line that you entered on step 2.
4. Hit return.
Here is a patch which fixes the problem:
--- ielm.el Sat Jul 11 23:44:59 1998
+++ ielm.el~ Sat Jul 11 23:29:57 1998
@@ -283,8 +283,7 @@
(ielm-output "") ; result to display
(ielm-wbuf ielm-working-buffer) ; current buffer after evaluation
(ielm-pmark (ielm-pm)))
- (if (and (not (null ielm-string))
- (not (ielm-is-whitespace ielm-string)))
+ (if (not (ielm-is-whitespace ielm-string))
(progn
(condition-case err
(let (rout)
@@ -351,8 +350,7 @@
(setq ielm-:: ielm-:)
(setq ielm-: ielm-result))
(setq ielm-output (concat ielm-output "\n"))))
- (if (not (null ielm-string))
- (setq ielm-output (concat ielm-output ielm-prompt)))
+ (setq ielm-output (concat ielm-output ielm-prompt))
(comint-output-filter (ielm-process) ielm-output)))
;;; Process and marker utilities