Index: head/mail/mutt/files/extra-patch-reverse_reply =================================================================== --- head/mail/mutt/files/extra-patch-reverse_reply (revision 474717) +++ head/mail/mutt/files/extra-patch-reverse_reply (revision 474718) @@ -1,92 +1,91 @@ --- PATCHES.orig 2018-05-19 20:39:17 UTC +++ PATCHES -@@ -1 +1,2 @@ +@@ -0,0 +1 @@ +patch-1.5.6.cb.reverse_reply.2 - patch-1.5.4.cd.ifdef.1 --- init.h.orig 2018-05-19 20:37:42 UTC +++ init.h @@ -2748,6 +2748,13 @@ ** possibly including eventual real names. When it is \fIunset\fP, 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 --- mutt.h.orig 2018-05-19 20:36:22 UTC +++ mutt.h @@ -466,6 +466,7 @@ OPTREVALIAS, OPTREVNAME, OPTREVREAL, + OPTREVREPLY, OPTRFC2047PARAMS, OPTSAVEADDRESS, OPTSAVEEMPTY, --- protos.h.orig 2018-05-19 20:33:53 UTC +++ protos.h @@ -93,6 +93,7 @@ ADDRESS *mutt_lookup_alias (const char *s); ADDRESS *mutt_remove_duplicates (ADDRESS *); ADDRESS *mutt_remove_xrefs (ADDRESS *, ADDRESS *); +ADDRESS *mutt_reverse_address (ADDRESS *); ADDRESS *mutt_expand_aliases (ADDRESS *); ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *); --- send.c.orig 2018-05-19 20:33:53 UTC +++ send.c @@ -598,6 +598,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); if (env->cc && !env->to) --- sendlib.c.orig 2018-05-19 20:33:53 UTC +++ sendlib.c @@ -2753,6 +2753,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;