1 [[!meta date="2011-07-01"]]
3 Notmuch 0.6 (2011-07-01)
4 =======================
9 ### Folder-based searching
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:
17 For example, one might use things such as:
23 to match any path containing a directory "spam", "work/todo", or
24 containing a directory starting with "2011-", respectively.
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.
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
36 notmuch dump > notmuch.dump
37 # Backup, then remove notmuch database ($MAIL/.notmuch)
39 notmuch restore notmuch.dump
41 ### Support for PGP/MIME
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.
47 ### New, automatic tags: "signed" and "encrypted"
49 These tags will automatically be applied to messages containing
50 multipart/signed and multipart/encrypted parts.
52 NOTE: Only messages that are newly indexed with this version of
53 notmuch will receive these tags.
55 New command-line features
56 -------------------------
58 ### Add new "notmuch show --verify" option for signature verification
60 This option instruct notmuch to verify the signature of
61 PGP/MIME-signed parts.
63 ### Add new "notmuch show --decrypt" and "notmuch reply --decrypt" options
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).
69 ### Proper nesting of multipart parts in "notmuch show" output
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).
76 ### Add new "notmuch show --part" option
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
85 ### Deprecate "notmuch search-tags" (in favor of "notmuch search --output=tags *")
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.
93 Performance improvements
94 ------------------------
96 ### Faster searches (by doing fewer searches to construct threads)
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.
102 Removing inefficiencies and redundancies in these secondary searches
103 results in a measured speedups of 1.5x for a typical search.
105 ### Faster searches (by doing fewer passes to gather message data)
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.
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!
116 ### Faster initial indexing
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.
122 ### Make "notmuch new" faster for unchanged directories
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.
129 New emacs-interface features
130 ----------------------------
132 ### Support for PGP/MIME (GnuPG)
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.
141 ### Output of pipe command is now displayed if pipe command fails
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).
148 ### User-selectable From address
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.
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.
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
164 ### Hiding of repeated subjects in collapsed thread view
166 In notmuch-show mode, if a collapsed message has the same subject as
167 its parent, the subject is not shown.
169 ### Automatic detection and hiding of original message in top-posted message
171 When a message contains a line looking something like:
173 ----- Original Message -----
175 emacs hides this and all subsequent lines as an "original message",
176 (allowing the user to click or press enter on the "original message"
177 button to display it again). This makes the handling of top-posted
178 citations work much like conventional citations.
180 ### New hooks for running code when tags are modified
182 Some users want to perform additional actions whenever a particular
183 tag is added/removed from a message. This could be used to, for
184 example, interface with some external spam-recognition training
185 tool. To facilitate this, two new hooks are added which can be
186 modified in the following settings of the notmuch customize group:
188 Notmuch Before Tag Hook
189 Notmuch After Tag Hook
191 ### New optional support for hiding some multipart/alternative parts
193 Many emails are sent with redundant content within a
194 multipart/alternative group (such as a text/plain part as well as a
195 text/html part). Users can configure the setting:
197 Notmuch Show All Multipart/Alternative Parts
199 to "off" in the notmuch customize group to have the interface
200 automatically hide some part alternatives (such as text/html
201 parts). This new part hiding is not configured by default yet
202 because there's not yet a simple way to re-display such a hidden
203 part if it is not actually redundant with a displayed part.
205 ### Better rendering of text/x-vcalendar parts
207 These parts are now displayed in a format suitable for use with the
210 ### Avoid getting confused by Subject and Author fields with newline characters
212 Replacing all characters with ASCII code less than 32 with a question mark.
214 ### Cleaner display of From line in email messages
216 Remove double quotes, and drop "name" if it's actually just a repeat of
219 Vim interface improvements
220 --------------------------
222 ### Felipe Contreras provided a number of updates for the vim interface:
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
230 Bindings improvements
231 ---------------------
233 ### Ruby bindings are now much more complete
235 Including `QUERY.sort`, `QUERY.to_s`, `MESSAGE.maildir_flags_to_tags`,
236 `MESSAGE.tags_to_maildir_flags`, and `MESSAGE.get_filenames`
238 ### Python bindings have been updated and extended
240 (docs online at http://packages.python.org/notmuch/)
244 - `Message().get_filenames()`, `Message().tags_to_maildir_flags()`,
245 `Message().maildir_flags_to_tags()`, `list(Threads())` and
246 `list(Messages)` works now
247 - `Message().__cmp__()` and `__hash__()`
249 These allow, for example:
253 As well as set arithmetic on `Messages()`:
255 s1, s2 = set(msgs1), set(msgs2)
261 - `len(Messages())` as it exhausted the iterator
263 Use `len(list(Messages()))` or `Query.count_messages()`
266 ### Added initial Go bindings in bindings/go
268 New build-system features
269 -------------------------
271 ### Added support for building in a directory other than the source directory
273 This can be used with the widely-supported idiom of simply running
274 the configure script from some other directory:
281 ### Fix to save configure options for future, implicit runs of configure
283 When a user updates the source (such as with "git pull") calling
284 "make" may cause an automatic re-run of the configure script. When
285 this happens, the configure script will automatically be called with
286 the same options the user originally passed in the most-recent
287 manual invocation of configure.
289 New test-suite feature
290 ----------------------
292 ### Binary for bash for running test suite now located via PATH
294 The notmuch test suite requires a fairly recent version of bash (>=
295 bash 4). As some systems supply an older version of bash at
296 /bin/bash, the test suite is now updated to search $PATH to locate
297 the bash binary. This allows users of systems with old /bin/bash to
298 simply install bash >= 4 somewhere on $PATH before /bin and then use
301 ### Support for testing output with a trailing newline
303 Previously, some tests would fail to notice a difference in the
304 presence/absence of a trailing newline in a program output, (which
305 has led to bugs in the past). Now, carefully-written tests (using
306 `test_expect_equal_file` rather than `test_expect_equal`) will detect
307 any change in the presence/absence of a trailing newline. Many tests
308 are updated to take advantage of this.
310 ### Avoiding accessing user's $HOME while running test suite
312 The test suite now carefully creates its own HOME directory. This
313 allows the test suite to be run with no existing HOME directory, (as
314 some build systems apparently do), and avoids test-suite differences
315 due to configuration files in the users HOME directory.
321 ### Output *all* files for "notmuch search --output=files"
323 For the cases where multiple files have the same Message ID,
324 previous versions of notmuch would output only one such file. This
325 command is now fixed to correctly output all files.
327 ### Fixed spurious search results from "overlapped" indexing of addresses
329 This fixed a bug where a search for:
331 to:user@elsewhere.com
333 would incorrectly match a message sent:
335 To: user@example,com, someone@elsewhere.com
337 ### Fix --output=json when search has no results
339 A bug present since notmuch 0.4 had caused searches with no results
340 to produce an invalid json object. This is now fixed to cleanly
341 return a valid json object representing an empty array "[]" as
344 ### Fix the automatic detection of the From address for "notmuch reply" from the Received headers in some cases
346 ### Fix core dump on DragonFlyBSD due to -1 return value from `sysconf(_SC_GETPW_R_SIZE_MAX)`
348 ### Cleaned up several memory leaks
350 ### Eliminated a few, rare segmentation faults and a double-free
352 ### Fix libnotmuch library to only export notmuch API functions
354 Previous release of the notmuch library also exported some Xapian
355 C++ exception type symbols. These were never part of the library
356 interface and were never intended to be exported.
358 Emacs-interface bug fixes
359 -------------------------
361 ### Display any unexpected output or errors from "notmuch search" invocations
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.
367 ### Fix bug where some threads would be missing from large search results
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
374 ### Avoid re-compression of .gz files (and similar) when saving attachment
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.
381 ### Fix hiding of a message when a previously-hidden citation is visible
383 Previously the citation would remain visible in this case. This is
384 fixed so that hiding a message hides all parts.