summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2022-06-18 00:17:40 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2022-06-18 00:17:40 +0200
commit0d103e6f79d374766b64e56fb05e440076f4df5c (patch)
treea163870466c2fc922fb4c2157d418a4f1736ce8a /lisp
parentc1370d83cb229c9f3f1b077d1e623b1e9ada6b50 (diff)
downloademacs-0d103e6f79d374766b64e56fb05e440076f4df5c.tar.gz
emacs-0d103e6f79d374766b64e56fb05e440076f4df5c.tar.bz2
emacs-0d103e6f79d374766b64e56fb05e440076f4df5c.zip
Extend 'e' in edebug to pretty-print the values
* doc/lispref/edebug.texi (Edebug Eval): Document it. * lisp/emacs-lisp/edebug.el (edebug-eval-expression): Allow displaying the full value in a different buffer.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/emacs-lisp/edebug.el54
1 files changed, 34 insertions, 20 deletions
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 9dc5a1315e5..58cfd47abdf 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -3707,30 +3707,44 @@ Return the result of the last expression."
(defalias 'edebug-format #'format-message)
(defalias 'edebug-message #'message)
-(defun edebug-eval-expression (expr)
+(defun edebug-eval-expression (expr &optional pp)
"Evaluate an expression in the outside environment.
If interactive, prompt for the expression.
-Print result in minibuffer."
- (interactive (list (read--expression "Eval: ")))
+
+Print result in minibuffer by default, but if PP is non-nil open
+a new window and pretty-print the result there. (Interactively,
+this is the prefix key.)"
+ (interactive (list (read--expression "Edebug eval: ")
+ current-prefix-arg))
(let* ((errored nil)
- (result
+ (value
(edebug-outside-excursion
- (let ((result (if debug-allow-recursive-debug
- (edebug-eval expr)
- (condition-case err
- (edebug-eval expr)
- (error
- (setq errored
- (format "%s: %s"
- (get (car err) 'error-message)
- (car (cdr err)))))))))
- (unless errored
- (values--store-value result)
- (concat (edebug-safe-prin1-to-string result)
- (eval-expression-print-format result)))))))
- (if errored
- (message "Error: %s" errored)
- (princ result))))
+ (if debug-allow-recursive-debug
+ (edebug-eval expr)
+ (condition-case err
+ (edebug-eval expr)
+ (error
+ (setq errored
+ (format "%s: %s"
+ (get (car err) 'error-message)
+ (car (cdr err)))))))))
+ (result
+ (unless errored
+ (values--store-value value)
+ (concat (edebug-safe-prin1-to-string value)
+ (eval-expression-print-format value)))))
+ (cond
+ (errored
+ (message "Error: %s" errored))
+ (pp
+ (save-selected-window
+ (pop-to-buffer "*Edebug Results*")
+ (erase-buffer)
+ (pp value (current-buffer))
+ (goto-char (point-min))
+ (lisp-data-mode)))
+ (t
+ (princ result)))))
(defun edebug-eval-last-sexp (&optional no-truncate)
"Evaluate sexp before point in the outside environment.