| =head1 NAME |
| |
| lei-q - search for messages matching terms |
| |
| =head1 SYNOPSIS |
| |
| lei q [OPTIONS] TERM [TERM...] |
| |
| lei q [OPTIONS] (--stdin|-) |
| |
| =head1 DESCRIPTION |
| |
| Search for messages across the lei/store and externals. |
| |
| =head1 OPTIONS |
| |
| =for comment |
| TODO: mention curl options? |
| |
| =over |
| |
| =item --stdin |
| |
| Read search terms from stdin. |
| |
| =item --no-save |
| |
| Do not save the search for L<lei-up(1)>. |
| |
| =item --output=MFOLDER |
| |
| =item -o MFOLDER |
| |
| =item --mfolder=MFOLDER |
| |
| Warning: this clobbers and overwrites the output destination unless |
| L</--augment> is specified. |
| |
| Destination for results (e.g., C</tmp/results-Maildir>, |
| C<imaps://user@mail.example.com/INBOX.test>, or |
| C<mboxcl2:/tmp/results-mboxcl2>). The prefix may be a supported protocol: |
| C<imap://> or C<imaps://>. URLs requiring |
| authentication use L<git-credential(1)> to |
| fill in the username and password. |
| |
| A prefix can specify the format of the output: C<maildir>, |
| C<mboxrd>, C<mboxcl2>, C<mboxcl>, C<mboxo>. For a description of |
| mail formats, see L<lei-mail-formats(5)>. |
| |
| C<v2:/path/to/inbox> may be used to create a new inbox of |
| L<public-inbox-v2-format(5)>. The new inbox will not be configured |
| in the L<public-inbox-config(5)> file. |
| |
| C<maildir> is the default for an existing directory or non-existing path. |
| |
| Default: C<-> (stdout) |
| |
| =item --format=FORMAT |
| |
| =item -f FORMAT |
| |
| Format of results to stdout. This option exists as a convenient |
| way to specify the format for the default stdout destination. |
| C<reply>, C<text>, C<json>, C<jsonl>, or C<concatjson> are all supported, |
| as are the various mbox variants described in L</--output>. |
| |
| When a format isn't specified, it's chosen based on the |
| L</--output> destination or prefix. C<json> is used for the |
| default destination (stdout). |
| |
| Using a C<format:> prefix with the C<--output> destination is |
| preferred when not writing to stdout. |
| |
| =item --no-color |
| |
| Disable color (for C<-f reply> and C<-f text>). |
| |
| =item --pretty |
| |
| Pretty-print C<json> or C<concatjson> output. If stdout is opened to |
| a tty and used as the C<--output> destination, C<--pretty> is enabled |
| by default. |
| |
| =item --mua=COMMAND |
| |
| A command to run on C<--output> Maildir or mbox (e.g., C<mutt -f %f>). |
| For a subset of MUAs known to accept a mailbox via C<-f>, COMMAND can |
| be abbreviated to the name of the program: C<mutt>, C<mailx>, C<mail>, |
| or C<neomutt>. |
| |
| =item --alert=COMMAND[,COMMAND...] |
| |
| Run C<COMMAND> after writing to output. C<:WINCH> indicates to send |
| C<SIGWINCH> to the C<--mua> process. C<:bell> indicates to print a |
| bell code. Any other value is interpreted as a command to execute as |
| is. |
| |
| This option may be given multiple times. |
| |
| Default: C<:WINCH,:bell> when C<--mua> is specified and C<--output> |
| doesn't point to stdout, nothing otherwise. |
| |
| =item --augment |
| |
| =item -a |
| |
| Augment output destination instead of clobbering it. |
| |
| =item --no-import-before |
| |
| Do not import messages before writing to an existing output destination. |
| Be certain you do not need existing data in your output before using |
| this, it permanently erases data unless C<--augment> is used. |
| |
| =item --threads |
| |
| =item -t |
| |
| Return all messages in the same thread as the actual match(es). |
| |
| Using this twice (C<-tt>) sets the C<flagged> (AKA "important") |
| on messages which were actual matches. This is useful to distinguish |
| messages which were direct hits from messages which were merely part |
| of the same thread. |
| |
| TODO: Warning: this flag may become persistent and saved in |
| lei/store unless an MUA unflags it! (Behavior undecided) |
| |
| Caveat: C<-tt> only works on locally-indexed messages at the |
| moment, and not on remote (HTTP(S)) endpoints. |
| |
| =item --thread-id=MSGID |
| |
| =item -T MSGID |
| |
| Only search messages in the same thread as the given Message-ID. |
| |
| For HTTP(S) externals, this only works on instances running |
| public-inbox 2.0+ (UNRELEASED). |
| |
| =item --jobs=QUERY_WORKERS[,WRITE_WORKERS] |
| |
| =item --jobs=,WRITE_WORKERS |
| |
| =item -j QUERY_WORKERS[,WRITE_WORKERS] |
| |
| =item -j ,WRITE_WORKERS |
| |
| Set the number of query and write worker processes for parallelism. |
| |
| C<QUERY_WORKERS> defaults to the number of CPUs available, but 4 per |
| remote (HTTP/HTTPS) host. |
| |
| C<WRITE_WORKERS> defaults to 75% of the number of CPUs available for |
| Maildir and mbox* destinations, but 4 per IMAP/IMAPS host. |
| |
| Omitting C<QUERY_WORKERS> but leaving the comma (C<,>) allows |
| one to only set C<WRITE_WORKERS> |
| |
| =item --dedupe=STRATEGY |
| |
| =item -d STRATEGY |
| |
| Strategy for deduplicating messages: C<content>, C<oid>, C<mid>, or |
| C<none>. |
| |
| Default: C<content> |
| |
| =for comment |
| TODO: Provide description of strategies? |
| |
| =item --[no-]remote |
| |
| Whether to include results requiring network access. When local |
| externals are configured, C<--remote> must be explicitly passed to |
| enable reporting of results from remote externals. |
| |
| =item --no-local |
| |
| Limit operations to those requiring network access. |
| |
| =item --no-external |
| |
| Don't include results from externals. |
| |
| =item --include=LOCATION |
| |
| =item -I LOCATION |
| |
| Include specified external in search. This option may be given |
| multiple times. |
| |
| =item --exclude=LOCATION |
| |
| Exclude specified external from search. This option may be given |
| multiple times. |
| |
| =item --only=LOCATION |
| |
| =item -O LOCATION |
| |
| Use only the specified external for search. This option may be given |
| multiple times, in which case the search uses only the specified set. |
| |
| =item --globoff |
| |
| =item -g |
| |
| Do not match locations using C<*?> wildcards and C<[]> ranges. This |
| option applies to C<--include>, C<--exclude>, and C<--only>. |
| |
| =item --no-import-remote |
| |
| Disable the default behavior of memoizing remote messages into the |
| local store. |
| |
| =item --lock=METHOD |
| |
| L<mbox(5)> locking method(s) to use: C<dotlock>, C<fcntl>, C<flock> or |
| C<none>. |
| |
| Default: fcntl,dotlock |
| |
| =item --limit=NUMBER |
| |
| =item -NUMBER |
| |
| =item -n NUMBER |
| |
| Fuzzy-limit the number of matches per local external and lei/store. |
| Messages added by the L<--threads> switch do not count towards this |
| limit, and there is no limit on remote externals. |
| |
| Default: 10000 |
| |
| =item --offset=NUMBER |
| |
| Shift start of search results. |
| |
| Default: 0 |
| |
| =item --reverse |
| |
| =item -r |
| |
| Reverse the results. Note that this applies before C<--limit>. |
| |
| =item --sort=KEY |
| |
| =item -s KEY |
| |
| Order the results by KEY. Valid keys are C<received>, C<relevance>, |
| and C<docid>. |
| |
| Default: C<received> |
| |
| =item --verbose |
| |
| =item -v |
| |
| Provide more feedback on stderr. |
| |
| =item --quiet |
| |
| =item -q |
| |
| Suppress feedback messages. |
| |
| =item --torsocks=auto|no|yes |
| |
| =item --no-torsocks |
| |
| Whether to wrap L<git(1)> and L<curl(1)> commands with L<torsocks(1)>. |
| |
| Default: C<auto> |
| |
| =item --proxy=PROTOCOL://HOST[:PORT] |
| |
| =back |
| |
| =head1 SEARCH TERMS |
| |
| C<lei q> supports the same search prefixes used by HTTP(S) public-inbox |
| instances: |
| |
| =for comment |
| AUTO-GENERATED-SEARCH-TERMS-BEGIN |
| |
| s: match within Subject e.g. s:"a quick brown fox" |
| d: match date-time range, git "approxidate" formats supported |
| Open-ended ranges such as `d:last.week..' and |
| `d:..2.days.ago' are supported |
| b: match within message body, including text attachments |
| nq: match non-quoted text within message body |
| q: match quoted text within message body |
| n: match filename of attachment(s) |
| t: match within the To header |
| c: match within the Cc header |
| f: match within the From header |
| a: match within the To, Cc, and From headers |
| tc: match within the To and Cc headers |
| l: match contents of the List-Id header |
| bs: match within the Subject and body |
| dfn: match filename from diff |
| dfa: match diff removed (-) lines |
| dfb: match diff added (+) lines |
| dfhh: match diff hunk header context (usually a function name) |
| dfctx: match diff context lines |
| dfpre: match pre-image git blob ID |
| dfpost: match post-image git blob ID |
| dfblob: match either pre or post-image git blob ID |
| patchid: match `git patch-id --stable' output |
| rt: match received time, like `d:' if sender's clock was correct |
| |
| =for comment |
| AUTO-GENERATED-SEARCH-TERMS-END |
| |
| Additional search prefixes which only affect the local lei/store: |
| |
| L: match the given label |
| kw: match the given keywords |
| |
| See L<lei-tag(1)> for more info on labels and keywords. |
| |
| Most prefixes are probabilistic, meaning they support stemming |
| and wildcards (C<*>). Ranges (such as C<d:>) and boolean prefixes |
| do not support stemming or wildcards. |
| The upstream Xapian query parser documentation fully explains |
| the query syntax: L<https://xapian.org/docs/queryparser.html> |
| |
| =head1 TIPS |
| |
| C<-f reply> is intended to aid in turning a cover letter |
| into a reply (since using C<git format-patch --in-reply-to=...> |
| is tedious). Results (including "From " lines) should be edited |
| and trimmed in your favorite C<$EDITOR> before sending. |
| |
| =head1 CONTACT |
| |
| Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org> |
| |
| The mail archives are hosted at L<https://public-inbox.org/meta/> and |
| L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/> |
| |
| =head1 COPYRIGHT |
| |
| Copyright all contributors L<mailto:meta@public-inbox.org> |
| |
| License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt> |
| |
| =head1 SEE ALSO |
| |
| L<lei-add-external(1)>, L<lei-lcat(1)>, L<lei-up(1)>, |
| L<Xapian::QueryParser Syntax|https://xapian.org/docs/queryparser.html> |