** `eval-defun' on an already defined defcustom calls the :set function,
if there is one.
+** A zero prefix arg of `eval-last-sexp' (`C-x C-e'),
+`eval-expression' (`M-:') and `eval-print-last-sexp' (`C-j') inserts
+a list with no limit on its length and level (by using nil values of
+`print-length' and `print-level'), and inserts additional formats for
+integers (octal, hexadecimal, and character).
+
** If the new variable `enable-dir-local-variables' is nil,
directory local variables are ignored. May be useful for some modes
that want to ignore directory-locals while still respecting file-locals.
+2013-12-19 Juri Linkov <juri@jurta.org>
+
+ * simple.el (eval-expression-print-format): Don't check for
+ command names and the last command. Always display additional
+ formats of the integer result in the echo area, and insert them
+ to the current buffer only with a zero prefix arg.
+ Display character when char-displayable-p is non-nil.
+ (eval-expression): With a zero prefix arg, set `print-length' and
+ `print-level' to nil, and insert the integer values from
+ `eval-expression-print-format' at the end. Doc fix. (Bug#12985)
+
+ * emacs-lisp/lisp-mode.el (eval-print-last-sexp): Add arg
+ `eval-last-sexp-arg-internal'. Doc fix.
+ (eval-last-sexp-1): Pass arg `eval-last-sexp-arg-internal' to
+ `eval-last-sexp-print-value'. Doc fix.
+ (eval-last-sexp-print-value): Add arg `eval-last-sexp-arg-internal'.
+ Set `print-length' and `print-level' to nil when arg is zero.
+ (eval-last-sexp): Doc fix.
+ (eval-defun-2): Print the integer values from
+ `eval-expression-print-format' at the end.
+
+ * emacs-lisp/edebug.el (edebug-eval-defun): Print the integer
+ values from `eval-expression-print-format' at the end.
+
+ * ielm.el (ielm-eval-input): Print the integer
+ values from `eval-expression-print-format' at the end.
+
2013-12-19 Teodor Zlatanov <tzz@lifelogs.com>
* net/eww.el (eww-exit, eww-close, eww-mode-map): Revert change of
(put (nth 1 form) 'saved-face nil)))))
(setq edebug-result (eval (eval-sexp-add-defvars form) lexical-binding))
(if (not edebugging)
- (princ edebug-result)
+ (prog1
+ (princ edebug-result)
+ (let ((str (eval-expression-print-format edebug-result)))
+ (if str (princ str))))
edebug-result)))
\\{lisp-interaction-mode-map}"
:abbrev-table nil)
-(defun eval-print-last-sexp ()
+(defun eval-print-last-sexp (&optional eval-last-sexp-arg-internal)
"Evaluate sexp before point; print value into current buffer.
If `eval-expression-debug-on-error' is non-nil, which is the default,
Note that printing the result is controlled by the variables
`eval-expression-print-length' and `eval-expression-print-level',
-which see."
- (interactive)
+which see. With a zero prefix arg, print output with no limit
+on the length and level of lists, and include additional formats
+for integers (octal, hexadecimal, and character)."
+ (interactive "P")
(let ((standard-output (current-buffer)))
(terpri)
- (eval-last-sexp t)
+ (eval-last-sexp (or eval-last-sexp-arg-internal t))
(terpri)))
(defun eval-last-sexp-1 (eval-last-sexp-arg-internal)
"Evaluate sexp before point; print value in the echo area.
-With argument, print output into current buffer."
+With argument, print output into current buffer.
+With a zero prefix arg, print output with no limit on the length
+and level of lists, and include additional formats for integers
+\(octal, hexadecimal, and character)."
(let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t)))
;; Setup the lexical environment if lexical-binding is enabled.
(eval-last-sexp-print-value
- (eval (eval-sexp-add-defvars (preceding-sexp)) lexical-binding))))
+ (eval (eval-sexp-add-defvars (preceding-sexp)) lexical-binding)
+ eval-last-sexp-arg-internal)))
-(defun eval-last-sexp-print-value (value)
+(defun eval-last-sexp-print-value (value &optional eval-last-sexp-arg-internal)
(let ((unabbreviated (let ((print-length nil) (print-level nil))
(prin1-to-string value)))
- (print-length eval-expression-print-length)
- (print-level eval-expression-print-level)
+ (print-length (and (not (zerop (prefix-numeric-value
+ eval-last-sexp-arg-internal)))
+ eval-expression-print-length))
+ (print-level (and (not (zerop (prefix-numeric-value
+ eval-last-sexp-arg-internal)))
+ eval-expression-print-level))
(beg (point))
end)
(prog1
Interactively, with prefix argument, print output into current buffer.
Truncates long output according to the value of the variables
`eval-expression-print-length' and `eval-expression-print-level'.
+With a zero prefix arg, print output with no limit on the length
+and level of lists, and include additional formats for integers
+\(octal, hexadecimal, and character).
If `eval-expression-debug-on-error' is non-nil, which is the default,
this command arranges for all errors to enter the debugger."
;; will make eval-region return.
(goto-char end)
form))))))
+ (let ((str (eval-expression-print-format (car values))))
+ (if str (princ str)))
;; The result of evaluation has been put onto VALUES. So return it.
(car values))
;; 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))))
+ (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)"))
(quit (setq error-type "IELM Error")
in addition to the value printed by prin1 in functions which
display the result of expression evaluation."
(if (and (integerp value)
- (or (not (memq this-command '(eval-last-sexp eval-print-last-sexp)))
- (eq this-command last-command)
- (if (boundp 'edebug-active) edebug-active)))
+ (or (eq standard-output t)
+ (zerop (prefix-numeric-value current-prefix-arg))))
(let ((char-string
- (if (or (if (boundp 'edebug-active) edebug-active)
- (memq this-command '(eval-last-sexp eval-print-last-sexp)))
- (prin1-char value))))
+ (if (and (characterp value)
+ (char-displayable-p value))
+ (prin1-char value))))
(if char-string
(format " (#o%o, #x%x, %s)" value value char-string)
(format " (#o%o, #x%x)" value value)))))
Value is also consed on to front of the variable `values'.
Optional argument INSERT-VALUE non-nil (interactively,
with prefix argument) means insert the result into the current buffer
-instead of printing it in the echo area. Truncates long output
-according to the value of the variables `eval-expression-print-length'
+instead of printing it in the echo area. With a zero prefix arg,
+insert the result with no limit on the length and level of lists,
+and include additional formats for integers (octal, hexadecimal,
+and character). Truncates long output according to the value
+of the variables `eval-expression-print-length'
and `eval-expression-print-level'.
If `eval-expression-debug-on-error' is non-nil, which is the default,
(unless (eq old-value new-value)
(setq debug-on-error new-value))))
- (let ((print-length eval-expression-print-length)
- (print-level eval-expression-print-level)
+ (let ((print-length (and (not (zerop (prefix-numeric-value insert-value)))
+ eval-expression-print-length))
+ (print-level (and (not (zerop (prefix-numeric-value insert-value)))
+ eval-expression-print-level))
(deactivate-mark))
(if insert-value
(with-no-warnings
(let ((standard-output (current-buffer)))
- (prin1 (car values))))
+ (prog1
+ (prin1 (car values))
+ (when (zerop (prefix-numeric-value insert-value))
+ (let ((str (eval-expression-print-format (car values))))
+ (if str (princ str)))))))
(prog1
(prin1 (car values) t)
(let ((str (eval-expression-print-format (car values))))