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'.
This commit is contained in:
David Edmondson 2018-09-08 22:40:40 +01:00 committed by David Bremner
parent d25dcc589c
commit 1aae6daef7

View file

@ -115,8 +115,45 @@ multiple parts get a header."
(function :tag "Other")) (function :tag "Other"))
:group 'notmuch-reply) :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 () (defun notmuch-mua-get-switch-function ()
"Get a switch function according to `notmuch-mua-compose-in'." "Get a switch function according to `notmuch-mua-compose-in'."
(cond ((eq notmuch-mua-compose-in 'current-window) (cond ((eq notmuch-mua-compose-in 'current-window)