Hey everybody, I'm floundering a bit in an attempt to add some functionality to the "source" command and I'm hoping somebody can lend me a hand.
My end-goal is to be able to add some custom header lines based on who the mail is addressed to. Unfortunately, this does NOT work: send-hook '(~t [EMAIL PROTECTED] )' source "/Users/mhunter/bin/my_hdr-gen.pl %T |" I get "source: too many arguments" Clever quoting can get one a bit farther, but you end up with the literal "%T" being passed to the script instead of the expanded value. I've been trying to come up with a patch to enable this functionality, but so far I'm not having success: In init.c, I tried allowing more tokens in the case of "paths" ending with '|', but when thought I'd get it to work, I discovered that the function that handles expanding %T (FWICT) is a static function inside hdrline.c. I must be going about this wrong, because obviously people use format strings with "set", but I can't quite follow parse_set to see how it's doing it. I've been chatting about this already on usenet: http://groups.google.com/group/comp.mail.mutt/browse_thread/thread/a5592b5a3e3472e7/3c0a4560597524f3#3c0a4560597524f3 And, for your ridicule, here's my non-working parse_source function that I'm working on. It's trying to expand out the string and pass it along to source_rc (which seems well-prepared to deal with it via eventually fork/exec'ing). Any help would be greatly appreciated! Mike static int parse_source (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) { char path[_POSIX_PATH_MAX]; char formatbuf[SHORT_STRING]; /*we do a first pass with with path expansion for the root */ if (mutt_extract_token (tmp, s, 0) != 0) { snprintf (err->data, err->dsize, _("source: error at %s"), s->dptr); return (-1); } strfcpy (path, tmp->data, sizeof (path)); mutt_expand_path (path, sizeof (path)); while (MoreArgs(s)) { if (mutt_extract_token (tmp, s, 0) != 0) { snprintf (err->data, err->dsize, _("source: error at %s"), s->dptr); return (-1); } if (tmp->data[0] == '%') { mutt_FormatString(formatbuf, sizeof(formatbuf), tmp->data, hdr_format_str, data, 0); safe_strncat(path, sizeof(path), " ", 1); safe_strncat(path, sizeof(path), formatbuff, sizeof(formatbuf)); } else { safe_strncat(path, sizeof(path), " ", 1); safe_strncat(path, sizeof(path), tmp->data, tmp->dsize); } } if (path[mutt_strnlen(path, sizeof(path))-2] != '|') { snprintf (err->data, err->dsize, _("source: multiple arguments not ending in '|'"), s->dptr); return (-1); } return (source_rc (path, err)); } -- "As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought....I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs." --Maurice Wilkes, 1949