+[[!meta date="2011-07-01"]]
+
Notmuch 0.6 (2011-07-01)
=======================
+
New, general features
---------------------
-Folder-based searching
- Notmuch queries can now include a search term to match the
- directories in which mail files are stored (within the mail
- storage). The syntax is as follows:
+### Folder-based searching
+
+Notmuch queries can now include a search term to match the
+directories in which mail files are stored (within the mail
+storage). The syntax is as follows:
- folder:<path>
+ folder:<path>
- For example, one might use things such as:
+For example, one might use things such as:
- folder:spam
+ folder:spam
folder:2011-*
folder:work/todo
- to match any path containing a directory "spam", "work/todo", or
- containing a directory starting with "2011-", respectively.
+to match any path containing a directory "spam", "work/todo", or
+containing a directory starting with "2011-", respectively.
- This feature is particularly useful for users of delivery-agent
- software (such as procmail or maildrop) that is filtering mail and
- delivering it to particular folders, or users of systems such as
- Gmail that use filesystem directories to indicate message tags.
+This feature is particularly useful for users of delivery-agent
+software (such as procmail or maildrop) that is filtering mail and
+delivering it to particular folders, or users of systems such as
+Gmail that use filesystem directories to indicate message tags.
- NOTE: Only messages that are newly indexed with this version of
- notmuch will be searchable with folder: terms. In order to enable
- this feature for all mail, the entire notmuch index will need to be
- rebuilt as follows:
+NOTE: Only messages that are newly indexed with this version of
+notmuch will be searchable with folder: terms. In order to enable
+this feature for all mail, the entire notmuch index will need to be
+rebuilt as follows:
- notmuch dump > notmuch.dump
- # Backup, then remove notmuch database ($MAIL/.notmuch)
- notmuch new
- notmuch restore notmuch.dump
+ notmuch dump > notmuch.dump
+ # Backup, then remove notmuch database ($MAIL/.notmuch)
+ notmuch new
+ notmuch restore notmuch.dump
-Support for PGP/MIME
+### Support for PGP/MIME
- Both the command line interface and the emacs-interface have new
- support for PGP/MIME, detailed below. Thanks to Daniel Kahn Gillmor
- and Jameson Graef Rollins for making this happen.
+Both the command-line interface and the emacs-interface have new
+support for PGP/MIME, detailed below. Thanks to Daniel Kahn Gillmor
+and Jameson Graef Rollins for making this happen.
-New, automatic tags: "signed" and "encrypted"
+### New, automatic tags: "signed" and "encrypted"
- These tags will automatically be applied to messages containing
- multipart/signed and multipart/encrypted parts.
+These tags will automatically be applied to messages containing
+multipart/signed and multipart/encrypted parts.
- NOTE: Only messages that are newly indexed with this version of
- notmuch will receive these tags.
+NOTE: Only messages that are newly indexed with this version of
+notmuch will receive these tags.
New command-line features
-------------------------
-Add new "notmuch show --verify" option for signature verification
- This option instruct notmuch to verify the signature of
- PGP/MIME-signed parts.
+### Add new "notmuch show --verify" option for signature verification
-Add new "notmuch show --decrypt" and "notmuch reply --decrypt" options
+This option instruct notmuch to verify the signature of
+PGP/MIME-signed parts.
- This option instructs notmuch to decrypt PGP/MIME-encrypted parts.
- Note that this feature currently requires gpg-agent and a passphrase entry
- tool (e.g. pinentry-gtk or pinentry-curses).
+### Add new "notmuch show --decrypt" and "notmuch reply --decrypt" options
-Proper nesting of multipart parts in "notmuch show" output
+This option instructs notmuch to decrypt PGP/MIME-encrypted parts.
+Note that this feature currently requires gpg-agent and a passphrase entry
+tool (e.g. pinentry-gtk or pinentry-curses).
- MIME parts are now display with proper nesting to reflect original
- MIME hierarchy of a message. This allows clients to correctly
- analyze the MIME structure, (such as, for example, determining to
- which parts a signature part applies).
+### Proper nesting of multipart parts in "notmuch show" output
-Add new "notmuch show --part" option
+MIME parts are now display with proper nesting to reflect original
+MIME hierarchy of a message. This allows clients to correctly
+analyze the MIME structure, (such as, for example, determining to
+which parts a signature part applies).
- This is a replacement for the older "notmuch part" command, (which
- is now deprecated—it should still work as always, but is no longer
- documented). Putting part output under "notmuch show" allows for all
- of the "notmuch show" options to be applied when extracting a single
- part, (such as --format=json for extracting a message part with JSON
- formatting).
+### Add new "notmuch show --part" option
-Deprecate "notmuch search-tags", (in favor of "notmuch search --output=tags *")
+This is a replacement for the older "notmuch part" command, (which
+is now deprecated—it should still work as always, but is no longer
+documented). Putting part output under "notmuch show" allows for all
+of the "notmuch show" options to be applied when extracting a single
+part, (such as --format=json for extracting a message part with JSON
+formatting).
- The "notmuch search-tags" sub-command has been redundant since the
- addition of the --output=tags option to "notmuch search". We now
- make that more clear by deprecating "notmuch search-tags", (dropping
- it from the documentation). We do continue to support the old syntax
- by translating it internally to the new call.
+### Deprecate "notmuch search-tags" (in favor of "notmuch search --output=tags *")
+
+The "notmuch search-tags" sub-command has been redundant since the
+addition of the --output=tags option to "notmuch search". We now
+make that more clear by deprecating "notmuch search-tags", (dropping
+it from the documentation). We do continue to support the old syntax
+by translating it internally to the new call.
Performance improvements
------------------------
-Faster searches (by doing fewer searches to construct threads)
- Whenever a user asks for search results as threads, notmuch first
- performs a search for messages matching the query, then performs
- additional searches to find other messages in the resulting threads.
+### Faster searches (by doing fewer searches to construct threads)
+
+Whenever a user asks for search results as threads, notmuch first
+performs a search for messages matching the query, then performs
+additional searches to find other messages in the resulting threads.
- Removing inefficiencies and redundancies in these secondary searches
- results in a measured speedups of 1.5x for a typical search.
+Removing inefficiencies and redundancies in these secondary searches
+results in a measured speedups of 1.5x for a typical search.
-Faster searches (by doing fewer passes to gather message data)
+### Faster searches (by doing fewer passes to gather message data)
- Optimizing Xapian data access patterns (using a single pass to get
- all message-document data rather than a pass for each data type)
- results in a measured speedup of 1.7x for a typical search.
+Optimizing Xapian data access patterns (using a single pass to get
+all message-document data rather than a pass for each data type)
+results in a measured speedup of 1.7x for a typical search.
- The benefits of this optimization combine with the preceding
- optimization. With both in place, Austin Clements measured a speedup
- of 2.5x for a search of all messages in his inbox (was 4.5s, now
- 1.8s). Thanks, Austin!
+The benefits of this optimization combine with the preceding
+optimization. With both in place, Austin Clements measured a speedup
+of 2.5x for a search of all messages in his inbox (was 4.5s, now
+1.8s). Thanks, Austin!
-Faster initial indexing
+### Faster initial indexing
- More efficient indexing of new messages results in a measured
- speedup of 1.4x for the initial indexing of 3 GB of mail (1h 14m
- rather than 1h 46m). Thanks to Austin Clements and Michal Sojka.
+More efficient indexing of new messages results in a measured
+speedup of 1.4x for the initial indexing of 3 GB of mail (1h 14m
+rather than 1h 46m). Thanks to Austin Clements and Michal Sojka.
-Make "notmuch new" faster for unchanged directories
+### Make "notmuch new" faster for unchanged directories
- Optimizing to not do any further examinations of sub-directories
- when the filesystem indicates that a directory is unchanged from the
- last "notmuch new" results in measured speedups of 8.5 for the "No
- new mail" case, (was 0.77s, now 0.09s). Thanks to Karel Zak.
+Optimizing to not do any further examinations of sub-directories
+when the filesystem indicates that a directory is unchanged from the
+last "notmuch new" results in measured speedups of 8.5 for the "No
+new mail" case, (was 0.77s, now 0.09s). Thanks to Karel Zak.
New emacs-interface features
----------------------------
-Support for PGP/MIME (GnuPG)
+### Support for PGP/MIME (GnuPG)
- Automatically indicate validity of signatures for multipart/signed
- messages. Automatically display decrypted content for
- multipart/encrypted messages. See the emacs variable
- notmuch-crypto-process-mime for more information. Note that this
- needs gpg-agent and a pinentry tool just as the command line tools.
- Also note there is no support SMIME yet.
+Automatically indicate validity of signatures for multipart/signed
+messages. Automatically display decrypted content for
+multipart/encrypted messages. See the emacs variable
+notmuch-crypto-process-mime for more information. Note that this
+needs gpg-agent and a pinentry tool just as the command-line tools.
+Also note there is no support SMIME yet.
-Output of pipe command is now displayed if pipe command fails
+### Output of pipe command is now displayed if pipe command fails
- This is extremely useful in the common use case of piping a patch to
- "git am". If git fails to cleanly merge the patch the error messages
- from the failed merge are now clearly displayed to the user, (where
- previously they were silently hidden from the user).
+This is extremely useful in the common use case of piping a patch to
+"git am". If git fails to cleanly merge the patch the error messages
+from the failed merge are now clearly displayed to the user, (where
+previously they were silently hidden from the user).
-User-selectable From address
+### User-selectable From address
- A user can choose which configured email addresses should be used as
- the From address whenever composing a new message. To do so, simply
- press C-u before the command which will open a new message. Emacs
- will prompt for the from address to use.
+A user can choose which configured email addresses should be used as
+the From address whenever composing a new message. To do so, simply
+press C-u before the command which will open a new message. Emacs
+will prompt for the from address to use.
- The user can customize the "Notmuch Identities" setting in the
- notmuch customize group in order to use addresses other than those in
- the notmuch configuration file if desired.
+The user can customize the "Notmuch Identities" setting in the
+notmuch customize group in order to use addresses other than those in
+the notmuch configuration file if desired.
- The user can also choose to always be prompted for the from address
- when composing a new message (without having to use C-u) by setting
- the "Notmuch Always Prompt For Sender" option in the notmuch
- customize group.
+The user can also choose to always be prompted for the from address
+when composing a new message (without having to use C-u) by setting
+the "Notmuch Always Prompt For Sender" option in the notmuch
+customize group.
-Hiding of repeated subjects in collapsed thread view
+### Hiding of repeated subjects in collapsed thread view
- In notmuch-show mode, if a collapsed message has the same subject as
- its parent, the subject is not shown.
-
-Automatic detection and hiding of original message in top-posted message
+In notmuch-show mode, if a collapsed message has the same subject as
+its parent, the subject is not shown.
- When a message contains a line looking something like:
+### Automatic detection and hiding of original message in top-posted message
- ----- Original Message -----
+When a message contains a line looking something like:
- emacs hides this and all subsequent lines as an "original message",
- (allowing the user to click or press enter on the "original message"
- button to display it again). This makes the handling of top-posted
- citations work much like conventional citations.
+ ----- Original Message -----
-New hooks for running code when tags are modified
+emacs hides this and all subsequent lines as an "original message",
+(allowing the user to click or press enter on the "original message"
+button to display it again). This makes the handling of top-posted
+citations work much like conventional citations.
- Some users want to perform additional actions whenever a particular
- tag is added/removed from a message. This could be used to, for
- example, interface with some external spam-recognition training
- tool. To facilitate this, two new hooks are added which can be
- modified in the following settings of the notmuch customize group:
+### New hooks for running code when tags are modified
- Notmuch Before Tag Hook
- Notmuch After Tag Hook
+Some users want to perform additional actions whenever a particular
+tag is added/removed from a message. This could be used to, for
+example, interface with some external spam-recognition training
+tool. To facilitate this, two new hooks are added which can be
+modified in the following settings of the notmuch customize group:
-New optional support for hiding some multipart/alternative parts
+ Notmuch Before Tag Hook
+ Notmuch After Tag Hook
- Many emails are sent with redundant content within a
- multipart/alternative group (such as a text/plain part as well as a
- text/html part). Users can configure the setting:
+### New optional support for hiding some multipart/alternative parts
- Notmuch Show All Multipart/Alternative Parts
+Many emails are sent with redundant content within a
+multipart/alternative group (such as a text/plain part as well as a
+text/html part). Users can configure the setting:
- to "off" in the notmuch customize group to have the interface
- automatically hide some part alternatives (such as text/html
- parts). This new part hiding is not configured by default yet
- because there's not yet a simple way to re-display such a hidden
- part if it is not actually redundant with a displayed part.
+ Notmuch Show All Multipart/Alternative Parts
-Better rendering of text/x-vcalendar parts
+to "off" in the notmuch customize group to have the interface
+automatically hide some part alternatives (such as text/html
+parts). This new part hiding is not configured by default yet
+because there's not yet a simple way to re-display such a hidden
+part if it is not actually redundant with a displayed part.
- These parts are now displayed in a format suitable for use with the
- emacs diary.
+### Better rendering of text/x-vcalendar parts
-Avoid getting confused by Subject and Author fields with newline characters
+These parts are now displayed in a format suitable for use with the
+emacs diary.
- Replacing all characters with ASCII code less than 32 with a question mark.
+### Avoid getting confused by Subject and Author fields with newline characters
-Cleaner display of From line in email messages (remove double quotes,
-and drop "name" if it's actually just a repeat of the email address).
+Replacing all characters with ASCII code less than 32 with a question mark.
+
+### Cleaner display of From line in email messages
+
+Remove double quotes, and drop "name" if it's actually just a repeat of
+the email address.
Vim interface improvements
--------------------------
-Felipe Contreras provided a number of updates for the vim interface:
+
+### Felipe Contreras provided a number of updates for the vim interface:
* Using sendmail directly rather than mailx,
* Implementing archive in show view
Bindings improvements
---------------------
-Ruby bindings are now much more complete
- Including QUERY.sort, QUERY.to_s, MESSAGE.maildir_flags_to_tags,
- MESSAGE.tags_to_maildir_flags, and MESSAGE.get_filenames
+### Ruby bindings are now much more complete
+
+Including `QUERY.sort`, `QUERY.to_s`, `MESSAGE.maildir_flags_to_tags`,
+`MESSAGE.tags_to_maildir_flags`, and `MESSAGE.get_filenames`
-* Python bindings have been upodated and extended
- (docs online at http://packages.python.org/notmuch/)
+### Python bindings have been updated and extended
- New bindings:
- - Message().get_filenames(),
- - Message().tags_to_maildir_flags(),Message().maildir_flags_to_tags()
- - list(Threads()) and list(Messages) works now
+(docs online at http://packages.python.org/notmuch/)
+
+New bindings:
+
+ - `Message().get_filenames()`, `Message().tags_to_maildir_flags()`,
+ `Message().maildir_flags_to_tags()`, `list(Threads())` and
+ `list(Messages)` works now
+ - `Message().__cmp__()` and `__hash__()`
+
+These allow, for example:
- - Message().__cmp__() and __hash__()
- These allow, for example:
if msg1 == msg2: ...
- As well as set arithmetic on Messages():
+As well as set arithmetic on `Messages()`:
+
+ s1, s2 = set(msgs1), set(msgs2)
+ s1.union(s2)
+ s2 -= s1
+
+Removed:
- s1, s2= set(msgs1), set(msgs2)
- s1.union(s2)
- s2 -= s1
+ - `len(Messages())` as it exhausted the iterator
- Removed:
- - len(Messages()) as it exausted the iterator.
- Use len(list(Messages())) or
- Query.count_messages() to get the length.
+Use `len(list(Messages()))` or `Query.count_messages()`
+to get the length.
-Added initial Go bindings in bindings/go
+### Added initial Go bindings in bindings/go
New build-system features
-------------------------
-Added support for building in a directory other than the source directory
- This can be used with the widely-supported idiom of simply running
- the configure script from some other directory:
+### Added support for building in a directory other than the source directory
- mkdir build
- cd build
- ../configure
- make
+This can be used with the widely-supported idiom of simply running
+the configure script from some other directory:
-Fix to save configure options for future, implicit runs of configure
+ mkdir build
+ cd build
+ ../configure
+ make
- When a user updates the source (such as with "git pull") calling
- "make" may cause an automatic re-run of the configure script. When
- this happens, the configure script will automatically be called with
- the same options the user originally passed in the most-recent
- manual invocation of configure.
+### Fix to save configure options for future, implicit runs of configure
+
+When a user updates the source (such as with "git pull") calling
+"make" may cause an automatic re-run of the configure script. When
+this happens, the configure script will automatically be called with
+the same options the user originally passed in the most-recent
+manual invocation of configure.
New test-suite feature
----------------------
-Binary for bash for running test suite now located via PATH.
- The notmuch test suite requires a fairly recent version of bash (>=
- bash 4). As some systems supply an older version of bash at
- /bin/bash, the test suite is now updated to search $PATH to locate
- the bash binary. This allows users of systems with old /bin/bash to
- simply install bash >= 4 somewhere on $PATH before /bin and then use
- the test suite.
+### Binary for bash for running test suite now located via PATH
+
+The notmuch test suite requires a fairly recent version of bash (>=
+bash 4). As some systems supply an older version of bash at
+/bin/bash, the test suite is now updated to search $PATH to locate
+the bash binary. This allows users of systems with old /bin/bash to
+simply install bash >= 4 somewhere on $PATH before /bin and then use
+the test suite.
-Support for testing output with a trailing newline.
+### Support for testing output with a trailing newline
- Previously, some tests would fail to notice a difference in the
- presence/absence of a trailing newline in a program output, (which
- has led to bugs in the past). Now, carefully-written tests (using
- test_expect_equal_file rather than test_expect_equal) will detect
- any change in the presence/absence of a trailing newline. Many tests
- are updated to take advantage of this.
+Previously, some tests would fail to notice a difference in the
+presence/absence of a trailing newline in a program output, (which
+has led to bugs in the past). Now, carefully-written tests (using
+`test_expect_equal_file` rather than `test_expect_equal`) will detect
+any change in the presence/absence of a trailing newline. Many tests
+are updated to take advantage of this.
-Avoiding accessing user's $HOME while running test suite
+### Avoiding accessing user's $HOME while running test suite
- The test suite now carefully creates its own HOME directory. This
- allows the test suite to be run with no existing HOME directory, (as
- some build systems apparently do), and avoids test-suite differences
- due to configuration files in the users HOME directory.
+The test suite now carefully creates its own HOME directory. This
+allows the test suite to be run with no existing HOME directory, (as
+some build systems apparently do), and avoids test-suite differences
+due to configuration files in the users HOME directory.
General bug fixes
-----------------
-Output *all* files for "notmuch search --output=files"
- For the cases where multiple files have the same Message ID,
- previous versions of notmuch would output only one such file. This
- command is now fixed to correctly output all files.
+### Output *all* files for "notmuch search --output=files"
-Fixed spurious search results from "overlapped" indexing of addresses
+For the cases where multiple files have the same Message ID,
+previous versions of notmuch would output only one such file. This
+command is now fixed to correctly output all files.
- This fixed a bug where a search for:
+### Fixed spurious search results from "overlapped" indexing of addresses
- to:user@elsewhere.com
+This fixed a bug where a search for:
- would incorrectly match a message sent:
+ to:user@elsewhere.com
- To: user@example,com, someone@elsewhere.com
+would incorrectly match a message sent:
-Fix --output=json when search has no results
+ To: user@example,com, someone@elsewhere.com
- A bug present since notmuch 0.4 had caused searches with no results
- to produce an invalid json object. This is now fixed to cleanly
- return a valid json object representing an empty array "[]" as
- expected.
+### Fix --output=json when search has no results
-fix the automatic detection of the From address for "notmuch reply"
-from the Received headers in some cases.
+A bug present since notmuch 0.4 had caused searches with no results
+to produce an invalid json object. This is now fixed to cleanly
+return a valid json object representing an empty array "[]" as
+expected.
-Fix core dump on DragonFlyBSD due to -1 return value from
-sysconf(_SC_GETPW_R_SIZE_MAX).
+### Fix the automatic detection of the From address for "notmuch reply" from the Received headers in some cases
-Cleaned up several memory leaks
+### Fix core dump on DragonFlyBSD due to -1 return value from `sysconf(_SC_GETPW_R_SIZE_MAX)`
-Eliminated a few, rare segmentation faults and a double-free.
+### Cleaned up several memory leaks
-Fix libnotmuch library to only export notmuch API functions
+### Eliminated a few, rare segmentation faults and a double-free
- Previous release of the notmuch library also exported some Xapian
- C++ exception type symbols. These were never part of the library
- interface and were never intended to be exported.
+### Fix libnotmuch library to only export notmuch API functions
+
+Previous release of the notmuch library also exported some Xapian
+C++ exception type symbols. These were never part of the library
+interface and were never intended to be exported.
Emacs-interface bug fixes
-------------------------
-Display any unexpected output or errors from "notmuch search" invocations
- Previously any misformatted output or trailing error messages were
- silently ignored. This output is now clearly displayed. This fix was
- very helpful in identifying and fixing the bug described below.
+### Display any unexpected output or errors from "notmuch search" invocations
+
+Previously any misformatted output or trailing error messages were
+silently ignored. This output is now clearly displayed. This fix was
+very helpful in identifying and fixing the bug described below.
-Fix bug where some threads would be missing from large search results
+### Fix bug where some threads would be missing from large search results
- When a search returned a "large" number of results, the emacs
- interface was incorrectly dropping one thread every time the output
- of the "notmuch search" process spanned the emacs read-buffer. This
- is now fixed.
+When a search returned a "large" number of results, the emacs
+interface was incorrectly dropping one thread every time the output
+of the "notmuch search" process spanned the emacs read-buffer. This
+is now fixed.
-Avoid re-compression of .gz files (and similar) when saving attachment
+### Avoid re-compression of .gz files (and similar) when saving attachment
- Emacs was being too clever for its own good and trying to
- re-compress pre-compressed .gz files when saving such attachments
- (potentially corrupting the attachment). The emacs interface is
- fixed to avoid this bug.
+Emacs was being too clever for its own good and trying to
+re-compress pre-compressed .gz files when saving such attachments
+(potentially corrupting the attachment). The emacs interface is
+fixed to avoid this bug.
-Fix hiding of a message when a previously-hidden citation is visible
+### Fix hiding of a message when a previously-hidden citation is visible
- Previously the citation would remain visible in this case. This is
- fixed so that hiding a message hides all parts.
+Previously the citation would remain visible in this case. This is
+fixed so that hiding a message hides all parts.