Use the mail subject line for creating a descriptive filename for the wash generated inline patch fake parts. The names are similar to the ones created by 'git format-patch', just without the leading numbers. Signed-off-by: Jani Nikula <jani@nikula.org> --- I know notmuch-subject-to-patch-filename is totally un-lispy. Suggestions welcome on how to make it lispy and keep it somewhat readable. If we later want to have a '>' counterpart to '|' to save messages to files rather than pipe, then this could be generalized and re-used for creating the suggested filename for that. I don't even use the notmuch-wash-convert-inline-patch-to-part option that much, but having it suggest "inline patch" as filename is just ugly... --- emacs/notmuch-wash.el | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletions(-) diff --git a/emacs/notmuch-wash.el b/emacs/notmuch-wash.el index 1f420b2..755d64a 100644 --- a/emacs/notmuch-wash.el +++ b/emacs/notmuch-wash.el @@ -290,6 +290,17 @@ When doing so, maintaining citation leaders in the wrapped text." (defvar diff-file-header-re) ; From `diff-mode.el'. +(defun notmuch-subject-to-patch-filename (str) + "Convert a typical patch mail subject line into a suitable filename." + (let ((s str)) + (setq s (replace-regexp-in-string "^ *\\(\\[[^]]*\\]\\)? *" "" s)) + (setq s (replace-regexp-in-string "[. ]*$" "" s)) + (setq s (replace-regexp-in-string "[^A-Za-z0-9._-]+" "-" s)) + (setq s (replace-regexp-in-string "\\.+" "." s)) + (when (> (length s) 52) + (setq s (substring s 0 52))) + (concat s ".patch"))) + (defun notmuch-wash-convert-inline-patch-to-part (msg depth) "Convert an inline patch into a fake 'text/x-diff' attachment. @@ -316,7 +327,10 @@ for error." (setq part (plist-put part :content-type "text/x-diff")) (setq part (plist-put part :content (buffer-string))) (setq part (plist-put part :id -1)) - (setq part (plist-put part :filename "inline patch")) + (setq part (plist-put part :filename + (notmuch-subject-to-patch-filename + (plist-get + (plist-get msg :headers) :Subject)))) (delete-region (point-min) (point-max)) (notmuch-show-insert-bodypart nil part depth)))))) -- 1.7.5.4