From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: npostavs@users.sourceforge.net Newsgroups: gmane.emacs.bugs Subject: bug#16828: 24.3.50; eval-expression, character representation of integer results time-consuming Date: Fri, 19 May 2017 16:52:20 -0400 Message-ID: <8760gwin7f.fsf@users.sourceforge.net> References: <83mwhk4v48.fsf@gnu.org> <83txbr2sye.fsf@gnu.org> <87zjljf086.fsf@rosalinde.fritz.box> <83a9di3lt1.fsf@gnu.org> <877g8mb3lh.fsf@Rainer.invalid> <530DBEEE.8060805@gmx.at> <87zig84s6l.fsf@users.sourceforge.net> <83wpbc9ldc.fsf@gnu.org> <83lgrs9k8p.fsf@gnu.org> <87inmw3x5b.fsf@users.sourceforge.net> <83fui09i5z.fsf@gnu.org> <87fui03pjr.fsf@users.sourceforge.net> <834lyg9b9t.fsf@gnu.org> <87a88752ej.fsf@users.sourceforge.net> <83y3vr9909.fsf@gnu.org> <878tltiure.fsf@users.sourceforge.net> <83efvl4ann.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: blaine.gmane.org 1495227076 7551 195.159.176.226 (19 May 2017 20:51:16 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 19 May 2017 20:51:16 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cc: 16828@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri May 19 22:51:12 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBorf-0001pT-Od for geb-bug-gnu-emacs@m.gmane.org; Fri, 19 May 2017 22:51:12 +0200 Original-Received: from localhost ([::1]:60234 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBorl-0000x8-7N for geb-bug-gnu-emacs@m.gmane.org; Fri, 19 May 2017 16:51:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBora-0000wp-G2 for bug-gnu-emacs@gnu.org; Fri, 19 May 2017 16:51:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBorW-0004vY-Fp for bug-gnu-emacs@gnu.org; Fri, 19 May 2017 16:51:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:52968) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dBorW-0004vK-6c for bug-gnu-emacs@gnu.org; Fri, 19 May 2017 16:51:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dBorV-0005ZW-UQ for bug-gnu-emacs@gnu.org; Fri, 19 May 2017 16:51:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 19 May 2017 20:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 16828 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 16828-submit@debbugs.gnu.org id=B16828.149522705321404 (code B ref 16828); Fri, 19 May 2017 20:51:01 +0000 Original-Received: (at 16828) by debbugs.gnu.org; 19 May 2017 20:50:53 +0000 Original-Received: from localhost ([127.0.0.1]:55645 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBorM-0005Z9-LT for submit@debbugs.gnu.org; Fri, 19 May 2017 16:50:53 -0400 Original-Received: from mail-it0-f45.google.com ([209.85.214.45]:35574) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dBorL-0005Yx-Cq for 16828@debbugs.gnu.org; Fri, 19 May 2017 16:50:52 -0400 Original-Received: by mail-it0-f45.google.com with SMTP id c15so125425873ith.0 for <16828@debbugs.gnu.org>; Fri, 19 May 2017 13:50:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=ux5oeRO7KxJ6mio4inZl44OP8KNwanyv6kvlYTtafGk=; b=pSrcMEXMEM6fzTz65re87eWtVfIxII5jR7xTFH08ELnQZh5cZc2xWiig1QjCYABgNR 0Z9ebxjngj/akhIndpJLFJChOz4Z/9PT57tPfvTaZZnCymCn3JQq543UPNr+ex+WP7U8 JPL6WhBBu4C6heKDYn/KMbXPMDJd5iLepqxVVURImgyDJ0/+VId6iUEgD4RlXUbpHm9f uxy+bxxa+HarmkiAXZEj8FgBVGwtvbF7jvO++kZtwRIXowiTS9L77ymMj1uAg0jia9fS V+5m0CV6RUAfWvdmEj0+Rlw6kaEbmjXfGJ0HHNrj4JcusOVQxrT9TuU5O1XEBDsnzRUW uAFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=ux5oeRO7KxJ6mio4inZl44OP8KNwanyv6kvlYTtafGk=; b=WqMzWSGYkWH4g7sMKamOjPmbHjhmcv5Sg9lBqtp60UgQck4sqBJC8TzgxvI6xSXbMI ynt/6raYyd2y5hEf69/46MlEKnLDhe8pBtvq343dz7/LGB61ynpMPYRxW7sWHdonChp5 4F6vGjXCGq9X8RYnnwFvLSIvE8gGJDiobHY+EzoupRjkp42tp7VCsctJ1OEn5Sk87+je P3sjdpWQEiC/9+jUGiMJJfsPIjfpScW2blfQQ1mayzH+UYRWeEt+vmv3WNopM+RtD9Y2 VGMYtXuHp290AhFUy3LIpAOSXaQCs9Nh11xzwLb60ljr8zyIbXbBG4oWUr5QZxNT+ayi cenA== X-Gm-Message-State: AODbwcC5Z9rRDsbcY3jfUFzBT+pmLCCxVjXv0yVa9EfMzOCrgRmUwCoY FcWIozh5ZAZL7w== X-Received: by 10.36.48.5 with SMTP id q5mr31225087itq.15.1495227045615; Fri, 19 May 2017 13:50:45 -0700 (PDT) Original-Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id b10sm4301670iod.33.2017.05.19.13.50.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 19 May 2017 13:50:44 -0700 (PDT) In-Reply-To: <83efvl4ann.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 19 May 2017 09:34:52 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:132655 Archived-At: --=-=-= Content-Type: text/plain Eli Zaretskii writes: > I would suggest to also mention eval-expression here. Right, I also noticed eval-expression-print-format's docstring refers to `prin1' which seems to be wrong. (defcustom eval-expression-print-maximum-character 127 "The largest integer that will be displayed as a character. -This affects printing by `eval-expression-print-format'." +This affects printing by `eval-expression' (via +`eval-expression-print-format')." :group 'lisp :type 'integer :version "26.1") (defun eval-expression-print-format (value) "If VALUE in an integer, return a specially formatted string. This string will typically look like \" (#o1, #x1, ?\\C-a)\". If VALUE is not an integer, nil is returned. -This function is used by functions like `prin1' that display the -result of expression evaluation." +This function is used by commands like `eval-expression' that +display the result of expression evaluation." >> +(octal, hexadecimal, and character if >> +@code{eval-expression-print-maximum-character} allows it). > > Please add a "see below" here, as the description of the variable is > several dozens of lines farther. Right. Is it okay to have nested parentheses? I use this quite often when I write emails and such, but I have the idea it might be frowned upon in more formal contexts. +@code{eval-expression-print-maximum-character} (see below) allows it). > > This is too terse, IMO; please state explicitly that values larger > than this will not be displayed as characters. Yeah, I have a tendency to be overly terse. +@code{eval-expression-print-maximum-character} prevents integers which +are larger than it from being displayed as characters. --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=v3-0002-Limit-integers-printed-as-characters-Bug-16828.patch Content-Description: patch >From eb11632d4db13d80839601c2c972e02fa46cc7f8 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sun, 23 Apr 2017 22:30:20 -0400 Subject: [PATCH v3 2/2] Limit integers printed as characters (Bug#16828) * lisp/simple.el (eval-expression-print-maximum-character): New variable. (eval-expression-print-format): Only display value as character if it's less than or equal to `eval-expression-print-maximum-character'. (eval-expression-get-print-arguments): Check eval-expression-print-maximum-character, allow negative arg to override it. (eval-expression): * lisp/progmodes/elisp-mode.el (elisp--eval-last-sexp): (elisp--eval-last-sexp-print-value): Handle new variable. * doc/emacs/building.texi (Lisp Eval): Document new variable and behavior. * etc/NEWS: Announce it. * test/lisp/progmodes/elisp-mode-tests.el (eval-last-sexp-print-format-small-int): (eval-last-sexp-print-format-small-int-echo): (eval-last-sexp-print-format-large-int): (eval-last-sexp-print-format-large-int-echo): * test/lisp/simple-tests.el (eval-expression-print-format-small-int): (eval-expression-print-format-small-int-echo): (eval-expression-print-format-large-int): (eval-expression-print-format-large-int-echo): New tests. --- doc/emacs/building.texi | 12 +++++-- etc/NEWS | 4 +++ lisp/progmodes/elisp-mode.el | 20 +++++++----- lisp/simple.el | 58 +++++++++++++++++++++------------ test/lisp/progmodes/elisp-mode-tests.el | 48 +++++++++++++++++++++++++++ test/lisp/simple-tests.el | 52 +++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 31 deletions(-) diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index ba8eae0759..5bf10bf97d 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -1485,7 +1485,8 @@ Lisp Eval Emacs Lisp expression preceding point in the buffer, and displays the value in the echo area. When the result of an evaluation is an integer, it is displayed together with the value in other formats -(octal, hexadecimal, and character). +(octal, hexadecimal, and character if +@code{eval-expression-print-maximum-character} (see below) allows it). If @kbd{M-:} or @kbd{C-x C-e} is given a prefix argument, it inserts the value into the current buffer at point, rather than displaying it @@ -1493,8 +1494,10 @@ Lisp Eval is inserted together with its value in other formats (octal, hexadecimal, and character). Such a prefix argument also prevents abbreviation of the output according to the variables -@code{eval-expression-print-level} and @code{eval-expression-print-length} -(see below). +@code{eval-expression-print-level} and +@code{eval-expression-print-length} (see below). Similarly, a prefix +argument of @code{-1} overrides the effect of +@code{eval-expression-print-length}. @kindex C-M-x @r{(Emacs Lisp mode)} @findex eval-defun @@ -1524,6 +1527,7 @@ Lisp Eval @vindex eval-expression-print-level @vindex eval-expression-print-length +@vindex eval-expression-print-maximum-character @vindex eval-expression-debug-on-error The options @code{eval-expression-print-level} and @code{eval-expression-print-length} control the maximum depth and @@ -1533,6 +1537,8 @@ Lisp Eval printed in full. @code{eval-expression-debug-on-error} controls whether evaluation errors invoke the debugger when these commands are used; its default is @code{t}. +@code{eval-expression-print-maximum-character} prevents integers which +are larger than it from being displayed as characters. @node Lisp Interaction @section Lisp Interaction Buffers diff --git a/etc/NEWS b/etc/NEWS index e8f5b2e899..548d55d60d 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -344,6 +344,10 @@ for DNS-querying functions 'nslookup-host', 'dns-lookup-host', and 'run-dig'. Each function now accepts an optional name server argument interactively (with a prefix argument) and non-interactively. ++++ +** The new variable 'eval-expression-print-maximum-character' prevents +large integers from being displayed as characters. + * Editing Changes in Emacs 26.1 diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index c2fdba47a0..6c6fb92504 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1120,24 +1120,25 @@ elisp--eval-last-sexp include additional formats for integers \(octal, hexadecimal, and character)." (pcase-let* - ((`(,insert-value ,no-truncate ,char-print) + ((`(,insert-value ,no-truncate ,char-print-limit) (eval-expression-get-print-arguments eval-last-sexp-arg-internal))) ;; Setup the lexical environment if lexical-binding is enabled. (elisp--eval-last-sexp-print-value (eval (eval-sexp-add-defvars (elisp--preceding-sexp)) lexical-binding) - (if insert-value (current-buffer) t) no-truncate char-print))) + (if insert-value (current-buffer) t) no-truncate char-print-limit))) (defun elisp--eval-last-sexp-print-value - (value output &optional no-truncate char-print) + (value output &optional no-truncate char-print-limit) (let* ((unabbreviated (let ((print-length nil) (print-level nil)) (prin1-to-string value))) + (eval-expression-print-maximum-character char-print-limit) (print-length (unless no-truncate eval-expression-print-length)) (print-level (unless no-truncate eval-expression-print-level)) (beg (point)) end) (prog1 (prin1 value output) - (let ((str (and char-print (eval-expression-print-format value)))) + (let ((str (and char-print-limit (eval-expression-print-format value)))) (if str (princ str output))) (setq end (point)) (when (and (bufferp output) @@ -1175,14 +1176,17 @@ eval-sexp-add-defvars (defun eval-last-sexp (eval-last-sexp-arg-internal) "Evaluate sexp before point; print value in the echo area. -Interactively, with prefix argument, print output into current buffer. +Interactively, with a non `-' prefix argument, print output into +current buffer. -Normally, this function truncates long output according to the value -of the variables `eval-expression-print-length' and +Normally, this function truncates long output according to the +value of the variables `eval-expression-print-length' and `eval-expression-print-level'. With a prefix argument of zero, however, there is no such truncation. Such a prefix argument also causes integers to be printed in several additional formats -\(octal, hexadecimal, and character). +\(octal, hexadecimal, and character when the prefix argument is +-1 or the integer is `eval-expression-print-maximum-character' or +less). If `eval-expression-debug-on-error' is non-nil, which is the default, this command arranges for all errors to enter the debugger." diff --git a/lisp/simple.el b/lisp/simple.el index 68208118f1..be12c315c8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1454,15 +1454,24 @@ eval-expression-debug-on-error :type 'boolean :version "21.1") +(defcustom eval-expression-print-maximum-character 127 + "The largest integer that will be displayed as a character. +This affects printing by `eval-expression' (via +`eval-expression-print-format')." + :group 'lisp + :type 'integer + :version "26.1") + (defun eval-expression-print-format (value) "If VALUE in an integer, return a specially formatted string. This string will typically look like \" (#o1, #x1, ?\\C-a)\". If VALUE is not an integer, nil is returned. -This function is used by functions like `prin1' that display the -result of expression evaluation." +This function is used by commands like `eval-expression' that +display the result of expression evaluation." (when (integerp value) (let ((char-string (and (characterp value) + (<= value eval-expression-print-maximum-character) (char-displayable-p value) (prin1-char value)))) (if char-string @@ -1488,32 +1497,40 @@ read--expression (defun eval-expression-get-print-arguments (prefix-argument) "Get arguments for commands that print an expression result. -Returns a list (INSERT-VALUE NO-TRUNCATE CHAR-PRINT) +Returns a list (INSERT-VALUE NO-TRUNCATE CHAR-PRINT-LIMIT) based on PREFIX-ARG. This function determines the interpretation of the prefix argument for `eval-expression' and `eval-last-sexp'." (let ((num (prefix-numeric-value prefix-argument))) - (list (not (memq prefix-argument '(nil))) + (list (not (memq prefix-argument '(- nil))) (= num 0) - (cond ((not (memq prefix-argument '(0 nil))) nil) - (t t))))) + (cond ((not (memq prefix-argument '(0 -1 - nil))) nil) + ((= num -1) most-positive-fixnum) + (t eval-expression-print-maximum-character))))) ;; We define this, rather than making `eval' interactive, ;; for the sake of completion of names like eval-region, eval-buffer. -(defun eval-expression (exp &optional insert-value no-truncate char-print) +(defun eval-expression (exp &optional insert-value no-truncate char-print-limit) "Evaluate EXP and print value in the echo area. -When called interactively, read an Emacs Lisp expression and evaluate it. -Value is also consed on to front of the variable `values'. -If the resulting value is an integer, it will be printed in -several additional formats (octal, hexadecimal, and character). -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. - -Normally, this function truncates long output according to the value -of the variables `eval-expression-print-length' and -`eval-expression-print-level'. With a prefix argument of zero, -however, there is no such truncation. +When called interactively, read an Emacs Lisp expression and +evaluate it. Value is also consed on to front of the variable +`values'. Optional argument INSERT-VALUE non-nil (interactively, +with a non `-' prefix argument) means insert the result into the +current buffer instead of printing it in the echo area. + +Normally, this function truncates long output according to the +value of the variables `eval-expression-print-length' and +`eval-expression-print-level'. When NO-TRUNCATE is +non-nil (interactively, with a prefix argument of zero), however, +there is no such truncation. + +If the resulting value is an integer, and CHAR-PRINT-LIMIT is +non-nil (interactively, unless given a positive prefix argument) +it will be printed in several additional formats (octal, +hexadecimal, and character). The character format is only used +if the value is below CHAR-PRINT-LIMIT (interactively, if the +prefix argument is -1 or the value is below +`eval-expression-print-maximum-character'). Runs the hook `eval-expression-minibuffer-setup-hook' on entering the minibuffer. @@ -1539,11 +1556,12 @@ eval-expression (let ((print-length (unless no-truncate eval-expression-print-length)) (print-level (unless no-truncate eval-expression-print-level)) + (eval-expression-print-maximum-character char-print-limit) (deactivate-mark)) (let ((out (if insert-value (current-buffer) t))) (prog1 (prin1 (car values) out) - (let ((str (and char-print + (let ((str (and char-print-limit (eval-expression-print-format (car values))))) (when str (princ str out))))))) diff --git a/test/lisp/progmodes/elisp-mode-tests.el b/test/lisp/progmodes/elisp-mode-tests.el index 5edb590b1e..03ae8481ee 100644 --- a/test/lisp/progmodes/elisp-mode-tests.el +++ b/test/lisp/progmodes/elisp-mode-tests.el @@ -132,6 +132,54 @@ elisp--test-completions (call-interactively #'eval-last-sexp) (should (equal (current-message) "t"))))) +(ert-deftest eval-last-sexp-print-format-small-int () + (with-temp-buffer + (let ((current-prefix-arg '(4))) + (erase-buffer) (insert "?A") + (call-interactively #'eval-last-sexp) + (should (equal (buffer-string) "?A65"))) + (let ((current-prefix-arg 0)) + (erase-buffer) (insert "?A") + (call-interactively #'eval-last-sexp) + (should (equal (buffer-string) "?A65 (#o101, #x41, ?A)"))))) + +(ert-deftest eval-last-sexp-print-format-small-int-echo () + (skip-unless (not noninteractive)) + (with-temp-buffer + (let ((current-prefix-arg nil)) + (erase-buffer) (insert "?A") (message nil) + (call-interactively #'eval-last-sexp) + (should (equal (current-message) "65 (#o101, #x41, ?A)"))))) + +(ert-deftest eval-last-sexp-print-format-large-int () + (with-temp-buffer + (let ((eval-expression-print-maximum-character ?A)) + (let ((current-prefix-arg '(4))) + (erase-buffer) (insert "?B") + (call-interactively #'eval-last-sexp) + (should (equal (buffer-string) "?B66"))) + (let ((current-prefix-arg 0)) + (erase-buffer) (insert "?B") + (call-interactively #'eval-last-sexp) + (should (equal (buffer-string) "?B66 (#o102, #x42)"))) + (let ((current-prefix-arg -1)) + (erase-buffer) (insert "?B") + (call-interactively #'eval-last-sexp) + (should (equal (buffer-string) "?B66 (#o102, #x42, ?B)")))))) + +(ert-deftest eval-last-sexp-print-format-large-int-echo () + (skip-unless (not noninteractive)) + (with-temp-buffer + (let ((eval-expression-print-maximum-character ?A)) + (let ((current-prefix-arg nil)) + (erase-buffer) (insert "?B") (message nil) + (call-interactively #'eval-last-sexp) + (should (equal (current-message) "66 (#o102, #x42)"))) + (let ((current-prefix-arg '-)) + (erase-buffer) (insert "?B") (message nil) + (call-interactively #'eval-last-sexp) + (should (equal (current-message) "66 (#o102, #x42, ?B)")))))) + ;;; xref (defun xref-elisp-test-descr-to-target (xref) diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el index b74e28ccaf..180dcc0a20 100644 --- a/test/lisp/simple-tests.el +++ b/test/lisp/simple-tests.el @@ -396,5 +396,57 @@ simple-test-undo-with-switched-buffer (call-interactively #'eval-expression) (should (equal (current-message) "t")))))) +(ert-deftest eval-expression-print-format-small-int () + (with-temp-buffer + (cl-letf (((symbol-function 'read--expression) (lambda (&rest _) ?A))) + (let ((current-prefix-arg '(4))) + (erase-buffer) + (call-interactively #'eval-expression) + (should (equal (buffer-string) "65"))) + (let ((current-prefix-arg 0)) + (erase-buffer) + (call-interactively #'eval-expression) + (should (equal (buffer-string) "65 (#o101, #x41, ?A)")))))) + +(ert-deftest eval-expression-print-format-small-int-echo () + (skip-unless (not noninteractive)) + (with-temp-buffer + (cl-letf (((symbol-function 'read--expression) (lambda (&rest _) ?A))) + (let ((current-prefix-arg nil)) + (message nil) + (call-interactively #'eval-expression) + (should (equal (current-message) "65 (#o101, #x41, ?A)")))))) + +(ert-deftest eval-expression-print-format-large-int () + (with-temp-buffer + (cl-letf (((symbol-function 'read--expression) (lambda (&rest _) ?B)) + (eval-expression-print-maximum-character ?A)) + (let ((current-prefix-arg '(4))) + (erase-buffer) + (call-interactively #'eval-expression) + (should (equal (buffer-string) "66"))) + (let ((current-prefix-arg 0)) + (erase-buffer) + (call-interactively #'eval-expression) + (should (equal (buffer-string) "66 (#o102, #x42)"))) + (let ((current-prefix-arg -1)) + (erase-buffer) + (call-interactively #'eval-expression) + (should (equal (buffer-string) "66 (#o102, #x42, ?B)")))))) + +(ert-deftest eval-expression-print-format-large-int-echo () + (skip-unless (not noninteractive)) + (with-temp-buffer + (cl-letf (((symbol-function 'read--expression) (lambda (&rest _) ?B)) + (eval-expression-print-maximum-character ?A)) + (let ((current-prefix-arg nil)) + (message nil) + (call-interactively #'eval-expression) + (should (equal (current-message) "66 (#o102, #x42)"))) + (let ((current-prefix-arg '-)) + (message nil) + (call-interactively #'eval-expression) + (should (equal (current-message) "66 (#o102, #x42, ?B)")))))) + (provide 'simple-test) ;;; simple-test.el ends here -- 2.11.1 --=-=-=--