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.
This commit is contained in:
Lars Ingebrigtsen 2022-06-18 00:17:40 +02:00
parent c1370d83cb
commit 0d103e6f79
3 changed files with 42 additions and 21 deletions

View file

@ -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.