]> git.cworth.org Git - notmuch-wiki/blob - news/release-0.6.mdwn
news markup tunes
[notmuch-wiki] / news / release-0.6.mdwn
1 [[!meta date="2011-07-01"]]
2
3 Notmuch 0.6 (2011-07-01)
4 =======================
5
6 New, general features
7 ---------------------
8
9 * **_Folder-based searching_**
10
11   Notmuch queries can now include a search term to match the
12   directories in which mail files are stored (within the mail
13   storage). The syntax is as follows:
14
15             folder:<path>
16
17   For example, one might use things such as:
18
19             folder:spam
20             folder:2011-*
21             folder:work/todo
22
23   to match any path containing a directory "spam", "work/todo", or
24   containing a directory starting with "2011-", respectively.
25
26   This feature is particularly useful for users of delivery-agent
27   software (such as procmail or maildrop) that is filtering mail and
28   delivering it to particular folders, or users of systems such as
29   Gmail that use filesystem directories to indicate message tags.
30
31   NOTE: Only messages that are newly indexed with this version of
32   notmuch will be searchable with folder: terms. In order to enable
33   this feature for all mail, the entire notmuch index will need to be
34   rebuilt as follows:
35
36             notmuch dump > notmuch.dump
37             # Backup, then remove notmuch database ($MAIL/.notmuch)
38             notmuch new
39             notmuch restore notmuch.dump
40
41 * **_Support for PGP/MIME_**
42
43   Both the command-line interface and the emacs-interface have new
44   support for PGP/MIME, detailed below. Thanks to Daniel Kahn Gillmor
45   and Jameson Graef Rollins for making this happen.
46
47 * **_New, automatic tags: "signed" and "encrypted"_**
48
49   These tags will automatically be applied to messages containing
50   multipart/signed and multipart/encrypted parts.
51
52   NOTE: Only messages that are newly indexed with this version of
53   notmuch will receive these tags.
54
55 New command-line features
56 -------------------------
57
58 * **_Add new "notmuch show --verify" option for signature verification_**
59
60   This option instruct notmuch to verify the signature of
61   PGP/MIME-signed parts.
62
63 * **_Add new "notmuch show --decrypt" and "notmuch reply --decrypt" options_**
64
65   This option instructs notmuch to decrypt PGP/MIME-encrypted parts.
66   Note that this feature currently requires gpg-agent and a passphrase entry
67   tool (e.g. pinentry-gtk or pinentry-curses).
68
69 * **_Proper nesting of multipart parts in "notmuch show" output_**
70
71   MIME parts are now display with proper nesting to reflect original
72   MIME hierarchy of a message. This allows clients to correctly
73   analyze the MIME structure, (such as, for example, determining to
74   which parts a signature part applies).
75
76 * **_Add new "notmuch show --part" option_**
77
78   This is a replacement for the older "notmuch part" command, (which
79   is now deprecated—it should still work as always, but is no longer
80   documented). Putting part output under "notmuch show" allows for all
81   of the "notmuch show" options to be applied when extracting a single
82   part, (such as --format=json for extracting a message part with JSON
83   formatting).
84
85 * **_Deprecate "notmuch search-tags" (in favor of "notmuch search --output=tags *")_**
86
87   The "notmuch search-tags" sub-command has been redundant since the
88   addition of the --output=tags option to "notmuch search". We now
89   make that more clear by deprecating "notmuch search-tags", (dropping
90   it from the documentation). We do continue to support the old syntax
91   by translating it internally to the new call.
92
93 Performance improvements
94 ------------------------
95
96 * **_Faster searches (by doing fewer searches to construct threads)_**
97
98   Whenever a user asks for search results as threads, notmuch first
99   performs a search for messages matching the query, then performs
100   additional searches to find other messages in the resulting threads.
101
102   Removing inefficiencies and redundancies in these secondary searches
103   results in a measured speedups of 1.5x for a typical search.
104
105 * **_Faster searches (by doing fewer passes to gather message data)_**
106
107   Optimizing Xapian data access patterns (using a single pass to get
108   all message-document data rather than a pass for each data type)
109   results in a measured speedup of 1.7x for a typical search.
110
111   The benefits of this optimization combine with the preceding
112   optimization. With both in place, Austin Clements measured a speedup
113   of 2.5x for a search of all messages in his inbox (was 4.5s, now
114   1.8s). Thanks, Austin!
115
116 * **_Faster initial indexing_**
117
118   More efficient indexing of new messages results in a measured
119   speedup of 1.4x for the initial indexing of 3 GB of mail (1h 14m
120   rather than 1h 46m). Thanks to Austin Clements and Michal Sojka.
121
122 * **_Make "notmuch new" faster for unchanged directories_**
123
124   Optimizing to not do any further examinations of sub-directories
125   when the filesystem indicates that a directory is unchanged from the
126   last "notmuch new" results in measured speedups of 8.5 for the "No
127   new mail" case, (was 0.77s, now 0.09s). Thanks to Karel Zak.
128
129 New emacs-interface features
130 ----------------------------
131
132 * **_Support for PGP/MIME (GnuPG)_**
133
134   Automatically indicate validity of signatures for multipart/signed
135   messages.  Automatically display decrypted content for
136   multipart/encrypted messages.  See the emacs variable
137   notmuch-crypto-process-mime for more information. Note that this
138   needs gpg-agent and a pinentry tool just as the command-line tools.
139   Also note there is no support SMIME yet.
140
141 * **_Output of pipe command is now displayed if pipe command fails_**
142
143   This is extremely useful in the common use case of piping a patch to
144   "git am". If git fails to cleanly merge the patch the error messages
145   from the failed merge are now clearly displayed to the user, (where
146   previously they were silently hidden from the user).
147
148 * **_User-selectable From address_**
149
150   A user can choose which configured email addresses should be used as
151   the From address whenever composing a new message. To do so, simply
152   press C-u before the command which will open a new message. Emacs
153   will prompt for the from address to use.
154
155   The user can customize the "Notmuch Identities" setting in the
156   notmuch customize group in order to use addresses other than those in
157   the notmuch configuration file if desired.
158
159   The user can also choose to always be prompted for the from address
160   when composing a new message (without having to use C-u) by setting
161   the "Notmuch Always Prompt For Sender" option in the notmuch
162   customize group.
163
164 * **_Hiding of repeated subjects in collapsed thread view_**
165
166   In notmuch-show mode, if a collapsed message has the same subject as
167   its parent, the subject is not shown.
168
169 * **_Automatic detection and hiding of original message in top-posted 
170   message_**
171
172   When a message contains a line looking something like:
173
174             ----- Original Message -----
175
176   emacs hides this and all subsequent lines as an "original message",
177   (allowing the user to click or press enter on the "original message"
178   button to display it again). This makes the handling of top-posted
179   citations work much like conventional citations.
180
181 * **_New hooks for running code when tags are modified_**
182
183   Some users want to perform additional actions whenever a particular
184   tag is added/removed from a message. This could be used to, for
185   example, interface with some external spam-recognition training
186   tool. To facilitate this, two new hooks are added which can be
187   modified in the following settings of the notmuch customize group:
188
189             Notmuch Before Tag Hook
190             Notmuch After Tag Hook
191
192 * **_New optional support for hiding some multipart/alternative parts_**
193
194   Many emails are sent with redundant content within a
195   multipart/alternative group (such as a text/plain part as well as a
196   text/html part). Users can configure the setting:
197
198             Notmuch Show All Multipart/Alternative Parts
199
200   to "off" in the notmuch customize group to have the interface
201   automatically hide some part alternatives (such as text/html
202   parts). This new part hiding is not configured by default yet
203   because there's not yet a simple way to re-display such a hidden
204   part if it is not actually redundant with a displayed part.
205
206 * **_Better rendering of text/x-vcalendar parts_**
207
208   These parts are now displayed in a format suitable for use with the
209   emacs diary.
210
211 * **_Avoid getting confused by Subject and Author fields with newline
212   characters_**
213
214   Replacing all characters with ASCII code less than 32 with a question mark.
215
216 Cleaner display of From line in email messages (remove double quotes,
217 and drop "name" if it's actually just a repeat of the email address).
218
219 Vim interface improvements
220 --------------------------
221
222 Felipe Contreras provided a number of updates for the vim interface:
223
224   * Using sendmail directly rather than mailx,
225   * Implementing archive in show view
226   * Add support to mark as read in show and search views
227   * Add delete commands
228   * Various cleanups.
229
230 Bindings improvements
231 ---------------------
232
233 * **_Ruby bindings are now much more complete_**
234
235   Including `QUERY.sort`, `QUERY.to_s`, `MESSAGE.maildir_flags_to_tags`,
236   `MESSAGE.tags_to_maildir_flags`, and `MESSAGE.get_filenames`
237
238 * **_Python bindings have been updated and extended_**
239
240   (docs online at http://packages.python.org/notmuch/)
241
242   New bindings:
243   - `Message().get_filenames()`,
244   - `Message().tags_to_maildir_flags()`, `Message().maildir_flags_to_tags()`
245   - `list(Threads())` and `list(Messages)` works now
246
247   - `Message().__cmp__() and __hash__()`
248         These allow, for example:
249             if msg1 == msg2: ...
250
251   As well as set arithmetic on `Messages()`:
252
253             s1, s2= set(msgs1), set(msgs2)
254             s1.union(s2)
255             s2 -= s1
256
257   Removed:
258   - len(Messages()) as it exhausted the iterator.
259         Use len(list(Messages())) or
260         `Query.count_messages()` to get the length.
261
262 * **_Added initial Go bindings in bindings/go_**
263
264 New build-system features
265 -------------------------
266
267 * **_Added support for building in a directory other than the source
268   directory_**
269
270   This can be used with the widely-supported idiom of simply running
271   the configure script from some other directory:
272
273             mkdir build
274             cd build
275             ../configure
276             make
277
278 * **_Fix to save configure options for future, implicit runs of configure_**
279
280   When a user updates the source (such as with "git pull") calling
281   "make" may cause an automatic re-run of the configure script. When
282   this happens, the configure script will automatically be called with
283   the same options the user originally passed in the most-recent
284   manual invocation of configure.
285
286 New test-suite feature
287 ----------------------
288
289 * **_Binary for bash for running test suite now located via PATH_**
290
291   The notmuch test suite requires a fairly recent version of bash (>=
292   bash 4). As some systems supply an older version of bash at
293   /bin/bash, the test suite is now updated to search $PATH to locate
294   the bash binary. This allows users of systems with old /bin/bash to
295   simply install bash >= 4 somewhere on $PATH before /bin and then use
296   the test suite.
297
298 * **_Support for testing output with a trailing newline_**
299
300   Previously, some tests would fail to notice a difference in the
301   presence/absence of a trailing newline in a program output, (which
302   has led to bugs in the past). Now, carefully-written tests (using
303   `test_expect_equal_file` rather than `test_expect_equal`) will detect
304   any change in the presence/absence of a trailing newline. Many tests
305   are updated to take advantage of this.
306
307 * **_Avoiding accessing user's $HOME while running test suite_**
308
309   The test suite now carefully creates its own HOME directory. This
310   allows the test suite to be run with no existing HOME directory, (as
311   some build systems apparently do), and avoids test-suite differences
312   due to configuration files in the users HOME directory.
313
314
315 General bug fixes
316 -----------------
317
318 * **_Output *all* files for "notmuch search --output=files"_**
319
320   For the cases where multiple files have the same Message ID,
321   previous versions of notmuch would output only one such file. This
322   command is now fixed to correctly output all files.
323
324 * **_Fixed spurious search results from "overlapped" indexing of addresses_**
325
326   This fixed a bug where a search for:
327
328             to:user@elsewhere.com
329
330   would incorrectly match a message sent:
331
332             To: user@example,com, someone@elsewhere.com
333
334 * **_Fix --output=json when search has no results_**
335
336   A bug present since notmuch 0.4 had caused searches with no results
337   to produce an invalid json object. This is now fixed to cleanly
338   return a valid json object representing an empty array "[]" as
339   expected.
340
341 * **_Fix the automatic detection of the From address for "notmuch reply"
342   from the Received headers in some cases._**
343
344 * **_Fix core dump on DragonFlyBSD due to -1 return value from
345   `sysconf(_SC_GETPW_R_SIZE_MAX)`._**
346
347 * **_Cleaned up several memory leaks_**
348
349 * **_Eliminated a few, rare segmentation faults and a double-free_**
350
351 * **_Fix libnotmuch library to only export notmuch API functions_**
352
353   Previous release of the notmuch library also exported some Xapian
354   C++ exception type symbols. These were never part of the library
355   interface and were never intended to be exported.
356
357 Emacs-interface bug fixes
358 -------------------------
359
360 * **_Display any unexpected output or errors from "notmuch search"
361 invocations_**
362
363   Previously any misformatted output or trailing error messages were
364   silently ignored. This output is now clearly displayed. This fix was
365   very helpful in identifying and fixing the bug described below.
366
367 * **_Fix bug where some threads would be missing from large search results_**
368
369   When a search returned a "large" number of results, the emacs
370   interface was incorrectly dropping one thread every time the output
371   of the "notmuch search" process spanned the emacs read-buffer. This
372   is now fixed.
373
374 * **_Avoid re-compression of .gz files (and similar) when saving attachment_**
375
376   Emacs was being too clever for its own good and trying to
377   re-compress pre-compressed .gz files when saving such attachments
378   (potentially corrupting the attachment). The emacs interface is
379   fixed to avoid this bug.
380
381 * **_Fix hiding of a message when a previously-hidden citation is visible_**
382
383   Previously the citation would remain visible in this case. This is
384   fixed so that hiding a message hides all parts.