]> code.delx.au - gnu-emacs/commitdiff
* lisp/simple.el (eval-expression-print-format): Don't check for
authorJuri Linkov <juri@jurta.org>
Thu, 19 Dec 2013 21:02:46 +0000 (23:02 +0200)
committerJuri Linkov <juri@jurta.org>
Thu, 19 Dec 2013 21:02:46 +0000 (23:02 +0200)
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.

* lisp/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.

* lisp/emacs-lisp/edebug.el (edebug-eval-defun): Print the integer
values from `eval-expression-print-format' at the end.

* lisp/ielm.el (ielm-eval-input): Print the integer
values from `eval-expression-print-format' at the end.

Fixes: debbugs:12985
etc/NEWS
lisp/ChangeLog
lisp/emacs-lisp/edebug.el
lisp/emacs-lisp/lisp-mode.el
lisp/ielm.el
lisp/simple.el

index dcdf9912d1c05c6a6b6a7c4edb313cce0e4b5cab..d63291cba596fbfe3ab4d59e4b5deb3b1f86b4df 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -119,6 +119,12 @@ non-nil, they output the same results.
 ** `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.
index 31a8cead95ffd2bdf824c2e6d8a85f2834b0057c..636617595cbd9b0eff0ca6594e4ac955b88e36f8 100644 (file)
@@ -1,3 +1,30 @@
+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
index ec343eab631372be77ab8d1e639566f2041b0a17..552ee696ef3c4a61fcea08fc2d76c45aa580692a 100644 (file)
@@ -497,7 +497,10 @@ the minibuffer."
                        (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)))
 
 
index f4e9b311acce991fb18957747cbc34634a0fdcee..b7bd33f628fe1d9b68ea22e029af973793d1627e 100644 (file)
@@ -858,7 +858,7 @@ Semicolons start comments.
 \\{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,
@@ -866,11 +866,13 @@ this command arranges for all errors to enter the debugger.
 
 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)))
 
 
@@ -1013,18 +1015,26 @@ If CHAR is not a character, return nil."
 
 (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
@@ -1070,6 +1080,9 @@ POS specifies the starting position where EXP was found and defaults to point."
 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."
@@ -1167,6 +1180,8 @@ Return the result of evaluation."
                          ;; 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))
 
index fb1f977423774812e46fb87b28199f44b495eaf6..8176704e75fe747ad87eff9c099473b531378e1d 100644 (file)
@@ -458,7 +458,9 @@ nonempty, then flushes the buffer."
             ;; 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")
index 61068efce59191ebbe473d1e49ec1dd634bc28b0..5101bfb26f856ae77da4c542fde9b80a7c130592 100644 (file)
@@ -1365,13 +1365,12 @@ Return a formatted string which is displayed in the echo area
 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)))))
@@ -1399,8 +1398,11 @@ evaluate it.
 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,
@@ -1422,13 +1424,19 @@ this command arranges for all errors to enter the debugger."
       (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))))