Would this hook be called for each new message, or just once, even when several new messages have been received?
On Fri, Jun 25, 2010 at 10:57:57AM +0200, Mehturt wrote: > On Thu, Jun 24, 2010 at 5:18 PM, David Champion <[email protected]> wrote: > > If you could rework this as a receive-hook (a hook like mutt's other > > hooks which triggers when new mail is received) it would be more > > flexible and would probably look more attractive to the maintainers. > > David, thanks a lot for your comment. > A patch is attached, please have a look. > > m. > diff -rupN mutt-1.5.20/curs_main.c mutt-1.5.20-my/curs_main.c > --- mutt-1.5.20/curs_main.c 2009-06-14 04:48:36.000000000 +0200 > +++ mutt-1.5.20-my/curs_main.c 2010-06-25 10:40:19.000000000 +0200 > @@ -502,6 +502,7 @@ int mutt_index_menu (void) > mutt_message _("New mail in this mailbox."); > if (option (OPTBEEPNEW)) > beep (); > + mutt_message_hook (Context, 0, M_RECEIVEHOOK); > } else if (check == M_FLAGS) > mutt_message _("Mailbox was externally modified."); > > diff -rupN mutt-1.5.20/hook.c mutt-1.5.20-my/hook.c > --- mutt-1.5.20/hook.c 2009-01-13 15:47:49.000000000 +0100 > +++ mutt-1.5.20-my/hook.c 2010-06-25 10:49:14.000000000 +0200 > @@ -70,7 +70,7 @@ int mutt_parse_hook (BUFFER *buf, BUFFER > goto error; > } > > - mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK | > M_SEND2HOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) ? M_TOKEN_SPACE : 0); > + mutt_extract_token (&command, s, (data & (M_FOLDERHOOK | M_SENDHOOK | > M_SEND2HOOK | M_ACCOUNTHOOK | M_REPLYHOOK | M_RECEIVEHOOK)) ? M_TOKEN_SPACE > : 0); > > if (!command.data) > { > @@ -154,10 +154,10 @@ int mutt_parse_hook (BUFFER *buf, BUFFER > break; > } > > - if (data & (M_SENDHOOK | M_SEND2HOOK | M_SAVEHOOK | M_FCCHOOK | > M_MESSAGEHOOK | M_REPLYHOOK)) > + if (data & (M_SENDHOOK | M_SEND2HOOK | M_SAVEHOOK | M_FCCHOOK | > M_MESSAGEHOOK | M_REPLYHOOK | M_RECEIVEHOOK)) > { > if ((pat = mutt_pattern_comp (pattern.data, > - (data & (M_SENDHOOK | M_SEND2HOOK | M_FCCHOOK)) ? 0 : M_FULL_MSG, > + (data & (M_SENDHOOK | M_SEND2HOOK | M_FCCHOOK | M_RECEIVEHOOK)) ? 0 > : M_FULL_MSG, > err)) == NULL) > goto error; > } > diff -rupN mutt-1.5.20/init.h mutt-1.5.20-my/init.h > --- mutt-1.5.20/init.h 2009-06-13 23:35:21.000000000 +0200 > +++ mutt-1.5.20-my/init.h 2010-06-25 10:42:10.000000000 +0200 > @@ -3504,5 +3504,7 @@ struct command_t Commands[] = { > { "unscore", mutt_parse_unscore, 0 }, > { "unset", parse_set, M_SET_UNSET }, > { "unsubscribe", parse_unsubscribe, 0 }, > + { "receive-hook", mutt_parse_hook, M_RECEIVEHOOK }, > + { "system", mutt_parse_system, 0 }, > { NULL, NULL, 0 } > }; > diff -rupN mutt-1.5.20/mutt.h mutt-1.5.20-my/mutt.h > --- mutt-1.5.20/mutt.h 2009-06-13 00:15:42.000000000 +0200 > +++ mutt-1.5.20-my/mutt.h 2010-06-25 09:27:33.000000000 +0200 > @@ -146,6 +146,7 @@ typedef enum > #define M_ACCOUNTHOOK (1<<9) > #define M_REPLYHOOK (1<<10) > #define M_SEND2HOOK (1<<11) > +#define M_RECEIVEHOOK (1<<12) > > /* tree characters for linearize_tree and print_enriched_string */ > #define M_TREE_LLCORNER 1 > diff -rupN mutt-1.5.20/protos.h mutt-1.5.20-my/protos.h > --- mutt-1.5.20/protos.h 2009-06-13 01:38:52.000000000 +0200 > +++ mutt-1.5.20-my/protos.h 2010-06-25 09:58:40.000000000 +0200 > @@ -51,6 +51,8 @@ void mutt_free_opts (void); > #define mutt_system(x) _mutt_system(x,0) > int _mutt_system (const char *, int); > > +int mutt_parse_system (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER > *err); > + > #define mutt_next_thread(x) _mutt_aside_thread(x,1,0) > #define mutt_previous_thread(x) _mutt_aside_thread(x,0,0) > #define mutt_next_subthread(x) _mutt_aside_thread(x,1,1) > diff -rupN mutt-1.5.20/system.c mutt-1.5.20-my/system.c > --- mutt-1.5.20/system.c 2008-11-11 20:55:47.000000000 +0100 > +++ mutt-1.5.20-my/system.c 2010-06-25 10:27:08.000000000 +0200 > @@ -139,3 +139,14 @@ int _mutt_system (const char *cmd, int f > > return (rc); > } > + > +/* system command-name */ > +int mutt_parse_system (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER > *err) > +{ > + if (s->dptr != NULL) > + { > + mutt_system(s->dptr); > + s->dptr += strlen(s->dptr); > + } > + return 0; > +}
