]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei: q: shell completion for --(include|exclude|only)
authorEric Wong <e@80x24.org>
Tue, 2 Feb 2021 11:46:52 +0000 (11:46 +0000)
committerEric Wong <e@80x24.org>
Wed, 3 Feb 2021 07:32:37 +0000 (07:32 +0000)
Because .onion URLs names are long!

lib/PublicInbox/LEI.pm
lib/PublicInbox/LeiQuery.pm
t/lei.t

index b0a8358a0c562c44714eaf6478243d8626b61f66..bb7efd590d3c0ee7880585b6cdcd706513d6dcd6 100644 (file)
@@ -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,
 
index fd8a3bcaaa812e0b894fcc155ba17686a445e23e..7c1e360651e31fec055640af020575dab1b22efa 100644 (file)
@@ -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 a46e46f24363f641591d81c5ffb4e3ae8e6adaea..33f47ae4b082a406930ca420f19eacc6efd8bb91 100644 (file)
--- 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');