summaryrefslogtreecommitdiff
path: root/lisp/ielm.el
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2018-01-15 17:04:05 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2018-01-15 17:04:05 -0500
commit81b5131e11fa96d32a1718c6e2ebf40994d7d281 (patch)
tree2b5cc6312c21d289a5e2ffc92c5539abfee79327 /lisp/ielm.el
parent400b72cb6e118b86d2e83cbfb45b829b231ec4f9 (diff)
downloademacs-81b5131e11fa96d32a1718c6e2ebf40994d7d281.tar.gz
* lisp/ielm.el (ielm-eval-input): Use cl-print.
Diffstat (limited to 'lisp/ielm.el')
-rw-r--r--lisp/ielm.el23
1 files changed, 17 insertions, 6 deletions
diff --git a/lisp/ielm.el b/lisp/ielm.el
index fb285e80f6e..259e1b9f79f 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -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