Index: head/mail/mutt/files/extra-patch-ifdef =================================================================== --- head/mail/mutt/files/extra-patch-ifdef (revision 488104) +++ head/mail/mutt/files/extra-patch-ifdef (revision 488105) @@ -1,79 +1,77 @@ --- PATCHES.orig 2018-11-29 22:49:51 UTC +++ PATCHES -@@ -1,2 +1,3 @@ +@@ -0,0 +1 @@ +patch-1.5.4.cd.ifdef.1 - vvv.quote - vvv.initials --- init.c.orig 2018-11-24 19:06:11 UTC +++ init.c @@ -650,6 +650,52 @@ static mbchar_table *parse_mbchar_table return t; } +static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) +{ + int i, j, res = 0; + BUFFER token; + + memset (&token, 0, sizeof (token)); + mutt_extract_token (tmp, s, 0); + + /* is the item defined as a variable or a function? */ + if (!(res = (mutt_option_index (tmp->data) != -1))) + for (i = 0; !res && i < MENU_MAX; i++) + { + struct binding_t *b = km_get_table (Menus[i].value); + + if (!b) + continue; + + for (j = 0; b[j].name; j++) + if (!ascii_strncasecmp (tmp->data, b[j].name, mutt_strlen (tmp->data)) + && (mutt_strlen (b[j].name) == mutt_strlen (tmp->data))) + { + res = 1; + break; + } + } + + if (!MoreArgs (s)) + { + snprintf (err->data, err->dsize, _("ifdef: too few arguments")); + return (-1); + } + mutt_extract_token (tmp, s, MUTT_TOKEN_SPACE); + + if (res) + { + if (mutt_parse_rc_line (tmp->data, &token, err) == -1) + { + mutt_error ("Erreur: %s", err->data); + FREE (&token.data); + return (-1); + } + FREE (&token.data); + } + return 0; +} + static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { do --- init.h.orig 2018-11-29 22:49:51 UTC +++ init.h @@ -4195,6 +4195,7 @@ static int parse_lists (BUFFER *, BUFFER static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *); static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *); static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *); +static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *); static int parse_echo (BUFFER *, BUFFER *, unsigned long, BUFFER *); static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *); @@ -4259,6 +4260,7 @@ const struct command_t Commands[] = { { "hdr_order", parse_list, UL &HeaderOrderList }, #ifdef HAVE_ICONV { "iconv-hook", mutt_parse_hook, MUTT_ICONVHOOK }, + { "ifdef", parse_ifdef, 0 }, #endif { "ignore", parse_ignore, 0 }, { "index-format-hook",mutt_parse_idxfmt_hook, MUTT_IDXFMTHOOK }, Index: head/mail/mutt/files/extra-patch-reverse_reply =================================================================== --- head/mail/mutt/files/extra-patch-reverse_reply (revision 488104) +++ head/mail/mutt/files/extra-patch-reverse_reply (revision 488105) @@ -1,94 +1,91 @@ --- PATCHES.orig 2018-11-29 22:55:14 UTC +++ PATCHES -@@ -1,3 +1,4 @@ +@@ -0,0 +1 @@ +patch-1.5.6.cb.reverse_reply.2 - patch-1.5.4.cd.ifdef.1 - vvv.quote - vvv.initials --- init.h.orig 2018-11-29 22:55:14 UTC +++ init.h @@ -2820,6 +2820,13 @@ struct option_t MuttVars[] = { ** 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-11-29 22:55:14 UTC +++ mutt.h @@ -478,6 +478,7 @@ enum OPTREVALIAS, OPTREVNAME, OPTREVREAL, + OPTREVREPLY, OPTRFC2047PARAMS, OPTSAVEADDRESS, OPTSAVEEMPTY, --- protos.h.orig 2018-11-24 19:06:21 UTC +++ protos.h @@ -85,6 +85,7 @@ ADDRESS *mutt_get_address (ENVELOPE *, c 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-10-04 22:30:10 UTC +++ send.c @@ -600,6 +600,10 @@ void mutt_fix_reply_recipients (ENVELOPE /* 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-11-24 19:06:11 UTC +++ sendlib.c @@ -2754,6 +2754,35 @@ static void set_noconv_flags (BODY *b, s } } +/* 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;