Re: [PATCH] emacs: wash: make word-wrap bound message width
[notmuch-archives.git] / 22 / bc2026af2d779180ae21304f40a9809a7aeb5f
1 Return-Path: <amdragon@mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 93F8B429E54\r
6         for <notmuch@notmuchmail.org>; Sun, 22 Jan 2012 17:52:52 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id JHLrpsoEFr7k for <notmuch@notmuchmail.org>;\r
16         Sun, 22 Jan 2012 17:52:51 -0800 (PST)\r
17 Received: from dmz-mailsec-scanner-2.mit.edu (DMZ-MAILSEC-SCANNER-2.MIT.EDU\r
18         [18.9.25.13])\r
19         by olra.theworths.org (Postfix) with ESMTP id 9DF2B429E40\r
20         for <notmuch@notmuchmail.org>; Sun, 22 Jan 2012 17:52:51 -0800 (PST)\r
21 X-AuditID: 1209190d-b7fbf6d0000008ba-14-4f1cbd72f71d\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-2.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id ED.BA.02234.27DBC1F4; Sun, 22 Jan 2012 20:52:50 -0500 (EST)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id q0N1qoIb008721; \r
27         Sun, 22 Jan 2012 20:52:50 -0500\r
28 Received: from awakening.csail.mit.edu (awakening.csail.mit.edu [18.26.4.91])\r
29         (authenticated bits=0)\r
30         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
31         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id q0N1qnCf024532\r
32         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
33         Sun, 22 Jan 2012 20:52:50 -0500 (EST)\r
34 Received: from amthrax by awakening.csail.mit.edu with local (Exim 4.77)\r
35         (envelope-from <amdragon@MIT.EDU>)\r
36         id 1Rp954-00027G-71; Sun, 22 Jan 2012 20:52:22 -0500\r
37 Date: Sun, 22 Jan 2012 20:52:22 -0500\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: Mark Walters <markwalters1009@gmail.com>\r
40 Subject: Re: [PATCH] Automatically exclude tags in notmuch-show\r
41 Message-ID: <20120123015222.GB7600@mit.edu>\r
42 References: <874nvric7c.fsf@qmul.ac.uk>\r
43         <1327010583-23954-1-git-send-email-markwalters1009@gmail.com>\r
44         <20120119225910.GT16740@mit.edu> <871uqvgrnm.fsf@qmul.ac.uk>\r
45         <20120120171801.GA16740@mit.edu> <20120122181609.GQ16740@mit.edu>\r
46         <87zkdfgr0m.fsf@qmul.ac.uk>\r
47 MIME-Version: 1.0\r
48 Content-Type: text/plain; charset=us-ascii\r
49 Content-Disposition: inline\r
50 In-Reply-To: <87zkdfgr0m.fsf@qmul.ac.uk>\r
51 User-Agent: Mutt/1.5.21 (2010-09-15)\r
52 X-Brightmail-Tracker:\r
53  H4sIAAAAAAAAA+NgFupjleLIzCtJLcpLzFFi42IRYrdT0S3aK+NvcG65jcXquTwW12/OZHZg\r
54         8tg56y67x7NVt5gDmKK4bFJSczLLUov07RK4Mq4u62MseGxSceTqL9YGxouaXYycHBICJhJ7\r
55         npxmhrDFJC7cW8/WxcjFISSwj1Hi27nfjBDOBkaJyzeuQ2VOMkn0TdjIDuEsYZSY9/IxUxcj\r
56         BweLgKrEmxf1IKPYBDQktu1fzghiiwjoSNw+tIAdxGYWkJb49ruZCcQWFrCXmLx0MdhqXgFt\r
57         if62e2D1QgI9TBKL9xRCxAUlTs58wgLRqyVx499LsFUgc5b/4wAJcwKtargwB2ykqICKxJST\r
58         29gmMArNQtI9C0n3LITuBYzMqxhlU3KrdHMTM3OKU5N1i5MT8/JSi3SN9HIzS/RSU0o3MYKC\r
59         mlOSdwfju4NKhxgFOBiVeHgjlsr4C7EmlhVX5h5ilORgUhLl7d0DFOJLyk+pzEgszogvKs1J\r
60         LT7EKMHBrCTC6/xZ2l+INyWxsiq1KB8mJc3BoiTOq6r1zk9IID2xJDU7NbUgtQgmK8PBoSTB\r
61         ew5kqGBRanpqRVpmTglCmomDE2Q4D9Dw3yA1vMUFibnFmekQ+VOMuhxffredZxRiycvPS5US\r
62         55UFphMhAZCijNI8uDmwZPSKURzoLWHe7yCjeICJDG7SK6AlTEBLOPKkQJaUJCKkpBoYz3pY\r
63         3b39PD71gm75limfuaYH7Pz/InbR1w23TsyVX/NkPd+SS/f99R1E2/pMDjjsqj9r/Tj3nXju\r
64         wc/TO3ynGU2NWcys1b1u9TmudWtydib8f3tJaNmTD59Fgr5u/p9w368pV9bPr9hnae/zZpe9\r
65         J/iu/Evnc/NL6kzj8/wRs7f/rI3vsxpFbiWW4oxEQy3mouJEAN9mOBghAwAA\r
66 Cc: notmuch@notmuchmail.org\r
67 X-BeenThere: notmuch@notmuchmail.org\r
68 X-Mailman-Version: 2.1.13\r
69 Precedence: list\r
70 List-Id: "Use and development of the notmuch mail system."\r
71         <notmuch.notmuchmail.org>\r
72 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
73         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
74 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
75 List-Post: <mailto:notmuch@notmuchmail.org>\r
76 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
77 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
78         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
79 X-List-Received-Date: Mon, 23 Jan 2012 01:52:52 -0000\r
80 \r
81 Quoth Mark Walters on Jan 23 at  1:13 am:\r
82 > On Sun, 22 Jan 2012 13:16:09 -0500, Austin Clements <amdragon@MIT.EDU> wrote:\r
83 > > Quoth myself on Jan 20 at 12:18 pm:\r
84 > > > Quoth Mark Walters on Jan 20 at 12:10 am:\r
85 > > > > \r
86 > > > > Ok Having said this is trivial I have found a problem. What should\r
87 > > > > notmuch do if you do something like\r
88 > > > > \r
89 > > > > notmuch show id:<some-id>\r
90 > > > > and that message is marked with a deleted tag? To be consistent with the\r
91 > > > > other cases (where a deleted message is in a matched thread) we might\r
92 > > > > want to return the message with the not-matched flag set (eg in\r
93 > > > > JSON). But my patch doesn't, as it never even sees the thread since it\r
94 > > > > doesn't match.\r
95 > > > > \r
96 > > > > Looking at notmuch-show.c I think we should not apply the exclude tags\r
97 > > > > to do_show_single, but usually should apply it to do_show. One solution\r
98 > > > > which is simple and is at least close to right would be to get do_show\r
99 > > > > to return the number of threads found. If this is zero then retry the\r
100 > > > > query without the excludes (possible setting the match_flag to zero on\r
101 > > > > each message since we know it does not match)\r
102 > > > > \r
103 > > > > This is not a completely correct solution as if you ask notmuch-show to\r
104 > > > > show more than one thread it might  threads which only contain deleted\r
105 > > > > messages.\r
106 > > > > \r
107 > > > > I can't see other good possibilities without slowing down the normal\r
108 > > > > path a lot (eg find all threads that match the original query and then\r
109 > > > > apply the argument above).\r
110 > > > > \r
111 > > > > Any thoughts?\r
112 > > > \r
113 > > > Oh dear.\r
114 > > > \r
115 > > > Well, here's one idea.  Instead of doing a single thread query in\r
116 > > > show, do a thread query without the exclusions and then a message\r
117 > > > query with the exclusions.  Output all of the messages from the first\r
118 > > > query, but use the results of the second query to determine which\r
119 > > > messages are "matched".  The same could be accomplished in the library\r
120 > > > somewhat more efficiently, but it's not obvious to me what the API\r
121 > > > would be.\r
122 > > \r
123 > > Here's a slightly crazier idea that's more library-invasive than the\r
124 > > original approach, but probably better in the long run.\r
125 > > \r
126 > > Have notmuch_query_search_* return everything and make exclusion a\r
127 > > message flag like NOTMUCH_MESSAGE_FLAG_MATCH.  Tweak the definition of\r
128 > > "matched" to mean "matched and not excluded" (specifically, a message\r
129 > > would have the match flag or the excluded flag or neither, but not\r
130 > > both).  Search would skip threads with zero matched messages and I\r
131 > > think show would Just Work.\r
132 > > \r
133 > > I can think of two ways to implement this.  notmuch_query_search_*\r
134 > > could perform both the original query and the query with exclusions\r
135 > > and use the docid set from the second to compute the "excluded"\r
136 > > message flag.  Alternatively, it could examine the tags of each\r
137 > > message directly to compute the flag.  The latter is probably easier\r
138 > > to implement, but probably slower.\r
139 > > \r
140 > > Thoughts?\r
141\r
142 > I have now thought about this some more and think I understand your idea\r
143 > (and how it would work) rather better now. \r
144\r
145 > I would suggest one small change: the flags for the messages returned\r
146 > should be "independent": so a message can match the query or not, and it\r
147 > can be excluded or not, with all 4 combinations being possible. (The\r
148 > consumer of notmuch_query_search_* would extract the information it\r
149 > wanted.)\r
150 \r
151 I'd initially approached it this way, but went with redefining a\r
152 "matched" messages because it had much less impact on the API.  For\r
153 example, with the redefined "match",\r
154 notmuch_thread_get_matched_messages still does the right thing for\r
155 search and things like the thread subject can still be based on\r
156 "matched" messages.  If we orthongonalize these flags, then we at\r
157 least need to count matched non-excluded messages and provide an API\r
158 to access this (while I don't have a solid argument against such an\r
159 API it just seems weirdly specific to me).\r
160 \r
161 My other concern is performance.  In thread queries, marking\r
162 non-matched messages as excluded would require either an extra query\r
163 per thread or a single query to match all excluded messages (not\r
164 filtered by the primary query).  The former is prohibitive, though the\r
165 latter might be acceptable (that might depend on how many things\r
166 people mark as spam or deleted).  If the cost is too high, this\r
167 suggests that we shouldn't mark non-matched messages as excluded, but\r
168 then we're back to effectively having three levels of matching: not\r
169 matched, matched but not excluded, and matched but excluded.\r
170 \r
171 > I have thought about some implementation ideas but I think sorting is\r
172 > going to be the deciding factor: what order should\r
173 > notmuch_query_search_* return messages/threads? \r
174 \r
175 Yes.  This is exactly what I've been puzzling over, too.\r
176 \r
177 > For notmuch_query_search_messages either it returns them all together\r
178 > with the excluded messages marked, or returns all included ones, and\r
179 > then all excluded one.\r
180 \r
181 I would prefer them intermingled.  I feel like returning one and then\r
182 the other is just exposing implementation details.  Plus, it's unclear\r
183 if the order of the two groups should depend on the sort order, be\r
184 configurable, or what.  Intermingling them seems like the obvious\r
185 answer.\r
186 \r
187 > For notmuch_query_search_threads it is less clear. Currently it returns\r
188 > threads in order of first matching message. It is not clear what\r
189 > matching means now: is matching and included, or just matching? If the\r
190 > former then we will be returning some threads with no matching and\r
191 > included messages so we need to decide where to put them in the order.\r
192 \r
193 I would argue that, if the caller cares about the sort order of the\r
194 results, it only makes sense for it to skip over threads consisting\r
195 only of excluded messages, and if the caller doesn't care about the\r
196 sort order, we can choose whatever's most convenient.\r
197 \r
198 > If we sort in both cases just on matching then we have the same\r
199 > output/sort as notmuch pre-excluded flags, just the frontends\r
200 > notmuch-search/show can decide to omit some lines/results. Note that\r
201 > after omitting "excluded" lines the thread sort would be different from\r
202 > the current notmuch-with-excluded implementation.\r
203\r
204 > Whereas if we sort based on matching and included, we keep the current\r
205 > sort order with some stuff appended.\r
206\r
207 > As regards implementation I think notmuch_query_search_messages is the\r
208 > crucial place: once that returns one of its two orders the rest sort of\r
209 > takes care of itself.\r
210 \r
211 I think that comes down to exactly how we want to handle the message\r
212 flags.\r
213 \r
214 > Best wishes\r
215\r
216 > Mark\r