[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#44155: Print integers as characters
From: |
Juri Linkov |
Subject: |
bug#44155: Print integers as characters |
Date: |
Thu, 29 Oct 2020 23:00:48 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) |
>> >> The existing 'prin1-char' used as a reference implementation
>> >> doesn't print integers like 4194176 as characters, so the patch
>> >> does the same.
>> >
>> > I don't think it's right, FWIW. Displaying something like \100 would
>> > be better, IMO.
>>
>> Sorry, I don't understand why 4194176 could be printed as \100.
>
> I meant \200, sorry. That's the raw byte that 4194176 stands for.
OK, in this patch the condition !CHAR_BYTE8_P(c) is removed, so
it prints \200:
diff --git a/src/print.c b/src/print.c
index 53aa353769..20841eba61 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1908,8 +1908,31 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun,
bool escapeflag)
{
case_Lisp_Int:
{
- int len = sprintf (buf, "%"pI"d", XFIXNUM (obj));
- strout (buf, len, len, printcharfun);
+ int c;
+ intmax_t i;
+
+ if (EQ (Vinteger_output_format, Qt) && CHARACTERP (obj)
+ && (c = XFIXNUM (obj)))
+ {
+ printchar ('?', printcharfun);
+ if (escapeflag
+ && (c == ';' || c == '(' || c == ')' || c == '{' || c == '}'
+ || c == '[' || c == ']' || c == '\"' || c == '\'' || c ==
'\\'))
+ printchar ('\\', printcharfun);
+ printchar (c, printcharfun);
+ }
+ else if (INTEGERP (Vinteger_output_format)
+ && integer_to_intmax (Vinteger_output_format, &i)
+ && i == 16 && !NILP (Fnatnump (obj)))
+ {
+ int len = sprintf (buf, "#x%"pI"x", (EMACS_UINT) XFIXNUM (obj));
+ strout (buf, len, len, printcharfun);
+ }
+ else
+ {
+ int len = sprintf (buf, "%"pI"d", XFIXNUM (obj));
+ strout (buf, len, len, printcharfun);
+ }
}
break;
@@ -2247,6 +2270,13 @@ syms_of_print (void)
that represents the number without losing information. */);
Vfloat_output_format = Qnil;
+ DEFVAR_LISP ("integer-output-format", Vinteger_output_format,
+ doc: /* The format used to print integers.
+When t, print characters from integers that represent a character.
+When a number 16, print non-negative integers in the hexadecimal format.
+Otherwise, by default print integers in the decimal format. */);
+ Vinteger_output_format = Qnil;
+
DEFVAR_LISP ("print-length", Vprint_length,
doc: /* Maximum length of list to print before abbreviating.
A value of nil means no limit. See also `eval-expression-print-length'. */);
- bug#44155: Print integers as characters, (continued)
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/23
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/23
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/24
- bug#44155: Print integers as characters, Eli Zaretskii, 2020/10/25
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/25
- bug#44155: Print integers as characters, Eli Zaretskii, 2020/10/25
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/27
- bug#44155: Print integers as characters, Eli Zaretskii, 2020/10/28
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/28
- bug#44155: Print integers as characters, Eli Zaretskii, 2020/10/29
- bug#44155: Print integers as characters,
Juri Linkov <=
- bug#44155: Print integers as characters, Eli Zaretskii, 2020/10/30
- bug#44155: Print integers as characters, Juri Linkov, 2020/10/31
- bug#44155: Print integers as characters, Glenn Morris, 2020/10/31
- bug#43866: 26.3; italian postfix additions, Richard Stallman, 2020/10/14
- bug#43866: 26.3; italian postfix additions, Richard Stallman, 2020/10/14
- bug#43866: 26.3; italian postfix additions, Juri Linkov, 2020/10/14
- bug#43866: 26.3; italian postfix additions, Robert Pluim, 2020/10/14
- bug#43866: 26.3; italian postfix additions, Richard Stallman, 2020/10/14
- bug#43866: 26.3; italian postfix additions, Eli Zaretskii, 2020/10/14
bug#43866: 26.3; italian postfix additions, Mattias EngdegÄrd, 2020/10/08