+ <a href='../notmuch-config-1/'>config</a>(1) for details.
+
+ Supported options for <b>tag</b> include
+
+ <b>--remove-all</b>
+
+ Remove all tags from each message matching the search terms
+ before applying the tag changes appearing on the command line.
+ This means setting the tags of each message to the tags to be
+ added. If there are no tags to be added, the messages will have
+ no tags.
+
+ <b>--batch</b>
+
+ Read batch tagging operations from a file (stdin by default).
+ This is more efficient than repeated <b>notmuch</b> <b>tag</b> invocations.
+ See <b>TAG</b> <b>FILE</b> <b>FORMAT</b> below for the input format. This option is
+ not compatible with specifying tagging on the command line.
+
+ <b>--input=</b><filename>
+
+ Read input from given file, instead of from stdin. Implies
+ <b>--batch</b>.
+</pre>
+
+<h2>TAG FILE FORMAT</h2>
+<pre>
+ The input must consist of lines of the format:
+
+ +<<u>tag</u>>|-<<u>tag</u>> [...] [--] <<u>query</u>>
+
+ Each line is interpreted similarly to <b>notmuch</b> <b>tag</b> command line argu-
+ ments. The delimiter is one or more spaces ' '. Any characters in <<u>tag</u>>
+ <b>may</b> be hex-encoded with %NN where NN is the hexadecimal value of the
+ character. To hex-encode a character with a multi-byte UTF-8 encoding,
+ hex-encode each byte. Any spaces in <tag> <b>must</b> be hex-encoded as %20.
+ Any characters that are not part of <<u>tag</u>> <b>must</b> <b>not</b> be hex-encoded.
+
+ In the future tag:"tag with spaces" style quoting may be supported for
+ <<u>tag</u>> as well; for this reason all double quote characters in <<u>tag</u>>
+ <b>should</b> be hex-encoded.
+
+ The <<u>query</u>> should be quoted using Xapian boolean term quoting rules:
+ if a term contains whitespace or a close paren or starts with a double
+ quote, it must be enclosed in double quotes (not including any prefix)
+ and double quotes inside the term must be doubled (see below for exam-
+ ples).
+
+ Leading and trailing space ' ' is ignored. Empty lines and lines begin-
+ ning with '#' are ignored.
+</pre>
+
+<h3> EXAMPLE</h3>
+<pre>
+ The following shows a valid input to batch tagging. Note that only the
+ isolated '*' acts as a wildcard. Also note the two different quotings
+ of the tag <b>space</b> <b>in</b> <b>tags</b>
+ +winner *
+ +foo::bar%25 -- (One and Two) or (One and tag:winner)
+ +found::it -- tag:foo::bar%
+ # ignore this line and the next
+
+ +space%20in%20tags -- Two
+ # add tag '(tags)', among other stunts.
+ +crazy{ +(tags) +&are +#possible -- tag:"space in tags"
+ +match*crazy -- tag:crazy{
+ +some_tag -- id:"this is ""nauty)"""