From 1f1b1f0e22f7b4cbe5c8e843c1932222c0461393 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 2 Nov 2021 12:55:37 -1100 Subject: doc: lei-q: document SEARCH TERMS prefixes The new Documentation/common.perl file will be used for all manpages in the future. --- Documentation/common.perl | 65 +++++++++++++++++++++++++++++++++++++++++++++++ Documentation/include.mk | 3 +++ Documentation/lei-q.pod | 51 ++++++++++++++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100755 Documentation/common.perl (limited to 'Documentation') diff --git a/Documentation/common.perl b/Documentation/common.perl new file mode 100755 index 00000000..5fdbe8da --- /dev/null +++ b/Documentation/common.perl @@ -0,0 +1,65 @@ +#!perl -w +# Copyright (C) all contributors +# License: AGPL-3.0+ +use strict; +use Fcntl qw(SEEK_SET); +my $have_search = eval { require PublicInbox::Search; 1 }; +my $addr = 'meta@public-inbox.org'; +for my $pod (@ARGV) { + open my $fh, '+<', $pod or die "open($pod): $!"; + my $s = do { local $/; <$fh> } // die "read $!"; + my $orig = $s; + $s =~ s!^=head1 COPYRIGHT\n.+?^=head1([^\n]+)\n!=head1 COPYRIGHT + +Copyright all contributors L + +License: AGPL-3.0+ L + +=head1$1 + !ms; + + $s =~ s!^=head1 CONTACT\n.+?^=head1([^\n]+)\n!=head1 CONTACT + +Feedback welcome via plain-text mail to L + +The mail archives are hosted at L and +L + +=head1$1 + !ms; + $have_search and $s =~ s!^=for\scomment\n + ^AUTO-GENERATED-SEARCH-TERMS-BEGIN\n + .+? + ^=for\scomment\n + ^AUTO-GENERATED-SEARCH-TERMS-END\n + !search_terms()!emsx; + $s =~ s/[ \t]+$//sgm; + next if $s eq $orig; + seek($fh, 0, SEEK_SET) or die "seek: $!"; + truncate($fh, 0) or die "truncate: $!"; + print $fh $s or die "print: $!"; + close $fh or die "close: $!"; +} + +sub search_terms { + my $help = eval('\@PublicInbox::Search::HELP'); + my $s = ''; + my $pad = 0; + my $i; + for ($i = 0; $i < @$help; $i += 2) { + my $pfx = $help->[$i]; + my $n = length($pfx); + $pad = $n if $n > $pad; + $s .= $pfx . "\0"; + $s .= $help->[$i + 1]; + $s .= "\f\n"; + } + $pad += 2; + my $padding = ' ' x ($pad + 4); + $s =~ s/^/$padding/gms; + $s =~ s/^$padding(\S+)\0/" $1".(' ' x ($pad - length($1)))/egms; + $s =~ s/\f\n/\n/gs; + $s =~ s/^ //gms; + substr($s, 0, 0, "=for comment\nAUTO-GENERATED-SEARCH-TERMS-BEGIN\n\n"); + $s .= "\n=for comment\nAUTO-GENERATED-SEARCH-TERMS-END\n"; +} diff --git a/Documentation/include.mk b/Documentation/include.mk index 5f3ffcc5..149f9e3c 100644 --- a/Documentation/include.mk +++ b/Documentation/include.mk @@ -80,6 +80,9 @@ Documentation/flow.txt : Documentation/flow.ge touch -r Documentation/flow.ge $@+ mv $@+ $@ +Documentation/lei-q.pod : lib/PublicInbox/Search.pm Documentation/common.perl + $(PERL) -I lib -w Documentation/common.perl $@ + NEWS NEWS.atom NEWS.html : $(news_deps) $(PERL) -I lib -w Documentation/mknews.perl $@ $(RELEASES) diff --git a/Documentation/lei-q.pod b/Documentation/lei-q.pod index 574c12eb..fe281d7b 100644 --- a/Documentation/lei-q.pod +++ b/Documentation/lei-q.pod @@ -245,6 +245,55 @@ Default: C =back +=head1 SEARCH TERMS + +C 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 + 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 for more info on labels and keywords. + +Most prefixes are probabilistic, meaning they support stemming +and wildcards (C<*>). Ranges (such as C) and boolean prefixes +do not support stemming or wildcards. +The upstream Xapian query parser documentation fully explains +the query syntax: L + =head1 TIPS C<-f reply> is intended to aid in turning a cover letter @@ -261,7 +310,7 @@ L =head1 COPYRIGHT -Copyright 2021 all contributors L +Copyright all contributors L License: AGPL-3.0+ L -- cgit v1.2.3-24-ge0c7