<<< Date Index >>>     <<< Thread Index >>>

[patch] reverse_reply.2



Hello,

I've updated Stefan Zehl's reverse_reply patch. Comments welcome.

Christoph

PS: apparently the mutt lists were down from Mar 22 until yesterday; I
don't know whether postings got lost and have to be resent.
-- 
cb@xxxxxxxx | http://www.df7cb.de/
patch-1.5.6.cb.reverse_reply.2
===============================

This is the reverse_reply patch for mutt. It acts on the To: and Cc: headers of
reply mails like $reverse_alias does in the index. The patch was originally
written by Stefan Zehl for 1.3.25 [1]. I've introduced a new variable
$reverse_reply to separate the functionality from $reverse_alias and cleaned up
the code a bit.

[1] patch-1.3.25.sec.reverse_reply.1

The patch homepage is at

[2] http://www.df7cb.de/projects/mutt/

Changelog:
reverse_reply.2 (2004-03-26; cb):
  * New option $reverse_reply.
  * Code cleanup.

Wishlist:
  * reverse_reply is applied before send- and reply-hooks, it would be nice
    if "reply-hook ~l 'set reverse_reply'" worked. Applying it twice and/or
    only later would break other things, though.

Christoph Berg <cb@xxxxxxxx>

diff -ur ../MUTT/mutt/PATCHES mutt/PATCHES
--- ../MUTT/mutt/PATCHES        2002-12-09 18:44:54.000000000 +0100
+++ mutt/PATCHES        2004-03-26 13:07:42.000000000 +0100
@@ -0,0 +1 @@
+patch-1.5.6.cb.reverse_reply.2
diff -ur ../MUTT/mutt/init.h mutt/init.h
--- ../MUTT/mutt/init.h 2004-02-13 16:08:31.000000000 +0100
+++ mutt/init.h 2004-03-26 13:19:20.000000000 +0100
@@ -2120,6 +2120,13 @@
   ** possibly including eventual real names.  When it is unset, mutt will
   ** override any such real names with the setting of the $realname variable.
   */
+  { "reverse_reply",   DT_BOOL, R_NONE, OPTREVREPLY, 0 },
+  /*
+  ** .pp
+  ** When set, this variable uses the name from your aliases in the To and Cc
+  ** headers of reply mails you send, like $reverse_alias does in the index.
+  ** When unset, the headers taken from the original mail are left unchanged.
+  */
   { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 },
   /*
   ** .pp
diff -ur ../MUTT/mutt/mutt.h mutt/mutt.h
--- ../MUTT/mutt/mutt.h 2004-02-13 16:08:32.000000000 +0100
+++ mutt/mutt.h 2004-03-26 13:42:06.000000000 +0100
@@ -397,6 +397,7 @@
   OPTREVALIAS,
   OPTREVNAME,
   OPTREVREAL,
+  OPTREVREPLY,
   OPTRFC2047PARAMS,
   OPTSAVEADDRESS,
   OPTSAVEEMPTY,
diff -ur ../MUTT/mutt/protos.h mutt/protos.h
--- ../MUTT/mutt/protos.h       2004-02-13 16:08:32.000000000 +0100
+++ mutt/protos.h       2004-03-26 13:07:26.000000000 +0100
@@ -77,6 +77,7 @@
 ADDRESS *mutt_get_address (ENVELOPE *, char **);
 ADDRESS *mutt_lookup_alias (const char *s);
 ADDRESS *mutt_remove_duplicates (ADDRESS *);
+ADDRESS *mutt_reverse_address (ADDRESS *);
 ADDRESS *mutt_expand_aliases (ADDRESS *);
 ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
 
diff -ur ../MUTT/mutt/send.c mutt/send.c
--- ../MUTT/mutt/send.c 2004-01-05 19:49:00.000000000 +0100
+++ mutt/send.c 2004-03-26 13:19:20.000000000 +0100
@@ -583,6 +583,10 @@
   /* the CC field can get cluttered, especially with lists */
   env->to = mutt_remove_duplicates (env->to);
   env->cc = mutt_remove_duplicates (env->cc);
+  if (option (OPTREVREPLY)){
+       env->to = mutt_reverse_address (env->to);
+       env->cc = mutt_reverse_address (env->cc);
+  }
   env->cc = mutt_remove_xrefs (env->to, env->cc);
 }
 
diff -ur ../MUTT/mutt/sendlib.c mutt/sendlib.c
--- ../MUTT/mutt/sendlib.c      2003-09-19 15:03:26.000000000 +0200
+++ mutt/sendlib.c      2004-03-26 13:38:55.000000000 +0100
@@ -2330,6 +2330,35 @@
   }
 }
 
+/* given a list of addresses, return a list of reverse_alias'ed addresses */
+ADDRESS *mutt_reverse_address (ADDRESS *addr)
+{
+  ADDRESS *top,*tmp,*alias;
+
+  if (addr == NULL)
+    return NULL;
+
+  if ((alias = alias_reverse_lookup (addr)) && alias->personal) {
+    tmp = rfc822_cpy_adr_real(alias);
+    tmp->next = addr->next;
+    addr->next = NULL;
+    rfc822_free_address(&addr);
+    addr = tmp;
+  }
+
+  for (top = addr; top->next != NULL; top = tmp) {
+    tmp = top->next;
+    if ((alias = alias_reverse_lookup (tmp)) && alias->personal) {
+      top->next = rfc822_cpy_adr_real(alias);
+      top->next->next = tmp->next;
+      tmp->next = NULL;
+      rfc822_free_address(&tmp);
+      tmp = top->next;
+    }
+  }
+  return addr;
+}
+
 int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int 
post, char *fcc)
 {
   CONTEXT f;

Attachment: signature.asc
Description: Digital signature