unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
Subject: RE: pp-eval-expression broken
Date: Fri, 5 Jan 2007 19:24:10 -0800	[thread overview]
Message-ID: <EIENLHALHGIMHGDOLMIMKEBKCOAA.drew.adams@oracle.com> (raw)
In-Reply-To: <E1H31iF-0000Oo-IH@fencepost.gnu.org>

> The reason for the change in pp-eval-expression
> is so that it will use read-expression-map and
> read-expression-history.  There is no clean way to make
> (interactive "x") use them.
>
> If this change causes trouble, we could create a new command with the
> new meaning of pp-eval-expression, and document that for users; then
> we could put pp-eval-expression back the old way, just for Lisp
> callers.

It was I who suggested using `read-expression-history' and
`read-expression-map' (thread "pp-eval-expression should use
read-expression-history" in Emacs-Pretest-Bug, 2006-10-14).

That's what I do in my own redefined `pp-eval-expression'. But I don't use
(interactive "X") or (interactive "x"). I just use this:

(interactive
 (list (read-from-minibuffer "Eval: " nil read-expression-map t
                             'read-expression-history))

Is there a problem with using that?

I'm not necessarily suggesting the following changes, but I also:
1. inhibit `emacs-lisp-mode-hook'.
2. call `font-lock-fontify-buffer'.
3. add a progress message ("Evaluating...").

Here's the code, FWIW (updated today, to deal with the recent non-eval for
Emacs 22):

(defun pp-eval-expression (expression)
  "Evaluate EXPRESSION and pretty-print value into a new display buffer.
If the pretty-printed value fits on one line, the message line is used
instead.  The value is also consed onto the front of the list in the
variable `values'."
  (interactive
   (list (read-from-minibuffer
          "Eval: " nil read-expression-map t
          'read-expression-history)))
  (message "Evaluating...")
  (unless (or (interactive-p) (> emacs-major-version 21)) ; Emacs 22 fix.
    (setq expression (eval expression)))
  (setq values (cons expression values))
  (let* ((old-show-function temp-buffer-show-function)
	 ;; Use this function to display the buffer.
	 ;; This function either decides not to display it
         ;; at all or displays it in the usual way.
	 (temp-buffer-show-function
	  (function
	   (lambda (buf)
	     (save-excursion
	       (set-buffer buf)
	       (goto-char (point-min))
	       (end-of-line 1)
	       (if (or (< (1+ (point)) (point-max))
		       (>= (- (point) (point-min))
                           (frame-width)))
		   (let ((temp-buffer-show-function
                          old-show-function)
			 (old-selected (selected-window))
			 (window (display-buffer buf)))
		     (goto-char (point-min))
		     (make-frame-visible
                      (window-frame window))
		     (unwind-protect
			 (progn
			   (select-window window)
			   (run-hooks
                            'temp-buffer-show-hook))
		       (select-window old-selected)
                       (message
                        "Evaluating...done.  \
See buffer *Pp Eval Output*.")))
		 (message "%s"
                          (buffer-substring (point-min)
                                            (point)))))))))
    (with-output-to-temp-buffer "*Pp Eval Output*"
      (pp (car values)))
    (save-excursion
      (set-buffer "*Pp Eval Output*")
      (setq buffer-read-only nil)
      (let ((emacs-lisp-mode-hook nil)
            (change-major-mode-hook nil))
        (emacs-lisp-mode))
      (make-local-variable 'font-lock-verbose)
      (setq font-lock-verbose nil)
      (font-lock-fontify-buffer))))

  reply	other threads:[~2007-01-06  3:24 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-05 15:51 pp-eval-expression broken Drew Adams
2007-01-05 17:52 ` Drew Adams
2007-01-05 18:58   ` Randal L. Schwartz
2007-01-05 19:14     ` Drew Adams
2007-01-06  2:55 ` Richard Stallman
2007-01-06  3:24   ` Drew Adams [this message]
2007-01-06  6:28     ` Drew Adams
2007-01-07  3:46     ` Richard Stallman
2007-01-09 22:56       ` Drew Adams
2007-01-13 22:27         ` Drew Adams
2007-01-14 14:45           ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=EIENLHALHGIMHGDOLMIMKEBKCOAA.drew.adams@oracle.com \
    --to=drew.adams@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).