Package: mutt
Version: 1.5.17-2
Severity: wishlist
Tags: patch

Hi,

a patch which is maintained in the mutt-ng svn repository at [1] 
includes a very nice little feature which warns someone if he wants to
send an attachment but does not attach it. It is better as the config
hack described in the mutt wiki because it does not depend
on a sendmail-using mutt, so it can be used with the integrated smtp
engine.

It would be cool if this could be integrated into mutt-patched.
I used the attached file to patch latest mutt 1.5.17-2 deb sources with
this patch for personal use (it needed some changes to apply in line
with the debian patches).

Best Regards,
Patrick

[1] http://bereshit.synflood.at/svn/mutt-patches/trunk
 

Index: mutt-1.5.17/mutt.h
===================================================================
--- mutt-1.5.17.orig/mutt.h	2008-01-07 13:25:09.345374710 +0100
+++ mutt-1.5.17/mutt.h	2008-01-07 13:25:14.681386246 +0100
@@ -281,6 +281,7 @@
 enum
 {
   OPT_ABORT,
+  OPT_ATTACH,
   OPT_BOUNCE,
   OPT_COPY,
   OPT_DELETE,
Index: mutt-1.5.17/attach.h
===================================================================
--- mutt-1.5.17.orig/attach.h	2008-01-07 13:24:48.057328733 +0100
+++ mutt-1.5.17/attach.h	2008-01-07 13:25:14.681386246 +0100
@@ -53,4 +53,8 @@
 void mutt_attach_forward (FILE *, HEADER *, ATTACHPTR **, short, BODY *);
 void mutt_attach_reply (FILE *, HEADER *, ATTACHPTR **, short, BODY *, int);
 
+/* this checks whether at least one text line matches
+ * AttachRemindRegexp and returns 1 if so and 0 otherwise */
+int mutt_attach_check (HEADER* hdr);
+
 #endif /* _ATTACH_H_ */
Index: mutt-1.5.17/mutt_regex.h
===================================================================
--- mutt-1.5.17.orig/mutt_regex.h	2008-01-07 13:24:47.885328362 +0100
+++ mutt-1.5.17/mutt_regex.h	2008-01-07 13:25:56.981477835 +0100
@@ -51,5 +51,6 @@
 WHERE REGEXP ReplyRegexp;
 WHERE REGEXP Smileys;
 WHERE REGEXP GecosMask;
+WHERE REGEXP AttachRemindRegexp;
 
 #endif /* MUTT_REGEX_H */
Index: mutt-1.5.17/init.h
===================================================================
--- mutt-1.5.17.orig/init.h	2008-01-07 13:25:09.341374701 +0100
+++ mutt-1.5.17/init.h	2008-01-07 13:25:14.689386263 +0100
@@ -83,6 +83,24 @@
 
 struct option_t MuttVars[] = {
   /*++*/
+  {"abort_noattach", DT_QUAD, R_NONE, OPT_ATTACH, "no" },
+  /*
+   ** .pp
+   ** This variable specifies whether to abort sending if no attachment
+   ** was made but the content references them, i.e. the content
+   ** matches the regular expression given in
+   ** $$attach_remind_regexp. If a match was found and this
+   ** variable is set to \fIyes\fP, message sending will be aborted
+   ** but the mail will be send nevertheless if set to \fIno\fP.
+   **
+   ** .pp
+   ** This variable and $$attach_remind_regexp are intended to
+   ** remind the user to attach files if the message's text
+   ** references them.
+   **
+   ** .pp
+   ** See also the $$attach_remind_regexp variable.
+   */
   { "abort_nosubject",	DT_QUAD, R_NONE, OPT_SUBJECT, M_ASKYES },
   /*
   ** .pp
@@ -230,6 +248,16 @@
   ** .pp
   ** For an explanation of `soft-fill', see the ``$$index_format'' documentation.
   */
+  {"attach_remind_regexp", DT_RX, R_NONE, UL &AttachRemindRegexp, "attach"},
+  /*
+   ** .pp
+   ** If this variable is non-empty, muttng will scan a message's contents
+   ** before sending for this regular expression. If it is found, it will
+   ** ask for what to do depending on the setting of $$abort_noattach.
+   ** .pp
+   ** This variable and $$abort_noattach are intended to remind the user
+   ** to attach files if the message's text references them.
+   */
   { "attach_sep",	DT_STR,	 R_NONE, UL &AttachSep, UL "\n" },
   /*
   ** .pp
Index: mutt-1.5.17/send.c
===================================================================
--- mutt-1.5.17.orig/send.c	2008-01-07 13:24:47.985328578 +0100
+++ mutt-1.5.17/send.c	2008-01-07 13:25:14.689386263 +0100
@@ -1578,6 +1578,21 @@
   if (msg->content->next)
     msg->content = mutt_make_multipart (msg->content);
 
+  if (mutt_attach_check (msg) &&
+      !msg->content->next &&
+      query_quadoption (OPT_ATTACH,
+                        _("No attachments made but indicator found in text. "
+                          "Cancel sending?")) == M_YES) {
+    if (quadoption (OPT_ATTACH) == M_YES) {
+      mutt_message _("No attachments made but indicator found in text. "
+                     "Abort sending.");
+      sleep (2);
+    }
+    mutt_message (_("Mail not sent."));
+    goto main_loop;
+  }
+
+
   /* 
    * Ok, we need to do it this way instead of handling all fcc stuff in
    * one place in order to avoid going to main_loop with encoded "env"
Index: mutt-1.5.17/attach.c
===================================================================
--- mutt-1.5.17.orig/attach.c	2008-01-07 13:24:48.049328719 +0100
+++ mutt-1.5.17/attach.c	2008-01-07 13:25:14.689386263 +0100
@@ -1083,3 +1083,30 @@
     return 0;
   }
 }
+
+int mutt_attach_check (HEADER* hdr) {
+  int found = 0;
+  char buf[LONG_STRING];
+  char *p = NULL;
+  FILE* fp = NULL;
+  regmatch_t pmatch[1];
+
+  if (!hdr || !hdr->content || !((regex_t*) AttachRemindRegexp.rx) ||
+      (fp = safe_fopen (hdr->content->filename, "r")) == NULL)
+    return (0);
+
+  while (!found && fgets (buf, sizeof (buf), fp)) {
+    p = buf;
+    while (p && *p) {
+      if (regexec ((regex_t*) AttachRemindRegexp.rx, p, 1,
+                  pmatch, 0) == 0) {
+        found = 1;
+        break;
+      }
+      p++;
+    }
+  }
+  fclose (fp);
+
+  return (found);
+}

Reply via email to