summaryrefslogtreecommitdiff
path: root/lisp/ielm.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/ielm.el')
-rw-r--r--lisp/ielm.el28
1 files changed, 18 insertions, 10 deletions
diff --git a/lisp/ielm.el b/lisp/ielm.el
index fb285e80f6e..59e333f19c1 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -384,7 +384,7 @@ nonempty, then flushes the buffer."
(set-match-data ielm-match-data)
(save-excursion
(with-temp-buffer
- (condition-case err
+ (condition-case-unless-debug err
(unwind-protect
;; The next let form creates default
;; bindings for *, ** and ***. But
@@ -436,15 +436,26 @@ nonempty, then flushes the buffer."
(goto-char pmark)
(unless error-type
- (condition-case nil
+ (condition-case err
;; Self-referential objects cause loops in the printer, so
;; trap quits here. May as well do errors, too
(unless for-effect
- (setq output (concat output (pp-to-string result)
- (let ((str (eval-expression-print-format result)))
- (if str (propertize str 'font-lock-face 'shadow))))))
- (error (setq error-type "IELM Error")
- (setq result "Error during pretty-printing (bug in pp)"))
+ (let* ((ielmbuf (current-buffer))
+ (aux (let ((str (eval-expression-print-format result)))
+ (if str (propertize str 'font-lock-face 'shadow)))))
+ (setq output (with-temp-buffer
+ (let ((tmpbuf (current-buffer)))
+ ;; Use print settings (e.g. print-circle,
+ ;; print-gensym, etc...) from the
+ ;; right buffer!
+ (with-current-buffer ielmbuf
+ (cl-prin1 result tmpbuf))
+ (pp-buffer)
+ (concat (buffer-string) aux))))))
+ (error
+ (setq error-type "IELM Error")
+ (setq result (format "Error during pretty-printing (bug in pp): %S"
+ err)))
(quit (setq error-type "IELM Error")
(setq result "Quit during pretty-printing"))))
(if error-type
@@ -517,9 +528,6 @@ causes output to be directed to the ielm buffer.
set to a different value during evaluation. You can use (princ
VALUE) or (pp VALUE) to write to the ielm buffer.
-Expressions evaluated by IELM are not subject to `debug-on-quit' or
-`debug-on-error'.
-
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'.