summaryrefslogtreecommitdiff
path: root/mail/mutt14/files/patch-threadcomplete
blob: e4f56f261382cb7c5c8f9bd079668165eec2451f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
written by Nicolas Rachinsky <nr@rachinsky.de>
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,
--- mutt-1.3.28.ori/pattern.c	Thu Mar 14 19:22:26 2002
+++ pattern.c	Fri Mar 15 00:23:52 2002
@@ -50,6 +50,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 },
@@ -957,6 +958,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
@@ -1053,6 +1075,8 @@
       return (pat->not ^ (h->env->x_label && regexec (pat->rx, h->env->x_label, 0, NULL, 0) == 0));
     case M_DUPLICATED:
       return (pat->not ^ (h->thread && h->thread->duplicate_thread));
+    case M_THREADCOMPLETE:
+      return ((h->thread && match_threadcomplete(pat->not,h->thread,1,1,1,1)));
   }
   mutt_error (_("error: unknown op %d (report this error)."), pat->op);
   return (-1);
--- PATCHES~    Tue Nov  6 19:59:33 2001
+++ PATCHES     Tue Nov  6 19:59:42 2001
@@ -1,0 +1 @@
+1.3.28.nr.threadcomplete