]> git.cworth.org Git - notmuch-wiki/blob - faq.mdwn
fix link
[notmuch-wiki] / faq.mdwn
1 [[!img notmuch-logo.png alt="Notmuch logo" class="left"]]
2 # Frequently Asked Questions
3
4 [[!toc levels=2]]
5
6 ## How come this query matches mails in folder:2013? `notmuch search --output=files folder:inbox`
7
8 You have duplicates of a message (or messages) in both folders.
9
10 Notmuch searches are message based. Multiple files may be associated
11 with the same message (i.e. the files have identical Message-ID). A
12 `folder:` search will match the folder of any of the files. The
13 `--output=files` option outputs all the files of all matching messages.
14
15 ## How come this query does not list all the emails on the file system? `notmuch search --output=files -- folder:inbox`
16
17 You may have emails that only have some of the excluded tags.
18
19 Notmuch can be configured to exclude some tags while searching. You can list excluded tags with
20
21         $ notmuch config get search.exclude_tags
22         deleted
23
24 To verify this is the reason of the discrepancy, add the excluded tags explicitly to your query.
25
26         $ notmuch search --output=files -- folder:inbox tag:deleted
27
28 ## Shouldn't notmuch support inline PGP?
29
30 [Why it might not be a good idea](https://dkg.fifthhorseman.net/notes/inline-pgp-harmful/)
31
32 ## How do I delete messages
33
34 See [[excluding]].
35
36 ## How do I configure the citation line when replying in Emacs?
37
38         (setq message-citation-line-format "On %a, %d %b %Y, %f wrote:")
39         (setq message-citation-line-function 'message-insert-formatted-citation-line)
40
41 See help for `message-citation-line-format` for details.
42
43 ## What are sexp queries?
44
45 For the syntax of sexp queries, see [the manual
46 page](https://notmuchmail.org/doc/latest/man7/notmuch-sexp-queries.html).
47
48 To see if your version of notmuch supports them, run
49
50         $ notmuch config get built_with.sexp_queries
51
52 ## How do I search for messages that have no tags?
53
54 To do this directly, you need a recent notmuch compiled with sexp
55 queries (see above). You can then run
56
57         $ notmuch search --query=sexp --output=messages '(not (tag *))'
58
59 The same style of query should work for any prefix, even user defined
60 prefixes like `List` (see below).
61
62 Otherwise, it's possible to accomplish this using two searches in shell. First,
63 you need to query all tags in the database, and transform the result into a
64 query that matches messages that have none of those tags:
65
66         $ notmuch search --output=tags \* | sed 's/^/not tag:/;2~1s/^/and /'
67
68 Next, use that to query the messages:
69
70         $ notmuch search $(notmuch search --output=tags \* | \
71                 sed 's/^/not tag:/;2~1s/^/and /')
72
73 ## How do I search for punctuation, specific special characters, or regexp?
74
75 Please see the [notmuch-search-terms manual
76 page](https://notmuchmail.org/doc/latest/man7/notmuch-search-terms.html) first.
77
78 The main thing to understand is that Xapian, and therefore Notmuch, searches are
79 closer to natural language searches than regular expression
80 searches. Punctuation is mostly ignored.
81
82 The boolean prefix searches (see Boolean and Probabilistic Prefixes in the man
83 page), such as tag: or path: searches, need an exact match.
84
85 For [specific
86 fields](https://notmuchmail.org/doc/latest/man7/notmuch-search-terms.html#search-prefixes)
87 it is possible to use regex searches (although these are often
88 noticeably slower than native Xapian queries). The limited set of
89 fields is a quirk of implementation which requires a Xapian "value
90 slot" in the database schema. Adding regex support for more fields to
91 would require of adding more value slots to the schema. The
92 performance impact of that needs to be experimentally evaluated, and
93 assuming it is not too bad, some database upgrade code would need to
94 be written.
95
96 ## How do I search for folders or paths with spaces?
97
98 The spaces in the names must be escaped. For example if you use bash or zsh,
99 you can search for messages with tag `foo` in folder `INBOX/folder with spaces`
100 with this query:
101
102         $ notmuch search tag:foo 'folder:"INBOX/folder with spaces"'
103
104 ## How do I search for the `List-Id:` header?
105
106 See `index.header.<prefix>` in `notmuch-config(1)` for details. TLD;R:
107
108     notmuch config set index.header.List List-Id
109
110 ## Can I use notmuch with grsec?
111
112 Sure! It works out of the box. If you have TPE enabled (trusted path execution),
113 make sure the user is executing the script belongs to the
114 `kernel.grsecurity.tpe_gid` (in debian this is grsec-tpe).
115 This is required in order to run the `pre-new` and `post-new` hooks.
116
117 ## Can I tag threads?
118
119 No. Tagging is message based.
120
121 It is possible, however, to make tags propagate to all messages in a thread
122 using a little bit of scripting in the [post-new
123 hook](https://notmuchmail.org/doc/latest/man5/notmuch-hooks.html). For example, to add the muted tag to all
124 messages in threads that have at least one message with the muted tag:
125
126         THREAD_TAGS="muted"
127         for tag in "$THREAD_TAGS"; do
128                 notmuch tag +$tag thread:{tag:$tag}
129         done
130
131 You can add other tags to `THREAD_TAGS` as needed. Note that this is
132 one way only; you need to explicitly remove the tag from all the
133 messages in a thread to stop it from propagating again. See
134 [notmuch-search-terms](https://notmuchmail.org/doc/latest/man7/notmuch-search-terms.html)
135 for discussion of `thread:{}` queries.
136
137
138 ## How can I extract a git patchset for an email thread?
139
140 See [notmuch-extract-patch](https://github.com/aaptel/notmuch-extract-patch).
141
142 ## T150-tagging.sh is failing with Xapian 1.4.6
143
144 This is (probably) a bug in this point release of Xapian, should be
145 fixed in 1.4.7.  Try reverting Xapian commit
146 `093999529acc2f86900d91fed0c7f7af301ab94a`, e.g. with the following
147 patch.
148
149
150     index 80e578b85..a47f14a68 100644
151     --- a/xapian-core/backends/glass/glass_postlist.cc
152     +++ b/xapian-core/backends/glass/glass_postlist.cc
153     @@ -759,7 +759,7 @@ GlassPostList::open_nearby_postlist(const std::string & term_,
154          (void)need_pos;
155          if (term_.empty())
156             RETURN(NULL);
157     -    if (!this_db.get() || this_db->postlist_table.is_modified())
158     +    if (!this_db.get() || this_db->postlist_table.is_writable())
159             RETURN(NULL);
160          RETURN(new GlassPostList(this_db, term_, cursor->clone()));
161      }
162