From 35597221da323ec3471e58fba9f04aa6e3937737 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 2 Feb 2021 11:46:52 +0000 Subject: lei: q: shell completion for --(include|exclude|only) Because .onion URLs names are long! --- lib/PublicInbox/LEI.pm | 7 +++++++ lib/PublicInbox/LeiQuery.pm | 16 ++++++++++++++++ t/lei.t | 6 ++++++ 3 files changed, 29 insertions(+) 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'); -- cgit v1.2.3-24-ge0c7