lib/PublicInbox/LEI.pm | 7 +++++++ lib/PublicInbox/LeiQuery.pm | 16 ++++++++++++++++ t/lei.t | 6 ++++++ diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index b0a8358a0c562c44714eaf6478243d8626b61f66..bb7efd590d3c0ee7880585b6cdcd706513d6dcd6 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -229,6 +229,13 @@ 'forget format|f=s' => $stdin_formats, '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 fd8a3bcaaa812e0b894fcc155ba17686a445e23e..7c1e360651e31fec055640af020575dab1b22efa 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -94,6 +94,22 @@ $ovv->ovv_begin($self); $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 --- a/t/lei.t +++ b/t/lei.t @@ -232,6 +232,12 @@ ok($lei->(qw(_complete lei forget-external), $u), "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');