diff --git a/modules/email/mu4e/config.el b/modules/email/mu4e/config.el index 20747d164..f11cd4632 100644 --- a/modules/email/mu4e/config.el +++ b/modules/email/mu4e/config.el @@ -192,7 +192,12 @@ Acts like a singular `mu4e-view-save-attachments', without the saving." (dolist (part parts) (let ((fname (cdr (assoc 'filename (assoc "attachment" (cdr part)))))) (when fname - (push (cons fname part) files)))) + (push (cons (if (featurep 'all-the-icons) + (concat (all-the-icons-icon-for-file fname) + " " fname) + fname) + part) + files)))) (if files (cdr (assoc (completing-read "Select attachment: " (mapcar #'car files)) files)) @@ -205,13 +210,28 @@ Acts like a singular `mu4e-view-save-attachments', without the saving." (mu4e~view-mime-part-to-temp-file (cdr (+mu4e-view-select-attachment))))) (defun +mu4e-view-select-part () - (let ((parts (mu4e~view-gather-mime-parts)) labeledparts) + (let ((parts (mu4e~view-gather-mime-parts)) partinfo labeledparts maxfnamelen fnamefmt) (dolist (part parts) - (push (cons (concat (propertize (format "%-2s " (car part)) 'face '(bold font-lock-type-face)) - (or (cdr (assoc 'filename (assoc "attachment" (cdr part)))) - (propertize "unnamed" 'face '(italic font-lock-doc-face))) - (propertize (format " [%s]" (caaddr part)) 'face 'font-lock-constant-face)) - part) + (push (list :index (car part) + :mimetype (if (string= "text/plain" (caaddr part)) + (format "%s (%s)" + (caaddr part) + (alist-get 'charset (cdaddr part))) + (caaddr part)) + :type (car (nth 5 part)) + :filename (cdr (assoc 'filename (assoc "attachment" (cdr part)))) + :part part) + partinfo)) + (setq maxfnamelen (apply #'max 7 (mapcar (lambda (i) (length (plist-get i :filename))) partinfo)) + fnamefmt (format " %%-%ds " maxfnamelen)) + (dolist (pinfo partinfo) + (push (cons (concat (propertize (format "%-2s " (plist-get pinfo :index)) 'face '(bold font-lock-type-face)) + (when (featurep 'all-the-icons) + (all-the-icons-icon-for-file (or (plist-get pinfo :filename) ""))) + (format fnamefmt (or (plist-get pinfo :filename) + (propertize (plist-get pinfo :type) 'face '(italic font-lock-doc-face)))) + (propertize (plist-get pinfo :mimetype) 'face 'font-lock-constant-face)) + (plist-get pinfo :part)) labeledparts)) (cdr (assoc (completing-read "Select part: " (mapcar #'car labeledparts)) labeledparts))))