diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2018-01-15 17:04:05 -0500 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2018-01-15 17:04:05 -0500 |
commit | 81b5131e11fa96d32a1718c6e2ebf40994d7d281 (patch) | |
tree | 2b5cc6312c21d289a5e2ffc92c5539abfee79327 /lisp/ielm.el | |
parent | 400b72cb6e118b86d2e83cbfb45b829b231ec4f9 (diff) | |
download | emacs-81b5131e11fa96d32a1718c6e2ebf40994d7d281.tar.gz |
* lisp/ielm.el (ielm-eval-input): Use cl-print.
Diffstat (limited to 'lisp/ielm.el')
-rw-r--r-- | lisp/ielm.el | 23 |
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 |