all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Vasilij Schneidermann <v.schneidermann@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 27122@debbugs.gnu.org
Subject: bug#27122: 26.0.50; [PATCH] Add customizable to display unprintables as hex
Date: Thu, 1 Jun 2017 19:05:09 +0200	[thread overview]
Message-ID: <20170601170509.gqdthhs2yfgzit3g@odonien.localdomain> (raw)
In-Reply-To: <83lgpeeo2k.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 527 bytes --]

> Yes, I think test/manual/redisplay-testsuite.el is where the
> additional tests should go.

OK, I've added a test there that allows you to toggle between both
representations.

> Please end each sentence in the commit log message with a period, and
> please mention the bug number there.  Please also add a short log
> entry for etc/NEWS.

Fixed.  I'm not sure what you mean by the NEWS entry though, the patch
has four lines in etc/NEWS describing the new feature.  Are you possibly
referring to a different format or file?

[-- Attachment #2: 0001-Add-customizable-to-display-raw-bytes-as-hex.patch --]
[-- Type: text/x-diff, Size: 5648 bytes --]

From 7c66dff5dc35e663dd3d39e2b30205924fa262c7 Mon Sep 17 00:00:00 2001
From: Vasilij Schneidermann <mail@vasilij.de>
Date: Sun, 28 May 2017 22:31:34 +0200
Subject: [PATCH] Add customizable to display raw bytes as hex

* src/xdisp.c (get_next_display_element): Dispatch used format string
  for unprintables based on new display-raw-bytes-as-hex
  variable.
  (display-raw-bytes-as-hex): New variable.
* doc/emacs/display.texi: Document the new variable.
---
 doc/emacs/display.texi             |  6 ++++++
 etc/NEWS                           |  4 ++++
 lisp/cus-start.el                  |  1 +
 src/xdisp.c                        | 16 +++++++++++++---
 test/manual/redisplay-testsuite.el | 27 ++++++++++++++++++++++++++-
 5 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index d07913cefb..edcb575722 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1756,3 +1756,9 @@ Display Custom
 in text that is hard to read.  Call the function
 @code{tty-suppress-bold-inverse-default-colors} with a non-@code{nil}
 argument to suppress the effect of bold-face in this case.
+
+@vindex display-raw-bytes-as-hex
+  Raw bytes are displayed in octal format by default, for example a
+byte with a decimal value of 128 is displayed as @code{\200}.  To
+change display to the hexadecimal format of @code{\x80}, set the
+variable @code{display-raw-bytes-as-hex} to @code{t}.
diff --git a/etc/NEWS b/etc/NEWS
index 60066b7c9f..ee941624d8 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -363,6 +363,10 @@ large integers from being displayed as characters.
 ** Two new commands for finding the source code of Emacs Lisp
 libraries: 'find-library-other-window' and 'find-library-other-frame'.
 
++++
+** The new variable 'display-raw-bytes-as-hex' allows to change the
+display of raw bytes from octal to hex.
+
 \f
 * Editing Changes in Emacs 26.1
 
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 4253d40b75..744fe7f69e 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -583,6 +583,7 @@ minibuffer-prompt-properties--setter
 		       (const :tag "Fit (t)" :value t)
 		       (const :tag "Grow only" :value grow-only))
 	      "25.1")
+	     (display-raw-bytes-as-hex display boolean "26.1")
 	     ;; xfaces.c
 	     (scalable-fonts-allowed display boolean "22.1")
 	     ;; xfns.c
diff --git a/src/xdisp.c b/src/xdisp.c
index ddb26b8def..10124d6f3d 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7044,7 +7044,7 @@ get_next_display_element (struct it *it)
 	     translated too.
 
 	     Non-printable characters and raw-byte characters are also
-	     translated to octal form.  */
+	     translated to octal or hexadecimal form.  */
 	  if (((c < ' ' || c == 127) /* ASCII control chars.  */
 	       ? (it->area != TEXT_AREA
 		  /* In mode line, treat \n, \t like other crl chars.  */
@@ -7151,9 +7151,12 @@ get_next_display_element (struct it *it)
 		int len, i;
 
 		if (CHAR_BYTE8_P (c))
-		  /* Display \200 instead of \17777600.  */
+		  /* Display \200 or \x80 instead of \17777600.  */
 		  c = CHAR_TO_BYTE8 (c);
-		len = sprintf (str, "%03o", c + 0u);
+		const char *format_string = display_raw_bytes_as_hex
+					    ? "x%02x"
+					    : "%03o";
+		len = sprintf (str, format_string, c + 0u);
 
 		XSETINT (it->ctl_chars[0], escape_glyph);
 		for (i = 0; i < len; i++)
@@ -32209,6 +32212,13 @@ display table takes effect; in this case, Emacs does not consult
   /* Initialize to t, since we need to disable reordering until
      loadup.el successfully loads charprop.el.  */
   redisplay__inhibit_bidi = true;
+
+  DEFVAR_BOOL ("display-raw-bytes-as-hex", display_raw_bytes_as_hex,
+    doc: /* Non-nil means display raw bytes in hexadecimal format.
+The default is to use octal format (\200) whereas hexadecimal (\x80)
+may be more familar to users.  */);
+  display_raw_bytes_as_hex = false;
+
 }
 
 
diff --git a/test/manual/redisplay-testsuite.el b/test/manual/redisplay-testsuite.el
index 694d55ab1d..2175cbab1b 100644
--- a/test/manual/redisplay-testsuite.el
+++ b/test/manual/redisplay-testsuite.el
@@ -34,7 +34,8 @@ test-insert-overlay
     (setq overlay (make-overlay opoint (point)))
     (while props
       (overlay-put overlay (car props) (cadr props))
-      (setq props (cddr props)))))
+      (setq props (cddr props)))
+    overlay))
 
 (defun test-redisplay-1 ()
   (insert "Test 1: Displaying adjacent and overlapping overlays:\n\n")
@@ -293,6 +294,29 @@ test-redisplay-4
 
   (insert "\n"))
 
+(defvar test-redisplay-5-expected-overlay nil)
+(defvar test-redisplay-5-result-overlay nil)
+
+(defun test-redisplay-5-toggle (_event)
+  (interactive "e")
+  (setq display-raw-bytes-as-hex (not display-raw-bytes-as-hex))
+  (let ((label (if display-raw-bytes-as-hex "\\x80" "\\200")))
+    (overlay-put test-redisplay-5-expected-overlay 'display
+                 (propertize label 'face 'escape-glyph))))
+
+(defun test-redisplay-5 ()
+  (insert "Test 5: Display of raw bytes:\n\n")
+  (insert "  Expected: ")
+  (setq test-redisplay-5-expected-overlay
+        (test-insert-overlay " " 'display
+                             (propertize "\\200" 'face 'escape-glyph)))
+  (insert "\n    Result: ")
+  (setq test-redisplay-5-result-overlay
+        (test-insert-overlay " " 'display "\200"))
+  (insert "\n\n")
+  (insert-button "Toggle between octal and hex display"
+                 'action 'test-redisplay-5-toggle))
+
 
 (defun test-redisplay ()
   (interactive)
@@ -309,5 +333,6 @@ test-redisplay
     (test-redisplay-2)
     (test-redisplay-3)
     (test-redisplay-4)
+    (test-redisplay-5)
     (goto-char (point-min))))
 
-- 
2.13.0


  reply	other threads:[~2017-06-01 17:05 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-28 20:42 bug#27122: 26.0.50; [PATCH] Add customizable to display unprintables as hex Vasilij Schneidermann
2017-05-29  2:33 ` Eli Zaretskii
2017-05-29  6:28   ` Vasilij Schneidermann
2017-05-29 18:46     ` Robert Cochran
2017-05-29 19:52       ` Eli Zaretskii
2017-05-29 20:20         ` Vasilij Schneidermann
2017-05-29 23:55           ` Robert Cochran
2017-05-30  0:11             ` npostavs
2017-05-30  0:47               ` Robert Cochran
2017-05-29 19:39     ` Eli Zaretskii
2017-05-29 20:15       ` Vasilij Schneidermann
2017-05-30  6:24         ` Eli Zaretskii
2017-05-30  8:16           ` Vasilij Schneidermann
2017-05-30  8:38             ` Eli Zaretskii
2017-06-01 17:05               ` Vasilij Schneidermann [this message]
2017-06-01 18:19                 ` Eli Zaretskii
2017-05-30 12:06           ` npostavs

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

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

  git send-email \
    --in-reply-to=20170601170509.gqdthhs2yfgzit3g@odonien.localdomain \
    --to=v.schneidermann@gmail.com \
    --cc=27122@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.