Simplify the display of addresses by setting
`notmuch-show-address-simplication' to:

- 'full: Only the name component of the address, if present, is
  shown (the default),
- 'partial: Addresses are stripped of redundant information,
- 'none: Addresses are shown as-is.
---
 emacs/notmuch-show.el |   55 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el
index 9e5d72d..054aba1 100644
--- a/emacs/notmuch-show.el
+++ b/emacs/notmuch-show.el
@@ -26,6 +26,7 @@
 (require 'message)
 (require 'mm-decode)
 (require 'mailcap)
+(require 'mail-parse)
 
 (require 'notmuch-lib)
 (require 'notmuch-query)
@@ -82,6 +83,21 @@ any given message."
             notmuch-wash-elide-blank-lines
             notmuch-wash-excerpt-citations))
 
+(defcustom notmuch-show-address-simplification 'full
+  "How should addresses be displayed?
+
+Set `notmuch-show-address-simplication' to:
+
+- 'full: Only the name component of the address, if present, is
+  shown,
+- 'partial: Addresses are stripped of redundant information,
+- 'none: Addresses are shown as-is."
+  :group 'notmuch
+  :type '(choice
+         (const :tag "Full simplification" full)
+         (const :tag "Partial simplification" partial)
+         (const :tag "No simplification" none)))
+
 (defmacro with-current-notmuch-show-message (&rest body)
   "Evaluate body with current buffer set to the text of current message"
   `(save-excursion
@@ -198,12 +214,36 @@ any given message."
                                             'face 'notmuch-tag-face)
                                 ")"))))))
 
+(defun notmuch-show-clean-address (parsed-address)
+  "Prepare a single email address for display."
+  (let* ((address (car parsed-address))
+        (name (cdr parsed-address))
+        (displayed-name name))
+
+    ;; If the address is 'f...@bar.com <f...@bar.com>' then show just
+    ;; 'f...@bar.com'.
+    (when (string= displayed-name address)
+      (setq displayed-name nil))
+
+    (cond
+     ((eq notmuch-show-address-simplification 'full)
+      (if displayed-name
+         (propertize displayed-name 'help-echo address)
+       address))
+
+     ((eq notmuch-show-address-simplification 'partial)
+      (mail-header-make-address displayed-name address))
+
+     (t ;; All other settings, but mostly 'none.
+      (mail-header-make-address name address)))))
+
 (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)))
     (insert (notmuch-show-spaces-n depth)
-           (plist-get headers :From)
+           (notmuch-show-clean-address
+            (mail-header-parse-address (plist-get headers :From)))
            " ("
            date
            ") ("
@@ -214,7 +254,18 @@ message at DEPTH in the current thread."
 
 (defun notmuch-show-insert-header (header header-value)
   "Insert a single header."
-  (insert header ": " header-value "\n"))
+  (insert header ": "
+         (cond
+          ((or (string= "To" header)
+               (string= "Cc" header)
+               (string= "Bcc" header)
+               (string= "From" header))
+           (mapconcat 'notmuch-show-clean-address
+                      (mail-header-parse-addresses header-value)
+                      ", "))
+          (t
+           header-value))
+         "\n"))
 
 (defun notmuch-show-insert-headers (headers)
   "Insert the headers of the current message."
-- 
1.7.2.3

_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to