]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-mua.el
emacs: limit search for attachment to stop at first mime-part
[notmuch] / emacs / notmuch-mua.el
index 708db2487fe519cda6effe05b5bd418101bef172..76572b87866172d078123052553746ddb5c109ae 100644 (file)
@@ -28,6 +28,7 @@
 (require 'notmuch-lib)
 (require 'notmuch-address)
 (require 'notmuch-draft)
+(require 'notmuch-message)
 
 (eval-when-compile (require 'cl))
 
@@ -120,7 +121,9 @@ multiple parts get a header."
   "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'.")
+to `notmuch-mua-send-hook'."
+  :type 'regexp
+  :group 'notmuch-send)
 
 ;;
 
@@ -134,17 +137,20 @@ Typically this is added to `notmuch-mua-send-hook'."
         ;; 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))
+          ;; Limit search from reaching other possible parts of the message
+          (let ((search-limit (search-forward "\n<#" nil t)))
+            (message-goto-body)
+            (loop while (re-search-forward notmuch-mua-attachment-regexp search-limit 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)
@@ -259,6 +265,11 @@ Typically this is added to `notmuch-mua-send-hook'."
                            (notmuch-headers-plist-to-alist reply-headers)
                            nil (notmuch-mua-get-switch-function))))
 
+      ;; Create a buffer-local queue for tag changes triggered when sending the reply
+      (when notmuch-message-replied-tags
+       (setq-local notmuch-message-queued-tag-changes
+                   (list (cons query-string notmuch-message-replied-tags))))
+
       ;; Insert the message body - but put it in front of the signature
       ;; if one is present, and after any other content
       ;; message*setup-hooks may have added to the message body already.
@@ -470,8 +481,10 @@ the From: address."
   (let* ((other-headers
          (when (or prompt-for-sender notmuch-always-prompt-for-sender)
            (list (cons 'From (notmuch-mua-prompt-for-sender)))))
-        forward-subject) ;; Comes from the first message and is
+        forward-subject  ;; Comes from the first message and is
                          ;; applied later.
+        forward-references ;; List of accumulated message-references of forwarded messages
+        forward-queries) ;; List of corresponding message-query
 
     ;; Generate the template for the outgoing message.
     (notmuch-mua-mail nil "" other-headers nil (notmuch-mua-get-switch-function))
@@ -489,7 +502,9 @@ the From: address."
                  ;; Because we process the messages in reverse order,
                  ;; always generate a forwarded subject, then use the
                  ;; last (i.e. first) one.
-                 (setq forward-subject (message-make-forward-subject)))
+                 (setq forward-subject (message-make-forward-subject))
+                 (push (message-fetch-field "Message-ID") forward-references)
+                 (push id forward-queries))
                ;; Make a copy ready to be forwarded in the
                ;; composition buffer.
                (message-forward-make-body temp-buffer)
@@ -503,7 +518,18 @@ the From: address."
       (save-restriction
        (message-narrow-to-headers)
        (message-remove-header "Subject")
-       (message-add-header (concat "Subject: " forward-subject)))
+       (message-add-header (concat "Subject: " forward-subject))
+       (message-remove-header "References")
+       (message-add-header (concat "References: "
+                                   (mapconcat 'identity forward-references " "))))
+
+      ;; Create a buffer-local queue for tag changes triggered when sending the message
+      (when notmuch-message-forwarded-tags
+       (setq-local notmuch-message-queued-tag-changes
+                   (loop for id in forward-queries
+                         collect
+                         (cons id
+                               notmuch-message-forwarded-tags))))
 
       ;; `message-forward-make-body' shows the User-agent header.  Hide
       ;; it again.