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:
parent
ea53ab9ef1
commit
b05d8e8082
1 changed files with 27 additions and 7 deletions
|
@ -192,7 +192,12 @@ Acts like a singular `mu4e-view-save-attachments', without the saving."
|
||||||
(dolist (part parts)
|
(dolist (part parts)
|
||||||
(let ((fname (cdr (assoc 'filename (assoc "attachment" (cdr part))))))
|
(let ((fname (cdr (assoc 'filename (assoc "attachment" (cdr part))))))
|
||||||
(when fname
|
(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
|
(if files
|
||||||
(cdr (assoc (completing-read "Select attachment: " (mapcar #'car files))
|
(cdr (assoc (completing-read "Select attachment: " (mapcar #'car files))
|
||||||
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)))))
|
(mu4e~view-mime-part-to-temp-file (cdr (+mu4e-view-select-attachment)))))
|
||||||
|
|
||||||
(defun +mu4e-view-select-part ()
|
(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)
|
(dolist (part parts)
|
||||||
(push (cons (concat (propertize (format "%-2s " (car part)) 'face '(bold font-lock-type-face))
|
(push (list :index (car part)
|
||||||
(or (cdr (assoc 'filename (assoc "attachment" (cdr part))))
|
:mimetype (if (string= "text/plain" (caaddr part))
|
||||||
(propertize "unnamed" 'face '(italic font-lock-doc-face)))
|
(format "%s (%s)"
|
||||||
(propertize (format " [%s]" (caaddr part)) 'face 'font-lock-constant-face))
|
(caaddr part)
|
||||||
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))
|
labeledparts))
|
||||||
(cdr (assoc (completing-read "Select part: " (mapcar #'car labeledparts))
|
(cdr (assoc (completing-read "Select part: " (mapcar #'car labeledparts))
|
||||||
labeledparts))))
|
labeledparts))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue