about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-02-02 11:46:52 +0000
committerEric Wong <e@80x24.org>2021-02-03 07:32:37 +0000
commit35597221da323ec3471e58fba9f04aa6e3937737 (patch)
tree3a11cb55494d0e53772a5af09435e6852dc2e0e4
parenta513747e10a5cc796411e901b415bbe6336c3f4d (diff)
downloadpublic-inbox-35597221da323ec3471e58fba9f04aa6e3937737.tar.gz
Because .onion URLs names are long!
-rw-r--r--lib/PublicInbox/LEI.pm7
-rw-r--r--lib/PublicInbox/LeiQuery.pm16
-rw-r--r--t/lei.t6
3 files changed, 29 insertions, 0 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index b0a8358a..bb7efd59 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -229,6 +229,13 @@ my %OPTDESC = (
 'q        format|f=s' => [
         'OUT|maildir|mboxrd|mboxcl2|mboxcl|mboxo|html|json|jsonl|concatjson',
                 'specify output format, default depends on --output'],
+'q        exclude=s@' => [ 'URL_OR_PATHNAME',
+                'exclude specified external(s) from search' ],
+'q        include|I=s@' => [ 'URL_OR_PATHNAME',
+                'include specified external(s) in search' ],
+'q        only=s@' => [ 'URL_OR_PATHNAME',
+                'only use specified external(s) for search' ],
+
 'ls-query        format|f=s' => $ls_format,
 'ls-external        format|f=s' => $ls_format,
 
diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm
index fd8a3bca..7c1e3606 100644
--- a/lib/PublicInbox/LeiQuery.pm
+++ b/lib/PublicInbox/LeiQuery.pm
@@ -94,6 +94,22 @@ sub lei_q {
         $lxs->do_query($self);
 }
 
+# shell completion helper called by lei__complete
+sub _complete_q {
+        my ($self, @argv) = @_;
+        my $ext = qr/\A(?:-I|(?:--(?:include|exclude|only)))\z/;
+        # $argv[-1] =~ $ext and return $self->_complete_forget_external;
+        my @cur;
+        while (@argv) {
+                if ($argv[-1] =~ $ext) {
+                        my @c = $self->_complete_forget_external(@cur);
+                        return @c if @c;
+                }
+                unshift(@cur, pop @argv);
+        }
+        ();
+}
+
 # Stuff we may pass through to curl (as of 7.64.0), see curl manpage for
 # details, so most options which make sense for HTTP/HTTPS (including proxy
 # support for Tor and other methods of getting past weird networks).
diff --git a/t/lei.t b/t/lei.t
index a46e46f2..33f47ae4 100644
--- a/t/lei.t
+++ b/t/lei.t
@@ -232,6 +232,12 @@ my $test_external = sub {
                         "partial completion for URL $u");
                 is($out, "https://example.com/ibx/\n",
                         "completed partial URL $u");
+                for my $qo (qw(-I --include --exclude --only)) {
+                        ok($lei->(qw(_complete lei q), $qo, $u),
+                                "partial completion for URL q $qo $u");
+                        is($out, "https://example.com/ibx/\n",
+                                "completed partial URL $u on q $qo");
+                }
         }
 
         $lei->('ls-external');