See help for `message-citation-line-format` for details.
+## What are sexp queries?
+
+For the syntax of sexp queries, see [[the man page|manpages/notmuch-sexp-queries-7]].
+
+To see if your version of notmuch supports them, run
+
+ $ notmuch config get built_with.sexp_queries
+
## How do I search for messages that have no tags?
-Unfortunately, there is no way to do this directly.
+To do this directly, you need a recent notmuch compiled with sexp
+queries (see above). You can then run
-However, it's possible to accomplish this using two searches in shell. First,
+ $ notmuch search --query=sexp --output=messages '(not (tag *))'
+
+The same style of query should work for any prefix, even user defined
+prefixes like `List` (see below).
+
+Otherwise, it's possible to accomplish this using two searches in shell. First,
you need to query all tags in the database, and transform the result into a
query that matches messages that have none of those tags:
`093999529acc2f86900d91fed0c7f7af301ab94a`, e.g. with the following
patch.
-[[!format text """
-index 80e578b85..a47f14a68 100644
---- a/xapian-core/backends/glass/glass_postlist.cc
-+++ b/xapian-core/backends/glass/glass_postlist.cc
-@@ -759,7 +759,7 @@ GlassPostList::open_nearby_postlist(const std::string & term_,
- (void)need_pos;
- if (term_.empty())
- RETURN(NULL);
-- if (!this_db.get() || this_db->postlist_table.is_modified())
-+ if (!this_db.get() || this_db->postlist_table.is_writable())
- RETURN(NULL);
- RETURN(new GlassPostList(this_db, term_, cursor->clone()));
- }
-"""]]
+
+ index 80e578b85..a47f14a68 100644
+ --- a/xapian-core/backends/glass/glass_postlist.cc
+ +++ b/xapian-core/backends/glass/glass_postlist.cc
+ @@ -759,7 +759,7 @@ GlassPostList::open_nearby_postlist(const std::string & term_,
+ (void)need_pos;
+ if (term_.empty())
+ RETURN(NULL);
+ - if (!this_db.get() || this_db->postlist_table.is_modified())
+ + if (!this_db.get() || this_db->postlist_table.is_writable())
+ RETURN(NULL);
+ RETURN(new GlassPostList(this_db, term_, cursor->clone()));
+ }
+