From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id 0A/wOckbqGBuDwEAgWs5BA (envelope-from ) for ; Fri, 21 May 2021 22:44:57 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id WByhNckbqGC4eQAAB5/wlQ (envelope-from ) for ; Fri, 21 May 2021 20:44:57 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 3BF561A4AD for ; Fri, 21 May 2021 22:44:57 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id B05D82903B; Fri, 21 May 2021 16:44:38 -0400 (EDT) Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) by mail.notmuchmail.org (Postfix) with ESMTPS id DEBA227551 for ; Fri, 21 May 2021 16:44:32 -0400 (EDT) Received: by mail-lf1-x131.google.com with SMTP id j6so28870175lfr.11 for ; Fri, 21 May 2021 13:44:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nikula-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9dUG1CAgVLkmVCKGiYrTSvMMa3yGa1A9ol38KeSvwq8=; b=sjAMpS+ZCq4mbX6lJRCMdyfJzRKeEEnxW3SMzRQ/Sp4jfqbRrVNnhDX+5fO92CO8+g 9/On2drIrJtn7iyJdT5Nyp/vXkJiYozHp4gyB1U5alsTTiNOltbH/fzbUqvAmA1EMRsR OvBuj+/82N1uJ8WE4UXy1t73K1ZhV7imgLhD6QKv/Q7ICVlNybjgm5gNGVU7dNeaTAY2 caGH5osX6YlrsdtDl2a7Za1Xk4QyGQrWUJgWlnrBKvX2tFXZKwuDnLNkc5Y9Casun0xF HX9xkMtY/K714rk6pL/Go/7q/4R3pf7UcAuoKa+KsZ8ZREIBXEH8tvKCcfr8nC9d9RO+ loQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9dUG1CAgVLkmVCKGiYrTSvMMa3yGa1A9ol38KeSvwq8=; b=Qq0hAEYf31eyQ3de9mWchQDsDnnGG+g405cDJBVJ7hil8xrG9rnsoPRtsOpMVTEVRW THY2a/gO+mdC4Aj5CzKkXZwx1GJ7Hq+AZv/HzkAOhN0Tb6/8686yjeX3kKhLaPtSTX8f CaE47MKzJUForMe0RJcd5a1MT/BDYEzh6hrRwm1Ti74qBBWtx0Wlv9EDYlKxm9gk/c/C ZY2YDc0O7D+mwG885ZD9KXxmzsBQqkLYBTMYMDwNDrgtKMrsUBEcnX9mW+57a/OZBKpI pFestVrUfAtjpVTJ/9J7ZRgJOJTSTtBfZU26ePfTAU9q7GuG9RaGBiCCXKp6hv/T5gTR VSAQ== X-Gm-Message-State: AOAM531ppunJ/W7nlH5O95IxWc4tuXMM2ZJehTH54EpZ9AFiIFc4g5gN 2UjivWV6n91t6FVjnXcJpuLLs1vgRBnQ9Vbk0e0= X-Google-Smtp-Source: ABdhPJw/+O2qu2G7xWLkc0ucvLKHLl9asoh0mffnWPEdt+CsL21+CgPOaXKKv/Axz7UG19xdOC13gA== X-Received: by 2002:ac2:5cc4:: with SMTP id f4mr13228lfq.83.1621629867777; Fri, 21 May 2021 13:44:27 -0700 (PDT) Received: from localhost (87-95-122-4.bb.dnainternet.fi. [87.95.122.4]) by smtp.gmail.com with ESMTPSA id b44sm722194ljr.68.2021.05.21.13.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 May 2021 13:44:27 -0700 (PDT) From: Jani Nikula To: notmuch@notmuchmail.org Cc: jani@nikula.org Subject: [PATCH 4/5] doc: use program and option directives to document options Date: Fri, 21 May 2021 23:44:12 +0300 Message-Id: <20210521204413.554563-5-jani@nikula.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210521204413.554563-1-jani@nikula.org> References: <20210521204413.554563-1-jani@nikula.org> MIME-Version: 1.0 Message-ID-Hash: VNEBF4MKLQ5ROSBQGUMURUOQ7BI4Z75U X-Message-ID-Hash: VNEBF4MKLQ5ROSBQGUMURUOQ7BI4Z75U X-MailFrom: jani@nikula.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1621629897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=vKvhKp5AscygX6EnSINZ5RHwfimxxqVPGQcwPobwgnA=; b=HgP4ZVw5NcgM+YTLeWnQHxHhyGP8sLSiIbXSTLLiSSg1s6NmQUF8yKBPNIcHS8siKZQfmk oxI0ll8c2IUm2yuaTnfAGsjJoEy9b4e9yoTU1Fa1e4oxIuUsKCKRYSF/Lu1Eio10HMbo8M m7byBoRff1nSlxdAPMTG1IDKpIDnLvkj0s7gcQVR+E4Y0uhc/P9izaiuX6rXiLNzGK95cF cIkVzmb9fzshGLI+iOtHgZ0TtONrzXQhyGcBFaaovW+5ALq1JLvquaP/hfp7KDkL7AG0Bp hzkIHgQBNYWu/JsTCzlBBb0r7zwFPZYLgvsJ+YdRoU8MWTHKxQVIp0X7s83npA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1621629897; a=rsa-sha256; cv=none; b=nGRBBYlQZP8sxbEhic9P/LKuruilZa7qsuPTNFSq1OxLa5BMbf/ps9OqFpAjmoqa9ef8vA BZkCoj0Ve2OFM9ulFO9bAnA/5QbIjvakzoiGAzs0HGhcHxVwGysbReQQZnPunpNmpbT9RJ ihABguNjVDviYu9uSlk3/+UL9sBnX8feE70rGB2UM+WYdNKaPkRiJNXnsU/Wcje2pR1Ntp oFxrBeWRVLgh2nNtThGUT4bsxybmJm2UAcWbFciXnNHqD2z9xLWv+T2nc2JgOvvqZjNY8R RFf+kzg0ksZLetd7Z6tsjQcBrZxWSVCX+RBsl73r6438iOzHRzZ4HxgaUVpsNw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=nikula-org.20150623.gappssmtp.com header.s=20150623 header.b=sjAMpS+Z; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -0.07 Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=nikula-org.20150623.gappssmtp.com header.s=20150623 header.b=sjAMpS+Z; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 3BF561A4AD X-Spam-Score: -0.07 X-Migadu-Scanner: scn0.migadu.com X-TUID: 41rl/25kkLrz Use the program and option directives to document the subcommand options. This unifies a lot of option documentation throughout. This also makes it possible to reference options with :option:`--foo` (within .. program::) or :option:`subcommand --foo` (globally). This is left for later work. See https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#directive-program Note: There is a lot of indentation change, but intentionally there is no reflow. Using 'git diff -w' or 'git show -w' to ignore white space changes makes this a very easy change to review. --- doc/man1/notmuch-address.rst | 174 +++++++++-------- doc/man1/notmuch-compact.rst | 20 +- doc/man1/notmuch-config.rst | 45 +++-- doc/man1/notmuch-count.rst | 71 ++++--- doc/man1/notmuch-dump.rst | 146 +++++++------- doc/man1/notmuch-emacs-mua.rst | 80 ++++---- doc/man1/notmuch-insert.rst | 100 +++++----- doc/man1/notmuch-new.rst | 67 ++++--- doc/man1/notmuch-reindex.rst | 47 ++--- doc/man1/notmuch-reply.rst | 117 +++++------ doc/man1/notmuch-restore.rst | 118 ++++++------ doc/man1/notmuch-search.rst | 234 +++++++++++----------- doc/man1/notmuch-show.rst | 343 +++++++++++++++++---------------- doc/man1/notmuch-tag.rst | 37 ++-- doc/man1/notmuch.rst | 44 +++-- 15 files changed, 874 insertions(+), 769 deletions(-) diff --git a/doc/man1/notmuch-address.rst b/doc/man1/notmuch-address.rst index 9eae65cbae8f..7423b6295508 100644 --- a/doc/man1/notmuch-address.rst +++ b/doc/man1/notmuch-address.rst @@ -20,89 +20,97 @@ See :any:`notmuch-search-terms(7)` for details of the supported syntax for Supported options for **address** include -``--format=``\ (**json**\ \|\ **sexp**\ \|\ **text**\ \|\ **text0**) - Presents the results in either JSON, S-Expressions, newline - character separated plain-text (default), or null character - separated plain-text (compatible with :manpage:`xargs(1)` -0 - option where available). - -``--format-version=N`` - Use the specified structured output format version. This is - intended for programs that invoke :any:`notmuch(1)` internally. If - omitted, the latest supported version will be used. - -``--output=(sender|recipients|count|address)`` - Controls which information appears in the output. This option can - be given multiple times to combine different outputs. When - neither ``--output=sender`` nor ``--output=recipients`` is - given, ``--output=sender`` is implied. - - **sender** - Output all addresses from the *From* header. - - Note: Searching for **sender** should be much faster than - searching for **recipients**, because sender addresses are - cached directly in the database whereas other addresses need - to be fetched from message files. - - **recipients** - Output all addresses from the *To*, *Cc* and *Bcc* headers. - - **count** - Print the count of how many times was the address encountered - during search. - - Note: With this option, addresses are printed only after the - whole search is finished. This may take long time. - - **address** - Output only the email addresses instead of the full mailboxes - with names and email addresses. This option has no effect on - the JSON or S-Expression output formats. - -``--deduplicate=(no|mailbox|address)`` - Control the deduplication of results. - - **no** - Output all occurrences of addresses in the matching - messages. This is not applicable with ``--output=count``. - - **mailbox** - Deduplicate addresses based on the full, case sensitive name - and email address, or mailbox. This is effectively the same as - piping the ``--deduplicate=no`` output to **sort | uniq**, except - for the order of results. This is the default. - - **address** - Deduplicate addresses based on the case insensitive address - part of the mailbox. Of all the variants (with different name - or case), print the one occurring most frequently among the - matching messages. If ``--output=count`` is specified, include all - variants in the count. - -``--sort=``\ (**newest-first**\ \|\ **oldest-first**) - This option can be used to present results in either chronological - order (**oldest-first**) or reverse chronological order - (**newest-first**). - - By default, results will be displayed in reverse chronological - order, (that is, the newest results will be displayed first). - - However, if either ``--output=count`` or ``--deduplicate=address`` is - specified, this option is ignored and the order of the results is - unspecified. - -``--exclude=(true|false)`` - A message is called "excluded" if it matches at least one tag in - search.exclude\_tags that does not appear explicitly in the search - terms. This option specifies whether to omit excluded messages in - the search process. - - The default value, **true**, prevents excluded messages from - matching the search terms. - - **false** allows excluded messages to match search terms and - appear in displayed results. +.. program:: address + +.. option:: --format=(json|sexp|text|text0) + + Presents the results in either JSON, S-Expressions, newline + character separated plain-text (default), or null character + separated plain-text (compatible with :manpage:`xargs(1)` -0 + option where available). + +.. option:: --format-version=N + + Use the specified structured output format version. This is + intended for programs that invoke :any:`notmuch(1)` internally. If + omitted, the latest supported version will be used. + +.. option:: --output=(sender|recipients|count|address) + + Controls which information appears in the output. This option can + be given multiple times to combine different outputs. When + neither ``--output=sender`` nor ``--output=recipients`` is + given, ``--output=sender`` is implied. + + **sender** + Output all addresses from the *From* header. + + Note: Searching for **sender** should be much faster than + searching for **recipients**, because sender addresses are + cached directly in the database whereas other addresses need + to be fetched from message files. + + **recipients** + Output all addresses from the *To*, *Cc* and *Bcc* headers. + + **count** + Print the count of how many times was the address encountered + during search. + + Note: With this option, addresses are printed only after the + whole search is finished. This may take long time. + + **address** + Output only the email addresses instead of the full mailboxes + with names and email addresses. This option has no effect on + the JSON or S-Expression output formats. + +.. option:: --deduplicate=(no|mailbox|address) + + Control the deduplication of results. + + **no** + Output all occurrences of addresses in the matching + messages. This is not applicable with ``--output=count``. + + **mailbox** + Deduplicate addresses based on the full, case sensitive name + and email address, or mailbox. This is effectively the same as + piping the ``--deduplicate=no`` output to **sort | uniq**, except + for the order of results. This is the default. + + **address** + Deduplicate addresses based on the case insensitive address + part of the mailbox. Of all the variants (with different name + or case), print the one occurring most frequently among the + matching messages. If ``--output=count`` is specified, include all + variants in the count. + +.. option:: --sort=(newest-first|oldest-first) + + This option can be used to present results in either chronological + order (**oldest-first**) or reverse chronological order + (**newest-first**). + + By default, results will be displayed in reverse chronological + order, (that is, the newest results will be displayed first). + + However, if either ``--output=count`` or ``--deduplicate=address`` is + specified, this option is ignored and the order of the results is + unspecified. + +.. option:: --exclude=(true|false) + + A message is called "excluded" if it matches at least one tag in + search.exclude\_tags that does not appear explicitly in the search + terms. This option specifies whether to omit excluded messages in + the search process. + + The default value, **true**, prevents excluded messages from + matching the search terms. + + **false** allows excluded messages to match search terms and + appear in displayed results. EXIT STATUS =========== diff --git a/doc/man1/notmuch-compact.rst b/doc/man1/notmuch-compact.rst index 3e3e70c532ca..cb1c858b1e4a 100644 --- a/doc/man1/notmuch-compact.rst +++ b/doc/man1/notmuch-compact.rst @@ -26,14 +26,18 @@ process (which may be quite long) to protect data integrity. Supported options for **compact** include -``--backup=``\ - Save the current database to the given directory before replacing - it with the compacted database. The backup directory must not - exist and it must reside on the same mounted filesystem as the - current database. - -``--quiet`` - Do not report database compaction progress to stdout. +.. program:: compact + +.. option:: --backup= + + Save the current database to the given directory before replacing + it with the compacted database. The backup directory must not + exist and it must reside on the same mounted filesystem as the + current database. + +.. option:: --quiet + + Do not report database compaction progress to stdout. SEE ALSO ======== diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst index 129d4b810261..af126289a97f 100644 --- a/doc/man1/notmuch-config.rst +++ b/doc/man1/notmuch-config.rst @@ -19,32 +19,37 @@ DESCRIPTION The **config** command can be used to get or set settings in the notmuch configuration file and corresponding database. -**get** - The value of the specified configuration item is printed to - stdout. If the item has multiple values (it is a list), each value - is separated by a newline character. +.. program:: config -**set** - The specified configuration item is set to the given value. To - specify a multiple-value item (a list), provide each value as a - separate command-line argument. +.. option:: get - If no values are provided, the specified configuration item will - be removed from the configuration file. + The value of the specified configuration item is printed to + stdout. If the item has multiple values (it is a list), each value + is separated by a newline character. - With the `--database` option, updates configuration metadata - stored in the database, rather than the default (text) - configuration file. +.. option:: set -**list** - Every configuration item is printed to stdout, each on a separate - line of the form:: + The specified configuration item is set to the given value. To + specify a multiple-value item (a list), provide each value as a + separate command-line argument. - section.item=value + If no values are provided, the specified configuration item will + be removed from the configuration file. - No additional whitespace surrounds the dot or equals sign - characters. In a multiple-value item (a list), the values are - separated by semicolon characters. + With the `--database` option, updates configuration metadata + stored in the database, rather than the default (text) + configuration file. + +.. option:: list + + Every configuration item is printed to stdout, each on a separate + line of the form:: + + section.item=value + + No additional whitespace surrounds the dot or equals sign + characters. In a multiple-value item (a list), the values are + separated by semicolon characters. The available configuration items are described below. Non-absolute paths are presumed relative to `$HOME` for items in section diff --git a/doc/man1/notmuch-count.rst b/doc/man1/notmuch-count.rst index 61686d359399..9a7e4bacf459 100644 --- a/doc/man1/notmuch-count.rst +++ b/doc/man1/notmuch-count.rst @@ -24,38 +24,45 @@ See :any:`notmuch-search-terms(7)` for details of the supported syntax for Supported options for **count** include -``--output=(messages|threads|files)`` - **messages** - Output the number of matching messages. This is the default. - - **threads** - Output the number of matching threads. - - **files** - Output the number of files associated with matching - messages. This may be bigger than the number of matching - messages due to duplicates (i.e. multiple files having the - same message-id). - -``--exclude=(true|false)`` - Specify whether to omit messages matching search.exclude\_tags from - the count (the default) or not. - -``--batch`` - Read queries from a file (stdin by default), one per line, and - output the number of matching messages (or threads) to stdout, one - per line. On an empty input line the count of all messages (or - threads) in the database will be output. This option is not - compatible with specifying search terms on the command line. - -``--lastmod`` - Append lastmod (counter for number of database updates) and UUID - to the output. lastmod values are only comparable between - databases with the same UUID. - -``--input=``\ - Read input from given file, instead of from stdin. Implies - ``--batch``. +.. program:: count + +.. option:: --output=(messages|threads|files) + + **messages** + Output the number of matching messages. This is the default. + + **threads** + Output the number of matching threads. + + **files** + Output the number of files associated with matching + messages. This may be bigger than the number of matching + messages due to duplicates (i.e. multiple files having the + same message-id). + +.. option:: --exclude=(true|false) + + Specify whether to omit messages matching search.exclude\_tags from + the count (the default) or not. + +.. option:: --batch + + Read queries from a file (stdin by default), one per line, and + output the number of matching messages (or threads) to stdout, one + per line. On an empty input line the count of all messages (or + threads) in the database will be output. This option is not + compatible with specifying search terms on the command line. + +.. option:: --lastmod + + Append lastmod (counter for number of database updates) and UUID + to the output. lastmod values are only comparable between + databases with the same UUID. + +.. option:: --input= + + Read input from given file, instead of from stdin. Implies + ``--batch``. SEE ALSO ======== diff --git a/doc/man1/notmuch-dump.rst b/doc/man1/notmuch-dump.rst index 57c462979986..4319c5c31268 100644 --- a/doc/man1/notmuch-dump.rst +++ b/doc/man1/notmuch-dump.rst @@ -28,76 +28,82 @@ the remaining arguments are search terms. Supported options for **dump** include -``--gzip`` - Compress the output in a format compatible with :manpage:`gzip(1)`. - -``--format=(sup|batch-tag)`` - Notmuch restore supports two plain text dump formats, both with - one message-id per line, followed by a list of tags. - - **batch-tag** - The default **batch-tag** dump format is intended to more - robust against malformed message-ids and tags containing - whitespace or non-\ :manpage:`ascii(7)` characters. Each line - has the form:: - - +<*encoded-tag*\ > +<*encoded-tag*\ > ... -- id:<*quoted-message-id*\ > - - Tags are hex-encoded by replacing every byte not matching the - regex **[A-Za-z0-9@=.,\_+-]** with **%nn** where nn is the two - digit hex encoding. The message ID is a valid Xapian query, - quoted using Xapian boolean term quoting rules: if the ID - contains whitespace or a close paren or starts with a double - quote, it must be enclosed in double quotes and double quotes - inside the ID must be doubled. The astute reader will notice - this is a special case of the batch input format for - :any:`notmuch-tag(1)`; note that the single message-id query is - mandatory for :any:`notmuch-restore(1)`. - - **sup** - The **sup** dump file format is specifically chosen to be - compatible with the format of files produced by - :manpage:`sup-dump(1)`. So if you've previously been using sup - for mail, then the :any:`notmuch-restore(1)` command provides - you a way to import all of your tags (or labels as sup calls - them). Each line has the following form:: - - <*message-id*\ > **(** <*tag*\ > ... **)** - - with zero or more tags are separated by spaces. Note that - (malformed) message-ids may contain arbitrary non-null - characters. Note also that tags with spaces will not be - correctly restored with this format. - -``--include=(config|properties|tags)`` - Control what kind of metadata is included in the output. - - **config** - Output configuration data stored in the database. Each line - starts with "#@ ", followed by a space separated key-value - pair. Both key and value are hex encoded if needed. - - **properties** - Output per-message (key,value) metadata. Each line starts - with "#= ", followed by a message id, and a space separated - list of key=value pairs. Ids, keys and values are hex encoded - if needed. See :any:`notmuch-properties(7)` for more details. - - **tags** - Output per-message boolean metadata, namely tags. See *format* above - for description of the output. - - The default is to include all available types of data. The option - can be specified multiple times to select some subset. As of - version 3 of the dump format, there is a header line of the - following form:: - - #notmuch-dump <*format*>:<*version*> <*included*> - - where <*included*> is a comma separated list of the above options. - -``--output=``\ - Write output to given file instead of stdout. +.. program:: dump + +.. option:: --gzip + + Compress the output in a format compatible with :manpage:`gzip(1)`. + +.. option:: --format=(sup|batch-tag) + + Notmuch restore supports two plain text dump formats, both with + one message-id per line, followed by a list of tags. + + **batch-tag** + The default **batch-tag** dump format is intended to more + robust against malformed message-ids and tags containing + whitespace or non-\ :manpage:`ascii(7)` characters. Each line + has the form:: + + +<*encoded-tag*\ > +<*encoded-tag*\ > ... -- id:<*quoted-message-id*\ > + + Tags are hex-encoded by replacing every byte not matching the + regex **[A-Za-z0-9@=.,\_+-]** with **%nn** where nn is the two + digit hex encoding. The message ID is a valid Xapian query, + quoted using Xapian boolean term quoting rules: if the ID + contains whitespace or a close paren or starts with a double + quote, it must be enclosed in double quotes and double quotes + inside the ID must be doubled. The astute reader will notice + this is a special case of the batch input format for + :any:`notmuch-tag(1)`; note that the single message-id query is + mandatory for :any:`notmuch-restore(1)`. + + **sup** + The **sup** dump file format is specifically chosen to be + compatible with the format of files produced by + :manpage:`sup-dump(1)`. So if you've previously been using sup + for mail, then the :any:`notmuch-restore(1)` command provides + you a way to import all of your tags (or labels as sup calls + them). Each line has the following form:: + + <*message-id*\ > **(** <*tag*\ > ... **)** + + with zero or more tags are separated by spaces. Note that + (malformed) message-ids may contain arbitrary non-null + characters. Note also that tags with spaces will not be + correctly restored with this format. + +.. option:: --include=(config|properties|tags) + + Control what kind of metadata is included in the output. + + **config** + Output configuration data stored in the database. Each line + starts with "#@ ", followed by a space separated key-value + pair. Both key and value are hex encoded if needed. + + **properties** + Output per-message (key,value) metadata. Each line starts + with "#= ", followed by a message id, and a space separated + list of key=value pairs. Ids, keys and values are hex encoded + if needed. See :any:`notmuch-properties(7)` for more details. + + **tags** + Output per-message boolean metadata, namely tags. See *format* above + for description of the output. + + The default is to include all available types of data. The option + can be specified multiple times to select some subset. As of + version 3 of the dump format, there is a header line of the + following form:: + + #notmuch-dump <*format*>:<*version*> <*included*> + + where <*included*> is a comma separated list of the above options. + +.. option:: --output= + + Write output to given file instead of stdout. SEE ALSO ======== diff --git a/doc/man1/notmuch-emacs-mua.rst b/doc/man1/notmuch-emacs-mua.rst index c0d5b1a7c476..d8af08bda47a 100644 --- a/doc/man1/notmuch-emacs-mua.rst +++ b/doc/man1/notmuch-emacs-mua.rst @@ -17,50 +17,64 @@ subject, recipients, and message body, or mailto: URL. Supported options for **emacs-mua** include -``-h, --help`` - Display help. +.. program:: emacs-mua -``-s, --subject=``\ - Specify the subject of the message. +.. option:: -h, --help -``--to=``\ - Specify a recipient (To). + Display help. -``-c, --cc=``\ - Specify a carbon-copy (Cc) recipient. +.. option:: -s, --subject= -``-b, --bcc=``\ - Specify a blind-carbon-copy (Bcc) recipient. + Specify the subject of the message. -``-i, --body=``\ - Specify a file to include into the body of the message. +.. option:: --to= -``--hello`` - Go to the Notmuch hello screen instead of the message composition - window if no message composition parameters are given. + Specify a recipient (To). -``--no-window-system`` - Even if a window system is available, use the current terminal. +.. option:: -c, --cc= -``--client`` - Use :manpage:`emacsclient(1)`, rather than - :manpage:`emacs(1)`. For :manpage:`emacsclient(1)` to work, you - need an already running Emacs with a server, or use - ``--auto-daemon``. + Specify a carbon-copy (Cc) recipient. -``--auto-daemon`` - Automatically start Emacs in daemon mode, if the Emacs server is - not running. Applicable with ``--client``. Implies - ``--create-frame``. +.. option:: -b, --bcc= -``--create-frame`` - Create a new frame instead of trying to use the current Emacs - frame. Applicable with ``--client``. This will be required when - Emacs is running (or automatically started with ``--auto-daemon``) - in daemon mode. + Specify a blind-carbon-copy (Bcc) recipient. -``--print`` - Output the resulting elisp to stdout instead of evaluating it. +.. option:: -i, --body= + + Specify a file to include into the body of the message. + +.. option:: --hello + + Go to the Notmuch hello screen instead of the message composition + window if no message composition parameters are given. + +.. option:: --no-window-system + + Even if a window system is available, use the current terminal. + +.. option:: --client + + Use :manpage:`emacsclient(1)`, rather than + :manpage:`emacs(1)`. For :manpage:`emacsclient(1)` to work, you + need an already running Emacs with a server, or use + ``--auto-daemon``. + +.. option:: --auto-daemon + + Automatically start Emacs in daemon mode, if the Emacs server is + not running. Applicable with ``--client``. Implies + ``--create-frame``. + +.. option:: --create-frame + + Create a new frame instead of trying to use the current Emacs + frame. Applicable with ``--client``. This will be required when + Emacs is running (or automatically started with ``--auto-daemon``) + in daemon mode. + +.. option:: --print + + Output the resulting elisp to stdout instead of evaluating it. The supported positional parameters and short options are a compatible subset of the :manpage:`mutt(1)` MUA command-line options. The options diff --git a/doc/man1/notmuch-insert.rst b/doc/man1/notmuch-insert.rst index 67adf225ca9a..82c4a7a0b94e 100644 --- a/doc/man1/notmuch-insert.rst +++ b/doc/man1/notmuch-insert.rst @@ -33,52 +33,60 @@ more details on hooks. Option arguments must appear before any tag operation arguments. Supported options for **insert** include -``--folder=<``\ folder\ **>** - Deliver the message to the specified folder, relative to the - top-level directory given by the value of **database.path**. The - default is the empty string, which means delivering to the - top-level directory. - -``--create-folder`` - Try to create the folder named by the ``--folder`` option, if it - does not exist. Otherwise the folder must already exist for mail - delivery to succeed. - -``--keep`` - Keep the message file if indexing fails, and keep the message - indexed if applying tags or maildir flag synchronization - fails. Ignore these errors and return exit status 0 to indicate - successful mail delivery. - -``--no-hooks`` - Prevent hooks from being run. - -``--world-readable`` - When writing mail to the mailbox, allow it to be read by users - other than the current user. Note that this does not override - umask. By default, delivered mail is only readable by the current - user. - -``--decrypt=(true|nostash|auto|false)`` - If ``true`` and the message is encrypted, try to decrypt the - message while indexing, stashing any session keys discovered. If - ``auto``, and notmuch already knows about a session key for the - message, it will try decrypting using that session key but will - not try to access the user's secret keys. If decryption is - successful, index the cleartext itself. Either way, the message - is always stored to disk in its original form (ciphertext). - - ``nostash`` is the same as ``true`` except that it will not stash - newly-discovered session keys in the database. - - Be aware that the index is likely sufficient (and a stashed - session key is certainly sufficient) to reconstruct the cleartext - of the message itself, so please ensure that the notmuch message - index is adequately protected. DO NOT USE ``--decrypt=true`` or - ``--decrypt=nostash`` without considering the security of your - index. - - See also ``index.decrypt`` in :any:`notmuch-config(1)`. +.. program:: insert + +.. option:: --folder= + + Deliver the message to the specified folder, relative to the + top-level directory given by the value of **database.path**. The + default is the empty string, which means delivering to the + top-level directory. + +.. option:: --create-folder + + Try to create the folder named by the ``--folder`` option, if it + does not exist. Otherwise the folder must already exist for mail + delivery to succeed. + +.. option:: --keep + + Keep the message file if indexing fails, and keep the message + indexed if applying tags or maildir flag synchronization + fails. Ignore these errors and return exit status 0 to indicate + successful mail delivery. + +.. option:: --no-hooks + + Prevent hooks from being run. + +.. option:: --world-readable + + When writing mail to the mailbox, allow it to be read by users + other than the current user. Note that this does not override + umask. By default, delivered mail is only readable by the current + user. + +.. option:: --decrypt=(true|nostash|auto|false) + + If ``true`` and the message is encrypted, try to decrypt the + message while indexing, stashing any session keys discovered. If + ``auto``, and notmuch already knows about a session key for the + message, it will try decrypting using that session key but will + not try to access the user's secret keys. If decryption is + successful, index the cleartext itself. Either way, the message + is always stored to disk in its original form (ciphertext). + + ``nostash`` is the same as ``true`` except that it will not stash + newly-discovered session keys in the database. + + Be aware that the index is likely sufficient (and a stashed + session key is certainly sufficient) to reconstruct the cleartext + of the message itself, so please ensure that the notmuch message + index is adequately protected. DO NOT USE ``--decrypt=true`` or + ``--decrypt=nostash`` without considering the security of your + index. + + See also ``index.decrypt`` in :any:`notmuch-config(1)`. EXIT STATUS =========== diff --git a/doc/man1/notmuch-new.rst b/doc/man1/notmuch-new.rst index 1044d1cdd0f5..9cb4a54e7534 100644 --- a/doc/man1/notmuch-new.rst +++ b/doc/man1/notmuch-new.rst @@ -40,36 +40,43 @@ details on hooks. Supported options for **new** include -``--no-hooks`` - Prevents hooks from being run. - -``--quiet`` - Do not print progress or results. - -``--verbose`` - Print file names being processed. Ignored when combined with - ``--quiet``. - -``--decrypt=(true|nostash|auto|false)`` - If ``true``, when encountering an encrypted message, try to - decrypt it while indexing, and stash any discovered session keys. - If ``auto``, try to use any session key already known to belong to - this message, but do not attempt to use the user's secret keys. - If decryption is successful, index the cleartext of the message. - - Be aware that the index is likely sufficient (and the session key - is certainly sufficient) to reconstruct the cleartext of the - message itself, so please ensure that the notmuch message index is - adequately protected. DO NOT USE ``--decrypt=true`` or - ``--decrypt=nostash`` without considering the security of your - index. - - See also ``index.decrypt`` in :any:`notmuch-config(1)`. - -``--full-scan`` - By default notmuch-new uses directory modification times (mtimes) - to optimize the scanning of directories for new mail. This option turns - that optimization off. +.. program:: new + +.. option:: --no-hooks + + Prevents hooks from being run. + +.. option:: --quiet + + Do not print progress or results. + +.. option:: --verbose + + Print file names being processed. Ignored when combined with + ``--quiet``. + +.. option:: --decrypt=(true|nostash|auto|false) + + If ``true``, when encountering an encrypted message, try to + decrypt it while indexing, and stash any discovered session keys. + If ``auto``, try to use any session key already known to belong to + this message, but do not attempt to use the user's secret keys. + If decryption is successful, index the cleartext of the message. + + Be aware that the index is likely sufficient (and the session key + is certainly sufficient) to reconstruct the cleartext of the + message itself, so please ensure that the notmuch message index is + adequately protected. DO NOT USE ``--decrypt=true`` or + ``--decrypt=nostash`` without considering the security of your + index. + + See also ``index.decrypt`` in :any:`notmuch-config(1)`. + +.. option:: --full-scan + + By default notmuch-new uses directory modification times (mtimes) + to optimize the scanning of directories for new mail. This option turns + that optimization off. EXIT STATUS =========== diff --git a/doc/man1/notmuch-reindex.rst b/doc/man1/notmuch-reindex.rst index 359def7ef798..85dad249b582 100644 --- a/doc/man1/notmuch-reindex.rst +++ b/doc/man1/notmuch-reindex.rst @@ -23,28 +23,31 @@ messages using the supplied options. Supported options for **reindex** include -``--decrypt=(true|nostash|auto|false)`` - If ``true``, when encountering an encrypted message, try to - decrypt it while reindexing, stashing any session keys discovered. - If ``auto``, and notmuch already knows about a session key for the - message, it will try decrypting using that session key but will - not try to access the user's secret keys. If decryption is - successful, index the cleartext itself. - - ``nostash`` is the same as ``true`` except that it will not stash - newly-discovered session keys in the database. - - If ``false``, notmuch reindex will also delete any stashed session - keys for all messages matching the search terms. - - Be aware that the index is likely sufficient (and a stashed - session key is certainly sufficient) to reconstruct the cleartext - of the message itself, so please ensure that the notmuch message - index is adequately protected. DO NOT USE ``--decrypt=true`` or - ``--decrypt=nostash`` without considering the security of your - index. - - See also ``index.decrypt`` in :any:`notmuch-config(1)`. +.. program:: reindex + +.. option:: --decrypt=(true|nostash|auto|false) + + If ``true``, when encountering an encrypted message, try to + decrypt it while reindexing, stashing any session keys discovered. + If ``auto``, and notmuch already knows about a session key for the + message, it will try decrypting using that session key but will + not try to access the user's secret keys. If decryption is + successful, index the cleartext itself. + + ``nostash`` is the same as ``true`` except that it will not stash + newly-discovered session keys in the database. + + If ``false``, notmuch reindex will also delete any stashed session + keys for all messages matching the search terms. + + Be aware that the index is likely sufficient (and a stashed + session key is certainly sufficient) to reconstruct the cleartext + of the message itself, so please ensure that the notmuch message + index is adequately protected. DO NOT USE ``--decrypt=true`` or + ``--decrypt=nostash`` without considering the security of your + index. + + See also ``index.decrypt`` in :any:`notmuch-config(1)`. EXAMPLES ======== diff --git a/doc/man1/notmuch-reply.rst b/doc/man1/notmuch-reply.rst index 168c399c954f..4a78a90b2251 100644 --- a/doc/man1/notmuch-reply.rst +++ b/doc/man1/notmuch-reply.rst @@ -36,62 +36,67 @@ The resulting message template is output to stdout. Supported options for **reply** include -``--format=``\ (**default**\ \|\ **json**\ \|\ **sexp**\ \|\ **headers-only**) - **default** - Includes subject and quoted message body as an RFC 2822 - message. - - **json** - Produces JSON output containing headers for a reply message - and the contents of the original message. This output can be - used by a client to create a reply message intelligently. - - **sexp** - Produces S-Expression output containing headers for a reply - message and the contents of the original message. This output - can be used by a client to create a reply message - intelligently. - - **headers-only** - Only produces In-Reply-To, References, To, Cc, and Bcc - headers. - -``--format-version=N`` - Use the specified structured output format version. This is - intended for programs that invoke :any:`notmuch(1)` internally. If - omitted, the latest supported version will be used. - -``--reply-to=``\ (**all**\ \|\ **sender**) - **all** (default) - Replies to all addresses. - - **sender** - Replies only to the sender. If replying to user's own message - (Reply-to: or From: header is one of the user's configured - email addresses), try To:, Cc:, and Bcc: headers in this - order, and copy values from the first that contains something - other than only the user's addresses. - -``--decrypt=(false|auto|true)`` - - If ``true``, decrypt any MIME encrypted parts found in the - selected content (i.e., "multipart/encrypted" parts). Status - of the decryption will be reported (currently only supported - with ``--format=json`` and ``--format=sexp``), and on successful - decryption the multipart/encrypted part will be replaced by - the decrypted content. - - If ``auto``, and a session key is already known for the - message, then it will be decrypted, but notmuch will not try - to access the user's secret keys. - - Use ``false`` to avoid even automatic decryption. - - Non-automatic decryption expects a functioning - :manpage:`gpg-agent(1)` to provide any needed credentials. Without - one, the decryption will likely fail. - - Default: ``auto`` +.. program:: reply + +.. option:: --format=(default|json|sexp|headers-only) + + **default** + Includes subject and quoted message body as an RFC 2822 + message. + + **json** + Produces JSON output containing headers for a reply message + and the contents of the original message. This output can be + used by a client to create a reply message intelligently. + + **sexp** + Produces S-Expression output containing headers for a reply + message and the contents of the original message. This output + can be used by a client to create a reply message + intelligently. + + **headers-only** + Only produces In-Reply-To, References, To, Cc, and Bcc + headers. + +.. option:: --format-version=N + + Use the specified structured output format version. This is + intended for programs that invoke :any:`notmuch(1)` internally. If + omitted, the latest supported version will be used. + +.. option:: --reply-to=(all|sender) + + **all** (default) + Replies to all addresses. + + **sender** + Replies only to the sender. If replying to user's own message + (Reply-to: or From: header is one of the user's configured + email addresses), try To:, Cc:, and Bcc: headers in this + order, and copy values from the first that contains something + other than only the user's addresses. + +.. option:: --decrypt=(false|auto|true) + + If ``true``, decrypt any MIME encrypted parts found in the + selected content (i.e., "multipart/encrypted" parts). Status + of the decryption will be reported (currently only supported + with ``--format=json`` and ``--format=sexp``), and on successful + decryption the multipart/encrypted part will be replaced by + the decrypted content. + + If ``auto``, and a session key is already known for the + message, then it will be decrypted, but notmuch will not try + to access the user's secret keys. + + Use ``false`` to avoid even automatic decryption. + + Non-automatic decryption expects a functioning + :manpage:`gpg-agent(1)` to provide any needed credentials. Without + one, the decryption will likely fail. + + Default: ``auto`` See :any:`notmuch-search-terms(7)` for details of the supported syntax for . diff --git a/doc/man1/notmuch-restore.rst b/doc/man1/notmuch-restore.rst index 7be348545c00..bd452475768d 100644 --- a/doc/man1/notmuch-restore.rst +++ b/doc/man1/notmuch-restore.rst @@ -18,62 +18,68 @@ The input is read from the given filename, if any, or from stdin. Supported options for **restore** include -``--accumulate`` - The union of the existing and new tags is applied, instead of - replacing each message's tags as they are read in from the dump - file. - -``--format=(sup|batch-tag|auto)`` - Notmuch restore supports two plain text dump formats, with each - line specifying a message-id and a set of tags. For details of the - actual formats, see :any:`notmuch-dump(1)`. - - **sup** - The **sup** dump file format is specifically chosen to be - compatible with the format of files produced by sup-dump. So - if you've previously been using sup for mail, then the - **notmuch restore** command provides you a way to import all - of your tags (or labels as sup calls them). - - **batch-tag** - The **batch-tag** dump format is intended to more robust - against malformed message-ids and tags containing whitespace - or non-\ **ascii(7)** characters. See :any:`notmuch-dump(1)` for - details on this format. - - **notmuch restore** updates the maildir flags according to tag - changes if the **maildir.synchronize\_flags** configuration - option is enabled. See :any:`notmuch-config(1)` for details. - - **auto** - This option (the default) tries to guess the format from the - input. For correctly formed input in either supported format, - this heuristic, based the fact that batch-tag format contains - no parentheses, should be accurate. - -``--include=(config|properties|tags)`` - Control what kind of metadata is restored. - - **config** - Restore configuration data to the database. Each configuration - line starts with "#@ ", followed by a space separated - key-value pair. Both key and value are hex encoded if needed. - - **properties** - Restore per-message (key,value) metadata. Each line starts - with "#= ", followed by a message id, and a space separated - list of key=value pairs. Ids, keys and values are hex encoded - if needed. See :any:`notmuch-properties(7)` for more details. - - **tags** - Restore per-message metadata, namely tags. See *format* above - for more details. - - The default is to restore all available types of data. The option - can be specified multiple times to select some subset. - -``--input=``\ - Read input from given file instead of stdin. +.. program:: restore + +.. option:: --accumulate + + The union of the existing and new tags is applied, instead of + replacing each message's tags as they are read in from the dump + file. + +.. option:: --format=(sup|batch-tag|auto) + + Notmuch restore supports two plain text dump formats, with each + line specifying a message-id and a set of tags. For details of the + actual formats, see :any:`notmuch-dump(1)`. + + **sup** + The **sup** dump file format is specifically chosen to be + compatible with the format of files produced by sup-dump. So + if you've previously been using sup for mail, then the + **notmuch restore** command provides you a way to import all + of your tags (or labels as sup calls them). + + **batch-tag** + The **batch-tag** dump format is intended to more robust + against malformed message-ids and tags containing whitespace + or non-\ **ascii(7)** characters. See :any:`notmuch-dump(1)` for + details on this format. + + **notmuch restore** updates the maildir flags according to tag + changes if the **maildir.synchronize\_flags** configuration + option is enabled. See :any:`notmuch-config(1)` for details. + + **auto** + This option (the default) tries to guess the format from the + input. For correctly formed input in either supported format, + this heuristic, based the fact that batch-tag format contains + no parentheses, should be accurate. + +.. option:: --include=(config|properties|tags) + + Control what kind of metadata is restored. + + **config** + Restore configuration data to the database. Each configuration + line starts with "#@ ", followed by a space separated + key-value pair. Both key and value are hex encoded if needed. + + **properties** + Restore per-message (key,value) metadata. Each line starts + with "#= ", followed by a message id, and a space separated + list of key=value pairs. Ids, keys and values are hex encoded + if needed. See :any:`notmuch-properties(7)` for more details. + + **tags** + Restore per-message metadata, namely tags. See *format* above + for more details. + + The default is to restore all available types of data. The option + can be specified multiple times to select some subset. + +.. option:: --input= + + Read input from given file instead of stdin. GZIPPED INPUT ============= diff --git a/doc/man1/notmuch-search.rst b/doc/man1/notmuch-search.rst index 689f027ab3df..2d9ca2d5abec 100644 --- a/doc/man1/notmuch-search.rst +++ b/doc/man1/notmuch-search.rst @@ -26,118 +26,128 @@ See :any:`notmuch-search-terms(7)` for details of the supported syntax for Supported options for **search** include -``--format=``\ (**json**\ \|\ **sexp**\ \|\ **text**\ \|\ **text0**) - Presents the results in either JSON, S-Expressions, newline - character separated plain-text (default), or null character - separated plain-text (compatible with :manpage:`xargs(1)` -0 - option where available). - -``--format-version=N`` - Use the specified structured output format version. This is - intended for programs that invoke :any:`notmuch(1)` internally. If - omitted, the latest supported version will be used. - -``--output=(summary|threads|messages|files|tags)`` - **summary** - Output a summary of each thread with any message matching the - search terms. The summary includes the thread ID, date, the - number of messages in the thread (both the number matched and - the total number), the authors of the thread and the - subject. In the case where a thread contains multiple files - for some messages, the total number of files is printed in - parentheses (see below for an example). - - **threads** - Output the thread IDs of all threads with any message matching - the search terms, either one per line (``--format=text``), - separated by null characters (``--format=text0``), as a JSON array - (``--format=json``), or an S-Expression list (``--format=sexp``). - - **messages** - Output the message IDs of all messages matching the search - terms, either one per line (``--format=text``), separated by null - characters (``--format=text0``), as a JSON array (``--format=json``), - or as an S-Expression list (``--format=sexp``). - - **files** - Output the filenames of all messages matching the search - terms, either one per line (``--format=text``), separated by null - characters (``--format=text0``), as a JSON array (``--format=json``), - or as an S-Expression list (``--format=sexp``). - - Note that each message may have multiple filenames associated - with it. All of them are included in the output (unless - limited with the ``--duplicate=N`` option). This may be - particularly confusing for **folder:** or **path:** searches - in a specified directory, as the messages may have duplicates - in other directories that are included in the output, although - these files alone would not match the search. - - **tags** - Output all tags that appear on any message matching the search - terms, either one per line (``--format=text``), separated by null - characters (``--format=text0``), as a JSON array (``--format=json``), - or as an S-Expression list (``--format=sexp``). - -``--sort=``\ (**newest-first**\ \|\ **oldest-first**) - This option can be used to present results in either chronological - order (**oldest-first**) or reverse chronological order - (**newest-first**). - - Note: The thread order will be distinct between these two options - (beyond being simply reversed). When sorting by **oldest-first** - the threads will be sorted by the oldest message in each thread, - but when sorting by **newest-first** the threads will be sorted by - the newest message in each thread. - - By default, results will be displayed in reverse chronological - order, (that is, the newest results will be displayed first). - -``--offset=[-]N`` - Skip displaying the first N results. With the leading '-', start - at the Nth result from the end. - -``--limit=N`` - Limit the number of displayed results to N. - -``--exclude=(true|false|all|flag)`` - A message is called "excluded" if it matches at least one tag in - search.exclude\_tags that does not appear explicitly in the search - terms. This option specifies whether to omit excluded messages in - the search process. - - **true** (default) - Prevent excluded messages from matching the search terms. - - **all** - Additionally prevent excluded messages from appearing in - displayed results, in effect behaving as though the excluded - messages do not exist. - - **false** - Allow excluded messages to match search terms and appear in - displayed results. Excluded messages are still marked in the - relevant outputs. - - **flag** - Only has an effect when ``--output=summary``. The output is - almost identical to **false**, but the "match count" is the - number of matching non-excluded messages in the thread, rather - than the number of matching messages. - -``--duplicate=N`` - For ``--output=files``, output the Nth filename associated with - each message matching the query (N is 1-based). If N is greater - than the number of files associated with the message, don't print - anything. - - For ``--output=messages``, only output message IDs of messages - matching the search terms that have at least N filenames - associated with them. - - Note that this option is orthogonal with the **folder:** search - prefix. The prefix matches messages based on filenames. This - option filters filenames of the matching messages. +.. program:: search + +.. option:: --format=(json|sexp|text|text0) + + Presents the results in either JSON, S-Expressions, newline + character separated plain-text (default), or null character + separated plain-text (compatible with :manpage:`xargs(1)` -0 + option where available). + +.. option:: --format-version=N + + Use the specified structured output format version. This is + intended for programs that invoke :any:`notmuch(1)` internally. If + omitted, the latest supported version will be used. + +.. option:: --output=(summary|threads|messages|files|tags) + + **summary** + Output a summary of each thread with any message matching the + search terms. The summary includes the thread ID, date, the + number of messages in the thread (both the number matched and + the total number), the authors of the thread and the + subject. In the case where a thread contains multiple files + for some messages, the total number of files is printed in + parentheses (see below for an example). + + **threads** + Output the thread IDs of all threads with any message matching + the search terms, either one per line (``--format=text``), + separated by null characters (``--format=text0``), as a JSON array + (``--format=json``), or an S-Expression list (``--format=sexp``). + + **messages** + Output the message IDs of all messages matching the search + terms, either one per line (``--format=text``), separated by null + characters (``--format=text0``), as a JSON array (``--format=json``), + or as an S-Expression list (``--format=sexp``). + + **files** + Output the filenames of all messages matching the search + terms, either one per line (``--format=text``), separated by null + characters (``--format=text0``), as a JSON array (``--format=json``), + or as an S-Expression list (``--format=sexp``). + + Note that each message may have multiple filenames associated + with it. All of them are included in the output (unless + limited with the ``--duplicate=N`` option). This may be + particularly confusing for **folder:** or **path:** searches + in a specified directory, as the messages may have duplicates + in other directories that are included in the output, although + these files alone would not match the search. + + **tags** + Output all tags that appear on any message matching the search + terms, either one per line (``--format=text``), separated by null + characters (``--format=text0``), as a JSON array (``--format=json``), + or as an S-Expression list (``--format=sexp``). + +.. option:: --sort=(newest-first|oldest-first) + + This option can be used to present results in either chronological + order (**oldest-first**) or reverse chronological order + (**newest-first**). + + Note: The thread order will be distinct between these two options + (beyond being simply reversed). When sorting by **oldest-first** + the threads will be sorted by the oldest message in each thread, + but when sorting by **newest-first** the threads will be sorted by + the newest message in each thread. + + By default, results will be displayed in reverse chronological + order, (that is, the newest results will be displayed first). + +.. option:: --offset=[-]N + + Skip displaying the first N results. With the leading '-', start + at the Nth result from the end. + +.. option:: --limit=N + + Limit the number of displayed results to N. + +.. option:: --exclude=(true|false|all|flag) + + A message is called "excluded" if it matches at least one tag in + search.exclude\_tags that does not appear explicitly in the search + terms. This option specifies whether to omit excluded messages in + the search process. + + **true** (default) + Prevent excluded messages from matching the search terms. + + **all** + Additionally prevent excluded messages from appearing in + displayed results, in effect behaving as though the excluded + messages do not exist. + + **false** + Allow excluded messages to match search terms and appear in + displayed results. Excluded messages are still marked in the + relevant outputs. + + **flag** + Only has an effect when ``--output=summary``. The output is + almost identical to **false**, but the "match count" is the + number of matching non-excluded messages in the thread, rather + than the number of matching messages. + +.. option:: --duplicate=N + + For ``--output=files``, output the Nth filename associated with + each message matching the query (N is 1-based). If N is greater + than the number of files associated with the message, don't print + anything. + + For ``--output=messages``, only output message IDs of messages + matching the search terms that have at least N filenames + associated with them. + + Note that this option is orthogonal with the **folder:** search + prefix. The prefix matches messages based on filenames. This + option filters filenames of the matching messages. EXAMPLE ======= diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst index 1291884f61fd..fc6bec62ab26 100644 --- a/doc/man1/notmuch-show.rst +++ b/doc/man1/notmuch-show.rst @@ -25,172 +25,183 @@ post-processor (such as the emacs interface to notmuch). Supported options for **show** include -``--entire-thread=(true|false)`` - If true, **notmuch show** outputs all messages in the thread of - any message matching the search terms; if false, it outputs only - the matching messages. For ``--format=json`` and ``--format=sexp`` - this defaults to true. For other formats, this defaults to false. - -``--format=(text|json|sexp|mbox|raw)`` - **text** (default for messages) - The default plain-text format has all text-content MIME parts - decoded. Various components in the output, (**message**, - **header**, **body**, **attachment**, and MIME **part**), will - be delimited by easily-parsed markers. Each marker consists of - a Control-L character (ASCII decimal 12), the name of the - marker, and then either an opening or closing brace, ('{' or - '}'), to either open or close the component. For a multipart - MIME message, these parts will be nested. - - **json** - The output is formatted with Javascript Object Notation - (JSON). This format is more robust than the text format for - automated processing. The nested structure of multipart MIME - messages is reflected in nested JSON output. By default JSON - output includes all messages in a matching thread; that is, by - default, ``--format=json`` sets ``--entire-thread``. The - caller can disable this behaviour by setting - ``--entire-thread=false``. The JSON output is always encoded - as UTF-8 and any message content included in the output will - be charset-converted to UTF-8. - - **sexp** - The output is formatted as the Lisp s-expression (sexp) - equivalent of the JSON format above. Objects are formatted as - property lists whose keys are keywords (symbols preceded by a - colon). True is formatted as ``t`` and both false and null are - formatted as ``nil``. As for JSON, the s-expression output is - always encoded as UTF-8. - - **mbox** - All matching messages are output in the traditional, Unix mbox - format with each message being prefixed by a line beginning - with "From " and a blank line separating each message. Lines - in the message content beginning with "From " (preceded by - zero or more '>' characters) have an additional '>' character - added. This reversible escaping is termed "mboxrd" format and - described in detail here: - - http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/mail-mbox-formats.html - - **raw** (default if ``--part`` is given) - Write the raw bytes of the given MIME part of a message to - standard out. For this format, it is an error to specify a - query that matches more than one message. - - If the specified part is a leaf part, this outputs the body of - the part after performing content transfer decoding (but no - charset conversion). This is suitable for saving attachments, - for example. - - For a multipart or message part, the output includes the part - headers as well as the body (including all child parts). No - decoding is performed because multipart and message parts - cannot have non-trivial content transfer encoding. Consumers - of this may need to implement MIME decoding and similar - functions. - -``--format-version=N`` - Use the specified structured output format version. This is - intended for programs that invoke :any:`notmuch(1)` internally. If - omitted, the latest supported version will be used. - -``--part=N`` - Output the single decoded MIME part N of a single message. The - search terms must match only a single message. Message parts are - numbered in a depth-first walk of the message MIME structure, and - are identified in the 'json', 'sexp' or 'text' output formats. - - Note that even a message with no MIME structure or a single body - part still has two MIME parts: part 0 is the whole message - (headers and body) and part 1 is just the body. - -``--verify`` - Compute and report the validity of any MIME cryptographic - signatures found in the selected content (e.g., "multipart/signed" - parts). Status of the signature will be reported (currently only - supported with ``--format=json`` and ``--format=sexp``), and the - multipart/signed part will be replaced by the signed data. - -``--decrypt=(false|auto|true|stash)`` - If ``true``, decrypt any MIME encrypted parts found in the - selected content (e.g., "multipart/encrypted" parts). Status of - the decryption will be reported (currently only supported - with ``--format=json`` and ``--format=sexp``) and on successful - decryption the multipart/encrypted part will be replaced by - the decrypted content. - - ``stash`` behaves like ``true``, but upon successful decryption it - will also stash the message's session key in the database, and - index the cleartext of the message, enabling automatic decryption - in the future. - - If ``auto``, and a session key is already known for the - message, then it will be decrypted, but notmuch will not try - to access the user's keys. - - Use ``false`` to avoid even automatic decryption. - - Non-automatic decryption (``stash`` or ``true``, in the absence of - a stashed session key) expects a functioning :manpage:`gpg-agent(1)` to - provide any needed credentials. Without one, the decryption will - fail. - - Note: setting either ``true`` or ``stash`` here implies - ``--verify``. - - Here is a table that summarizes each of these policies: - - +------------------------+-------+------+------+-------+ - | | false | auto | true | stash | - +========================+=======+======+======+=======+ - | Show cleartext if | | X | X | X | - | session key is | | | | | - | already known | | | | | - +------------------------+-------+------+------+-------+ - | Use secret keys to | | | X | X | - | show cleartext | | | | | - +------------------------+-------+------+------+-------+ - | Stash any newly | | | | X | - | recovered session keys,| | | | | - | reindexing message if | | | | | - | found | | | | | - +------------------------+-------+------+------+-------+ - - Note: ``--decrypt=stash`` requires write access to the database. - Otherwise, ``notmuch show`` operates entirely in read-only mode. - - Default: ``auto`` - -``--exclude=(true|false)`` - Specify whether to omit threads only matching search.exclude\_tags - from the search results (the default) or not. In either case the - excluded message will be marked with the exclude flag (except when - output=mbox when there is nowhere to put the flag). - - If ``--entire-thread`` is specified then complete threads are returned - regardless (with the excluded flag being set when appropriate) but - threads that only match in an excluded message are not returned - when ``--exclude=true.`` - - The default is ``--exclude=true.`` - -``--body=(true|false)`` - If true (the default) **notmuch show** includes the bodies of the - messages in the output; if false, bodies are omitted. - ``--body=false`` is only implemented for the text, json and sexp - formats and it is incompatible with ``--part > 0.`` - - This is useful if the caller only needs the headers as body-less - output is much faster and substantially smaller. - -``--include-html`` - Include "text/html" parts as part of the output (currently - only supported with ``--format=text``, ``--format=json`` and - ``--format=sexp``). By default, unless ``--part=N`` is used to - select a specific part or ``--include-html`` is used to include all - "text/html" parts, no part with content type "text/html" is included - in the output. +.. program:: show + +.. option:: --entire-thread=(true|false) + + If true, **notmuch show** outputs all messages in the thread of + any message matching the search terms; if false, it outputs only + the matching messages. For ``--format=json`` and ``--format=sexp`` + this defaults to true. For other formats, this defaults to false. + +.. option:: --format=(text|json|sexp|mbox|raw) + + **text** (default for messages) + The default plain-text format has all text-content MIME parts + decoded. Various components in the output, (**message**, + **header**, **body**, **attachment**, and MIME **part**), will + be delimited by easily-parsed markers. Each marker consists of + a Control-L character (ASCII decimal 12), the name of the + marker, and then either an opening or closing brace, ('{' or + '}'), to either open or close the component. For a multipart + MIME message, these parts will be nested. + + **json** + The output is formatted with Javascript Object Notation + (JSON). This format is more robust than the text format for + automated processing. The nested structure of multipart MIME + messages is reflected in nested JSON output. By default JSON + output includes all messages in a matching thread; that is, by + default, ``--format=json`` sets ``--entire-thread``. The + caller can disable this behaviour by setting + ``--entire-thread=false``. The JSON output is always encoded + as UTF-8 and any message content included in the output will + be charset-converted to UTF-8. + + **sexp** + The output is formatted as the Lisp s-expression (sexp) + equivalent of the JSON format above. Objects are formatted as + property lists whose keys are keywords (symbols preceded by a + colon). True is formatted as ``t`` and both false and null are + formatted as ``nil``. As for JSON, the s-expression output is + always encoded as UTF-8. + + **mbox** + All matching messages are output in the traditional, Unix mbox + format with each message being prefixed by a line beginning + with "From " and a blank line separating each message. Lines + in the message content beginning with "From " (preceded by + zero or more '>' characters) have an additional '>' character + added. This reversible escaping is termed "mboxrd" format and + described in detail here: + + http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/mail-mbox-formats.html + + **raw** (default if ``--part`` is given) + Write the raw bytes of the given MIME part of a message to + standard out. For this format, it is an error to specify a + query that matches more than one message. + + If the specified part is a leaf part, this outputs the body of + the part after performing content transfer decoding (but no + charset conversion). This is suitable for saving attachments, + for example. + + For a multipart or message part, the output includes the part + headers as well as the body (including all child parts). No + decoding is performed because multipart and message parts + cannot have non-trivial content transfer encoding. Consumers + of this may need to implement MIME decoding and similar + functions. + +.. option:: --format-version=N + + Use the specified structured output format version. This is + intended for programs that invoke :any:`notmuch(1)` internally. If + omitted, the latest supported version will be used. + +.. option:: --part=N + + Output the single decoded MIME part N of a single message. The + search terms must match only a single message. Message parts are + numbered in a depth-first walk of the message MIME structure, and + are identified in the 'json', 'sexp' or 'text' output formats. + + Note that even a message with no MIME structure or a single body + part still has two MIME parts: part 0 is the whole message + (headers and body) and part 1 is just the body. + +.. option:: --verify + + Compute and report the validity of any MIME cryptographic + signatures found in the selected content (e.g., "multipart/signed" + parts). Status of the signature will be reported (currently only + supported with ``--format=json`` and ``--format=sexp``), and the + multipart/signed part will be replaced by the signed data. + +.. option:: --decrypt=(false|auto|true|stash) + + If ``true``, decrypt any MIME encrypted parts found in the + selected content (e.g., "multipart/encrypted" parts). Status of + the decryption will be reported (currently only supported + with ``--format=json`` and ``--format=sexp``) and on successful + decryption the multipart/encrypted part will be replaced by + the decrypted content. + + ``stash`` behaves like ``true``, but upon successful decryption it + will also stash the message's session key in the database, and + index the cleartext of the message, enabling automatic decryption + in the future. + + If ``auto``, and a session key is already known for the + message, then it will be decrypted, but notmuch will not try + to access the user's keys. + + Use ``false`` to avoid even automatic decryption. + + Non-automatic decryption (``stash`` or ``true``, in the absence of + a stashed session key) expects a functioning :manpage:`gpg-agent(1)` to + provide any needed credentials. Without one, the decryption will + fail. + + Note: setting either ``true`` or ``stash`` here implies + ``--verify``. + + Here is a table that summarizes each of these policies: + + +------------------------+-------+------+------+-------+ + | | false | auto | true | stash | + +========================+=======+======+======+=======+ + | Show cleartext if | | X | X | X | + | session key is | | | | | + | already known | | | | | + +------------------------+-------+------+------+-------+ + | Use secret keys to | | | X | X | + | show cleartext | | | | | + +------------------------+-------+------+------+-------+ + | Stash any newly | | | | X | + | recovered session keys,| | | | | + | reindexing message if | | | | | + | found | | | | | + +------------------------+-------+------+------+-------+ + + Note: ``--decrypt=stash`` requires write access to the database. + Otherwise, ``notmuch show`` operates entirely in read-only mode. + + Default: ``auto`` + +.. option:: --exclude=(true|false) + + Specify whether to omit threads only matching search.exclude\_tags + from the search results (the default) or not. In either case the + excluded message will be marked with the exclude flag (except when + output=mbox when there is nowhere to put the flag). + + If ``--entire-thread`` is specified then complete threads are returned + regardless (with the excluded flag being set when appropriate) but + threads that only match in an excluded message are not returned + when ``--exclude=true.`` + + The default is ``--exclude=true.`` + +.. option:: --body=(true|false) + + If true (the default) **notmuch show** includes the bodies of the + messages in the output; if false, bodies are omitted. + ``--body=false`` is only implemented for the text, json and sexp + formats and it is incompatible with ``--part > 0.`` + + This is useful if the caller only needs the headers as body-less + output is much faster and substantially smaller. + +.. option:: --include-html + + Include "text/html" parts as part of the output (currently + only supported with ``--format=text``, ``--format=json`` and + ``--format=sexp``). By default, unless ``--part=N`` is used to + select a specific part or ``--include-html`` is used to include all + "text/html" parts, no part with content type "text/html" is included + in the output. A common use of **notmuch show** is to display a single thread of email messages. For this, use a search term of "thread:" as diff --git a/doc/man1/notmuch-tag.rst b/doc/man1/notmuch-tag.rst index 1da876c5c8cb..ae311a230f55 100644 --- a/doc/man1/notmuch-tag.rst +++ b/doc/man1/notmuch-tag.rst @@ -34,22 +34,27 @@ the **maildir.synchronize\_flags** configuration option is enabled. See Supported options for **tag** include -``--remove-all`` - 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. - -``--batch`` - Read batch tagging operations from a file (stdin by default). - This is more efficient than repeated **notmuch tag** - invocations. See `TAG FILE FORMAT <#tag_file_format>`__ below for - the input format. This option is not compatible with specifying - tagging on the command line. - -``--input=``\ - Read input from given file, instead of from stdin. Implies - ``--batch``. +.. program:: tag + +.. option:: --remove-all + + 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. + +.. option:: --batch + + Read batch tagging operations from a file (stdin by default). + This is more efficient than repeated **notmuch tag** + invocations. See `TAG FILE FORMAT <#tag_file_format>`__ below for + the input format. This option is not compatible with specifying + tagging on the command line. + +.. option:: --input= + + Read input from given file, instead of from stdin. Implies + ``--batch``. TAG FILE FORMAT =============== diff --git a/doc/man1/notmuch.rst b/doc/man1/notmuch.rst index 93135bdd6abb..e7adcfcd7ff5 100644 --- a/doc/man1/notmuch.rst +++ b/doc/man1/notmuch.rst @@ -43,25 +43,31 @@ OPTIONS Supported global options for ``notmuch`` include -``--help`` [command-name] - Print a synopsis of available commands and exit. With an optional - command name, show the man page for that subcommand. - -``--version`` - Print the installed version of notmuch, and exit. - -``--config=FILE`` - Specify the configuration file to use. This overrides any - configuration file specified by :envvar:`NOTMUCH_CONFIG`. The empty - string is a permitted and sometimes useful value of *FILE*, which - tells ``notmuch`` to use only configuration metadata from the database. - -``--uuid=HEX`` - Enforce that the database UUID (a unique identifier which persists - until e.g. the database is compacted) is HEX; exit with an error - if it is not. This is useful to detect rollover in modification - counts on messages. You can find this UUID using e.g. ``notmuch - count --lastmod`` +.. program:: notmuch + +.. option:: --help [command-name] + + Print a synopsis of available commands and exit. With an optional + command name, show the man page for that subcommand. + +.. option:: --version + + Print the installed version of notmuch, and exit. + +.. option:: --config=FILE + + Specify the configuration file to use. This overrides any + configuration file specified by :envvar:`NOTMUCH_CONFIG`. The empty + string is a permitted and sometimes useful value of *FILE*, which + tells ``notmuch`` to use only configuration metadata from the database. + +.. option:: --uuid=HEX + + Enforce that the database UUID (a unique identifier which persists + until e.g. the database is compacted) is HEX; exit with an error + if it is not. This is useful to detect rollover in modification + counts on messages. You can find this UUID using e.g. ``notmuch + count --lastmod`` All global options except ``--config`` can also be specified after the command. For example, ``notmuch subcommand --uuid=HEX`` is equivalent -- 2.30.2