Gregory Seidman wrote:
> Well, I sort of like it. Incidentally, I'm the one who brought up the
> problem. I'm not sure I like it better than have a search pattern (~R,
> maybe?) for when reverse_name has come up with something. It seems a little
> kludgy to make one header behave differently, rather than allowing the hook
> to be more specfic. In particular, I expect that there will be occasions
> when one wants the reverse_name to be overridden and occasions when one
> does not, even for the same user. (Example: I *always* want mail sent to
> the local LAN to have my short address, regardless of what address received
> the email. For everything else, though, I want reverse_name to supersede.)
I believe the following approach is a good compromise. This patch adds
a reply-hook command which is just like the send-hook, except that it
matches against the message you are replying to rather than the message
you are sending. All reply-hook's are execute prior to send-hook's.
However, you can inhibit send-hook's in the reply case by using the
pattern '! ~Q' (not-replied) in the send-hook to tell when reply-hook's
have been executed.
Therefore, your above example would become:
set reverse_name
reply-hook . 'unmy_hdr from'
# if i was not listed as an explicit recipient, use a default from:
# address
reply-hook '! ~p' 'my_hdr From: Long Form <[EMAIL PROTECTED]>'
# when not replying, clear the default from: addrss from the last email
send-hook '! ~Q' 'unmy_hdr from'
# always use a short address for local email
send-hook '! ~t @' 'my_hdr From: Short Form <short>'
Incidentally, this reply-hook also solves another problem. Say that I
use [EMAIL PROTECTED] when replying to email from the mutt-* lists. Right now
I would have something like:
send-hook '~Cmutt' 'my_hdr from: [EMAIL PROTECTED]'
so that when I reply to this list, the proper return address is set.
However, if I do a personal reply to a post on the list, that hook will
not be triggered and my default from address will be used instead. The
reply-hook lets me do
reply-hook '~Cmutt' 'my_hdr from: [EMAIL PROTECTED]'
so that when I do a personal reply to a message sent to mutt-users, my
return address is set to [EMAIL PROTECTED] as I want it to.
> Even better than a boolean search pattern would be a search pattern that
> gives the current from address (only applicable to send-hook, maybe?),
> which might have been generated from $from or reverse_name or my_hdr (in or
> out of a send-hook).
You can't do a substitution, but you can figure out which address was
used by reverse_name. Consider the following example:
set alternates=me@(mutt|sigpipe)\.org
# match when i use [EMAIL PROTECTED] as default from:
send-hook '~f me@mutt\.org' '...'
# match when i use [EMAIL PROTECTED] as default from:
send-hook '~f me@sigpipe\.org' '...'
Index: hook.c
===================================================================
RCS file: /home/roessler/cvs/mutt/hook.c,v
retrieving revision 3.3
diff -u -r3.3 hook.c
--- hook.c 5 Feb 2002 21:30:31 -0000 3.3
+++ hook.c 17 Jul 2002 17:27:57 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1996-2000 Michael R. Elkins <[EMAIL PROTECTED]>, and others
+ * Copyright (C) 1996-2002 Michael R. Elkins <[EMAIL PROTECTED]>, and others
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -65,7 +65,7 @@
goto error;
}
- mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK |
M_ACCOUNTHOOK)) ? M_TOKEN_SPACE : 0);
+ mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK | M_ACCOUNTHOOK
+| M_REPLYHOOK)) ? M_TOKEN_SPACE : 0);
if (!command.data)
{
@@ -118,7 +118,7 @@
ptr->rx.not == not &&
!mutt_strcmp (pattern.data, ptr->rx.pattern))
{
- if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK))
+ if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK |
+M_REPLYHOOK))
{
/* these hooks allow multiple commands with the same
* pattern, so if we've already seen this pattern/command pair, just
@@ -147,10 +147,10 @@
break;
}
- if (data & (M_SENDHOOK | M_SAVEHOOK | M_FCCHOOK | M_MESSAGEHOOK))
+ if (data & (M_SENDHOOK | M_SAVEHOOK | M_FCCHOOK | M_MESSAGEHOOK | M_REPLYHOOK))
{
if ((pat = mutt_pattern_comp (pattern.data,
- (data & (M_SENDHOOK | M_FCCHOOK)) ? 0 : M_FULL_MSG,
+ (data & (M_SENDHOOK | M_REPLYHOOK | M_FCCHOOK)) ? 0 : M_FULL_MSG,
err)) == NULL)
goto error;
}
Index: init.h
===================================================================
RCS file: /home/roessler/cvs/mutt/init.h,v
retrieving revision 3.17
diff -u -r3.17 init.h
--- init.h 7 Jul 2002 19:33:48 -0000 3.17
+++ init.h 17 Jul 2002 17:28:00 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1996-2000 Michael R. Elkins <[EMAIL PROTECTED]>
+ * Copyright (C) 1996-2002 Michael R. Elkins <[EMAIL PROTECTED]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -2690,6 +2690,7 @@
{ "crypt-hook", mutt_parse_hook, M_CRYPTHOOK },
#endif /* HAVE_PGP */
{ "push", mutt_parse_push, 0 },
+ { "reply-hook", mutt_parse_hook, M_REPLYHOOK },
{ "reset", parse_set, M_SET_RESET },
{ "save-hook", mutt_parse_hook, M_SAVEHOOK },
{ "score", mutt_parse_score, 0 },
Index: mutt.h
===================================================================
RCS file: /home/roessler/cvs/mutt/mutt.h,v
retrieving revision 3.8
diff -u -r3.8 mutt.h
--- mutt.h 20 Apr 2002 08:11:13 -0000 3.8
+++ mutt.h 17 Jul 2002 17:28:01 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1996-2000 Michael R. Elkins <[EMAIL PROTECTED]>
+ * Copyright (C) 1996-2002 Michael R. Elkins <[EMAIL PROTECTED]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -144,6 +144,7 @@
#define M_CRYPTHOOK (1<<8)
#endif
#define M_ACCOUNTHOOK (1<<9)
+#define M_REPLYHOOK (1<<10)
/* tree characters for linearize_tree and print_enriched_string */
#define M_TREE_LLCORNER 1
Index: send.c
===================================================================
RCS file: /home/roessler/cvs/mutt/send.c,v
retrieving revision 3.4
diff -u -r3.4 send.c
--- send.c 18 Feb 2002 14:55:31 -0000 3.4
+++ send.c 17 Jul 2002 17:28:02 -0000
@@ -1192,6 +1192,19 @@
killfrom = 1;
}
+ if ((flags & SENDREPLY) && cur)
+ {
+ /* change setting based upon message we are replying to */
+ mutt_message_hook (NULL, cur, M_REPLYHOOK);
+
+ /*
+ * set the replied flag for the message we are generating so that the
+ * user can use ~Q in a send-hook to know when reply-hook's are also
+ * being used.
+ */
+ msg->replied = 1;
+ }
+
/* change settings based upon recipients */
mutt_message_hook (NULL, msg, M_SENDHOOK);