From: David Edmondson Date: Sat, 8 Sep 2018 21:40:40 +0000 (+0100) Subject: emacs: Optionally check for missing attachments in outgoing messages X-Git-Tag: archive/debian/0.29_rc0-1~118 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=1aae6daef7ffa1f0f066d806a22a7dffe9aad64b emacs: Optionally check for missing attachments in outgoing messages Query the user if the message text indicates that an attachment is expected but no MML referencing an attachment is found. This is not enabled by default - see the documentation for `notmuch-mua-attachment-check'. --- diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el index e205fa4c..708db248 100644 --- a/emacs/notmuch-mua.el +++ b/emacs/notmuch-mua.el @@ -115,8 +115,45 @@ multiple parts get a header." (function :tag "Other")) :group 'notmuch-reply) +(defcustom notmuch-mua-attachment-regexp + "\\b\\(attache\?ment\\|attached\\|attach\\|pi[èe]ce\s+jointe?\\)\\b" + "Message body text indicating that an attachment is expected. + +This is not used unless `notmuch-mua-attachment-check' is added +to `notmuch-mua-send-hook'.") + ;; +(defun notmuch-mua-attachment-check () + "Signal an error if the message text indicates that an +attachment is expected but no MML referencing an attachment is +found. + +Typically this is added to `notmuch-mua-send-hook'." + (when (and + ;; When the message mentions attachment... + (save-excursion + (message-goto-body) + (loop while (re-search-forward notmuch-mua-attachment-regexp (point-max) t) + ;; For every instance of the "attachment" string + ;; found, examine the text properties. If the text + ;; has either a `face' or `syntax-table' property + ;; then it is quoted text and should *not* cause the + ;; user to be asked about a missing attachment. + if (let ((props (text-properties-at (match-beginning 0)))) + (not (or (memq 'syntax-table props) + (memq 'face props)))) + return t + finally return nil)) + ;; ...but doesn't have a part with a filename... + (save-excursion + (message-goto-body) + (not (re-search-forward "^<#part [^>]*filename=" nil t))) + ;; ...and that's not okay... + (not (y-or-n-p "Attachment mentioned, but no attachment - is that okay?"))) + ;; ...signal an error. + (error "Missing attachment"))) + (defun notmuch-mua-get-switch-function () "Get a switch function according to `notmuch-mua-compose-in'." (cond ((eq notmuch-mua-compose-in 'current-window)