<<< Date Index >>>     <<< Thread Index >>>

Re: Tagging all messages in certain threads



* René Clerc <rene@xxxxxxxx> [2003-09-29 16:32 +0200]:
> * Christoph Ludwig <cludwig@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> [29-09-2003 
> 16:25]:
> Nicolas Rachinsky has a patch which enables you to tag all messages
> which are in threads containing any tagged message.  You can get an
> old version at:
> 
>   http://www.rachinsky.de/nicolas/mutt.html
> 
> and a new version if you ask politely, I assume ;-)

I'm a bit confused now. I thought, that I've been using the version
from my homepage. But I'm not, I'm using the version from the FreeBSD
port which is a bit different from mine. I think I should have a look at
this (I hope soon), and update my homepage.

I think I'll attach the patch from the FreeBSD port.

Nicolas
written by Nicolas Rachinsky <nr@xxxxxxxxxxxx>
http://www.rachinsky.de

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 the Free Software Foundation;  version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

--- mutt-1.3.28.ori/mutt.h      Thu Mar 14 19:22:25 2002
+++ mutt.h      Fri Mar 15 00:22:41 2002
@@ -198,6 +198,7 @@
   M_LIMIT,
   M_EXPIRED,
   M_SUPERSEDED,
+  M_THREADCOMPLETE,
 
   /* actions for mutt_pattern_comp/mutt_pattern_exec */
   M_AND,
--- pattern.c.orig      Fri Jul 11 09:19:06 2003
+++ pattern.c   Fri Jul 11 09:23:17 2003
@@ -44,6 +44,7 @@
 }
 Flags[] =
 {
+  { 'a', M_THREADCOMPLETE,     0,              NULL },
   { 'A', M_ALL,                        0,              NULL },
   { 'b', M_BODY,               M_FULL_MSG,     eat_regexp },
   { 'B', M_WHOLE_MSG,          M_FULL_MSG,     eat_regexp },
@@ -946,6 +947,27 @@
   return alladdr;
 }
 
+static int match_threadcomplete(int flag,THREAD *t,int left,int up,int 
right,int down)
+{
+       int a=0;
+       HEADER *h=NULL;
+
+       if(! t)return 0;
+       h=t->message;
+       if(! flag && h && h->tagged)return 1;
+       if(flag && h && ! h->tagged) return 1;
+
+       if(up)a=match_threadcomplete(flag,t->parent,1,1,1,0);
+       if(a)return a;
+       if(right && t->parent)a=match_threadcomplete(flag,t->next,0,0,1,1);
+       if(a)return a;
+       if(left && t->parent)a=match_threadcomplete(flag,t->prev,1,0,0,1);
+       if(a)return a;
+       if(down)a=match_threadcomplete(flag,t->child,1,0,1,1);
+       if(a)return a;
+       return 0;
+}
+
 /* flags
        M_MATCH_FULL_ADDRESS    match both personal and machine address */
 int
@@ -1024,6 +1046,8 @@
                                        pat->alladdr, 2, h->env->to, 
h->env->cc));
     case M_LIST:
       return (pat->not ^ mutt_is_list_recipient (pat->alladdr, h->env->to, 
h->env->cc));
+    case M_THREADCOMPLETE:
+      return ((h->thread && match_threadcomplete(pat->not,h->thread,1,1,1,1)));
     case M_PERSONAL_RECIP:
       return (pat->not ^ match_user (pat->alladdr, h->env->to, h->env->cc));
     case M_PERSONAL_FROM:
--- PATCHES~    Tue Nov  6 19:59:33 2001
+++ PATCHES     Tue Nov  6 19:59:42 2001
@@ -1,0 +1 @@
+1.3.28.nr.threadcomplete