mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-01-03 15:21:41 +01:00
emacs: create patch filename from subject for inline patch fake parts
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'. If the user has notmuch-wash-convert-inline-patch-to-part hook enabled in notmuch-show-insert-text/plain-hook, this will change the old default filename of "inline patch" in fake parts: [ inline patch: inline patch (as text/x-diff) ] into, for example: [ 0002-emacs-create-patch-filename-from-subject-for-inline.patch: inline patch (as text/x-diff) ] which is typically the same filename the sender had if he was using 'git format-patch' and 'git send-email'. Signed-off-by: Jani Nikula <jani@nikula.org>
This commit is contained in:
parent
d5d39a92f1
commit
f893d31762
1 changed files with 42 additions and 1 deletions
|
@ -290,6 +290,44 @@ When doing so, maintaining citation leaders in the wrapped text."
|
|||
|
||||
(defvar diff-file-header-re) ; From `diff-mode.el'.
|
||||
|
||||
(defun notmuch-wash-subject-to-filename (subject &optional maxlen)
|
||||
"Convert a mail SUBJECT into a filename.
|
||||
|
||||
The resulting filename is similar to the names generated by \"git
|
||||
format-patch\", without the leading patch sequence number
|
||||
\"0001-\" and \".patch\" extension. Any leading \"[PREFIX]\"
|
||||
style strings are removed prior to conversion.
|
||||
|
||||
Optional argument MAXLEN is the maximum length of the resulting
|
||||
filename, before trimming any trailing . and - characters."
|
||||
(let* ((s (replace-regexp-in-string "^ *\\(\\[[^]]*\\] *\\)*" "" subject))
|
||||
(s (replace-regexp-in-string "[^A-Za-z0-9._]+" "-" s))
|
||||
(s (replace-regexp-in-string "\\.+" "." s))
|
||||
(s (if maxlen (substring s 0 (min (length s) maxlen)) s))
|
||||
(s (replace-regexp-in-string "[.-]*$" "" s)))
|
||||
s))
|
||||
|
||||
(defun notmuch-wash-subject-to-patch-sequence-number (subject)
|
||||
"Convert a patch mail SUBJECT into a patch sequence number.
|
||||
|
||||
Return the patch sequence number N from the last \"[PATCH N/M]\"
|
||||
style prefix in SUBJECT, or nil if such a prefix can't be found."
|
||||
(when (string-match
|
||||
"^ *\\(\\[[^]]*\\] *\\)*\\[[^]]*?\\([0-9]+\\)/[0-9]+[^]]*\\].*"
|
||||
subject)
|
||||
(string-to-number (substring subject (match-beginning 2) (match-end 2)))))
|
||||
|
||||
(defun notmuch-wash-subject-to-patch-filename (subject)
|
||||
"Convert a patch mail SUBJECT into a filename.
|
||||
|
||||
The resulting filename is similar to the names generated by \"git
|
||||
format-patch\". If the patch mail was generated and sent using
|
||||
\"git format-patch/send-email\", this should re-create the
|
||||
original filename the sender had."
|
||||
(format "%04d-%s.patch"
|
||||
(or (notmuch-wash-subject-to-patch-sequence-number subject) 1)
|
||||
(notmuch-wash-subject-to-filename subject 52)))
|
||||
|
||||
(defun notmuch-wash-convert-inline-patch-to-part (msg depth)
|
||||
"Convert an inline patch into a fake 'text/x-diff' attachment.
|
||||
|
||||
|
@ -316,7 +354,10 @@ for error."
|
|||
(setq part (plist-put part :content-type "inline-patch-fake-part"))
|
||||
(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-wash-subject-to-patch-filename
|
||||
(plist-get
|
||||
(plist-get msg :headers) :Subject))))
|
||||
(delete-region (point-min) (point-max))
|
||||
(notmuch-show-insert-bodypart nil part depth))))))
|
||||
|
||||
|
|
Loading…
Reference in a new issue