Emacs: Ensure left-to-right display for message headers

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.
This commit is contained in:
Teemu Likonen 2020-08-07 07:46:41 +03:00 committed by David Bremner
parent f5ae8040b3
commit e3fd546ad7

View file

@ -466,10 +466,16 @@ unchanged ADDRESS if parsing fails."
(defun notmuch-show-insert-headerline (headers date tags depth) (defun notmuch-show-insert-headerline (headers date tags depth)
"Insert a notmuch style headerline based on HEADERS for a "Insert a notmuch style headerline based on HEADERS for a
message at DEPTH in the current thread." 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)) (insert (notmuch-show-spaces-n (* notmuch-show-indent-messages-width depth))
(notmuch-sanitize from
(notmuch-show-clean-address (plist-get headers :From)))
" (" " ("
date date
") (" ") ("