From 12587bbbc6477b48ab766ae43381120ce3cfcc9e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 13 Oct 2011 13:58:54 +0200 Subject: [PATCH] Fix the "C-x =" display of the character info for LRE, LRO, RLE, and RLO. lisp/simple.el (what-cursor-position): Fix the display of the character info for LRE, LRO, RLE, and RLO characters, by appending a PDF to them. --- lisp/ChangeLog | 5 +++++ lisp/simple.el | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1ec96318116..39f13eb8db8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-10-13 Eli Zaretskii + + * simple.el (what-cursor-position): Fix the display of the + character info for LRE, LRO, RLE, and RLO characters. + 2011-10-13 Stefan Monnier * emacs-lisp/timer.el (with-timeout): Make sure we cancel the timer diff --git a/lisp/simple.el b/lisp/simple.el index af6d855d9c0..6d0e7543549 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -1050,6 +1050,16 @@ In addition, with prefix argument, show details about that character in *Help* buffer. See also the command `describe-char'." (interactive "P") (let* ((char (following-char)) + ;; If the character is one of LRE, LRO, RLE, RLO, it will + ;; start a directional embedding, which could completely + ;; disrupt the rest of the line (e.g., RLO will display the + ;; rest of the line right-to-left). So we put an invisible + ;; PDF character after these characters, to end the + ;; embedding, which eliminates any effects on the rest of the + ;; line. + (pdf (if (memq char '(?\x202a ?\x202b ?\x202d ?\x202e)) + (propertize (string ?\x202c) 'invisible t) + "")) (beg (point-min)) (end (point-max)) (pos (point)) @@ -1109,18 +1119,18 @@ in *Help* buffer. See also the command `describe-char'." ;; We show the detailed information about CHAR. (describe-char (point))) (if (or (/= beg 1) (/= end (1+ total))) - (message "Char: %s %s point=%d of %d (%d%%) <%d-%d> column=%d%s" + (message "Char: %s%s %s point=%d of %d (%d%%) <%d-%d> column=%d%s" (if (< char 256) (single-key-description char) (buffer-substring-no-properties (point) (1+ (point)))) - encoding-msg pos total percent beg end col hscroll) - (message "Char: %s %s point=%d of %d (%d%%) column=%d%s" + pdf encoding-msg pos total percent beg end col hscroll) + (message "Char: %s%s %s point=%d of %d (%d%%) column=%d%s" (if enable-multibyte-characters (if (< char 128) (single-key-description char) (buffer-substring-no-properties (point) (1+ (point)))) (single-key-description char)) - encoding-msg pos total percent col hscroll)))))) + pdf encoding-msg pos total percent col hscroll)))))) ;; Initialize read-expression-map. It is defined at C level. (let ((m (make-sparse-keymap))) -- 2.39.2