feat(mu4e): use file icons in part/attachment pick

Along with some other improvements and refactoring to the part picker
for a generally nicer experience, improved readability, and more
flexibility.
This commit is contained in:
TEC 2021-09-11 23:08:59 +08:00
parent ea53ab9ef1
commit b05d8e8082
No known key found for this signature in database
GPG key ID: 779591AFDB81F06C

View file

@ -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))))