Emacs: Ensure left-to-right display for message headers
authorTeemu Likonen <tlikonen@iki.fi>
Fri, 7 Aug 2020 04:46:41 +0000 (07:46 +0300)
committerDavid Bremner <david@tethera.net>
Sat, 8 Aug 2020 19:18:23 +0000 (16:18 -0300)
In notmuch-show buffer insert invisible U+200E LEFT-TO-RIGHT MARK
character at the beginning of message header paragraph if the From
header contains a right-to-left character. This ensures that the
header paragraph is always rendered in left-to-right mode.

See Emacs Lisp reference manual section "(elisp) Bidirectional
Display" for more info.

emacs/notmuch-show.el

index c917046614724e4fe3a6e230a6f79aaa5ddafdb8..0eb27e338c30f093607fbbbad73899e108e32b8a 100644 (file)
@@ -466,10 +466,16 @@ unchanged ADDRESS if parsing fails."
 (defun notmuch-show-insert-headerline (headers date tags depth)
   "Insert a notmuch style headerline based on HEADERS for a
 message at DEPTH in the current thread."
-  (let ((start (point)))
+  (let ((start (point))
+       (from (notmuch-sanitize
+              (notmuch-show-clean-address (plist-get headers :From)))))
+    (when (string-match "\\cR" from)
+      ;; If the From header has a right-to-left character add
+      ;; invisible U+200E LEFT-TO-RIGHT MARK character which forces
+      ;; the header paragraph as left-to-right text.
+      (insert (propertize (string ?\x200e) 'invisible t)))
     (insert (notmuch-show-spaces-n (* notmuch-show-indent-messages-width depth))
-           (notmuch-sanitize
-            (notmuch-show-clean-address (plist-get headers :From)))
+           from
            " ("
            date
            ") ("