[EMAIL PROTECTED] writes:
> Is there something else I can do to sort messages based on the
> header field that my filter is generating?
Well, way back I wrote a small patch that adds support for a custom
scoring header to mutt. I'm sure it was messy, and it definately
slowed folder opening (was noticable for very large folders), but you
can take a look at this (which appears to still apply to 1.3.24!). Of
course, while it may still apply cleanly, you're on your own to test
it and make sure it works:
diff -urN mutt-1.1.9/init.h mutt-1.1.9-extscore/init.h
--- mutt-1.1.9/init.h Wed Mar 29 21:56:12 2000
+++ mutt-1.1.9-extscore/init.h Tue Jan 11 06:21:08 2005
@@ -1663,6 +1663,15 @@
** $score_threshold_delete variable and friends are used.
**
*/
+ { "score_header", DT_STR, R_INDEX|R_RESORT_BOTH, UL &ScoreHeader, UL "" },
+ /*
+ ** .pp
+ ** When this variable is \fIset\fP, each message header will be examined
+ ** for a header in the form of ``score_header: <integer>''. The integer
+ ** value that is found is used as an initial score value for the message.
+ ** This allows the use of external scoring (with procmail, for example)
+ ** while still taking advantage of Mutt's score sorting features
+ */
{ "score_threshold_delete", DT_NUM, R_NONE, UL &ScoreThresholdDelete, -1 },
/*
** .pp
diff -urN mutt-1.1.9/score.c mutt-1.1.9-extscore/score.c
--- mutt-1.1.9/score.c Fri Mar 3 05:10:14 2000
+++ mutt-1.1.9-extscore/score.c Tue Jan 11 06:21:13 2005
@@ -20,6 +20,7 @@
#include "sort.h"
#include <string.h>
#include <stdlib.h>
+#include <mailbox.h>
typedef struct score_t
{
@@ -115,8 +116,46 @@
void mutt_score_message (CONTEXT *ctx, HEADER *hdr, int upd_ctx)
{
SCORE *tmp;
+ MESSAGE *msg;
+ FILE *fp = NULL;
+ HEADER *h = ctx->hdrs[hdr->msgno];
+ long lng = 0;
+ char *search = NULL;
+ char buf[STRING];
hdr->score = 0; /* in case of re-scoring */
+
+ /*
+ * If the score_header variable is set, then use
+ * that as an initial score value
+ */
+ if(ScoreHeader && *ScoreHeader) {
+ if((msg = mx_open_message(ctx, hdr->msgno)) != NULL)
+ {
+ fp = msg->fp;
+ fseek(fp, h->offset, 0);
+ lng = h->content->offset - h->offset;
+
+ /* now, search the headers... */
+ while(lng > 0) {
+ if(fgets(buf, sizeof(buf) - 1, fp) == NULL)
+ break;
+
+ search = strstr(buf, ScoreHeader);
+
+ if(search) {
+ search = strstr(buf, ":");
+ hdr->score = atoi(search + 1);
+ break;
+ }
+
+ lng -= mutt_strlen(buf);
+ }
+
+ mx_close_message(&msg);
+ }
+ }
+
for (tmp = Score; tmp; tmp = tmp->next)
{
if (mutt_pattern_exec (tmp->pat, 0, NULL, hdr) > 0)
--
Josh Huber | [EMAIL PROTECTED] |