[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#12985: eval-last-sexp looks broken when executed twice

From: Juri Linkov
Subject: bug#12985: eval-last-sexp looks broken when executed twice
Date: Thu, 09 May 2013 00:19:09 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (x86_64-pc-linux-gnu)

>> It seems a better design would be to always include the string, even
>> the first time, when displaying in the echo area, and never include
>> the string when printing into the buffer, regardless of the invoking
>> command name. This is simpler, and it's how eval-expression already works.
> Thank you for suggesting a new design.  I agree it is better
> than the current design.  The patch below implements it and
> removes the feature of behaving differently when called twice.

Since this feature will use a better design now,
more commands could benefit from this feature:
`C-M-x' (`eval-defun' and `edebug-eval-defun')
and `ielm-send-input'.

=== modified file 'lisp/emacs-lisp/lisp-mode.el'
--- lisp/emacs-lisp/lisp-mode.el        2013-05-06 20:23:40 +0000
+++ lisp/emacs-lisp/lisp-mode.el        2013-05-08 21:12:52 +0000
@@ -928,6 +928,8 @@ (defun eval-defun-2 ()
                 ;; will make eval-region return.
                 (goto-char ,end)
+  (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))

=== modified file 'lisp/emacs-lisp/edebug.el'
--- lisp/emacs-lisp/edebug.el   2013-04-08 02:21:59 +0000
+++ lisp/emacs-lisp/edebug.el   2013-05-08 21:17:06 +0000
@@ -528,7 +528,10 @@ (defun edebug-eval-defun (edebug-it)
                        (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))))
=== modified file 'lisp/ielm.el'
--- lisp/ielm.el        2013-01-01 09:11:05 +0000
+++ lisp/ielm.el        2013-05-08 21:10:23 +0000
@@ -408,7 +408,8 @@ (defun ielm-eval-input (input-string)
        (condition-case nil
            ;; Self-referential objects cause loops in the printer, so
            ;; trap quits here. May as well do errors, too
-           (setq ielm-output (concat ielm-output (pp-to-string ielm-result)))
+           (setq ielm-output (concat ielm-output (pp-to-string ielm-result)
+                                     (eval-expression-print-format 
          (error (setq ielm-error-type "IELM Error")
                 (setq ielm-result "Error during pretty-printing (bug in pp)"))
          (quit  (setq ielm-error-type "IELM Error")

reply via email to

[Prev in Thread] Current Thread [Next in Thread]