From: Eric Wong Date: Wed, 3 Feb 2021 08:11:39 +0000 (-1000) Subject: lei: complete basenames for include|exclude|only X-Git-Tag: v1.7.0~1225 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=d692a0550b58bb16770000aeaffb0308da0c9328;p=public-inbox.git lei: complete basenames for include|exclude|only This will make it even easier for RSI-afflicted users to use, since many externals may share a common prefix. --- diff --git a/lib/PublicInbox/LeiQuery.pm b/lib/PublicInbox/LeiQuery.pm index 10b8d6fa..8015ecec 100644 --- a/lib/PublicInbox/LeiQuery.pm +++ b/lib/PublicInbox/LeiQuery.pm @@ -112,11 +112,22 @@ sub lei_q { 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); + # try basename match: + if (scalar(@cur) == 1 && index($cur[0], '/') < 0) { + my $all = $self->externals_each; + my %bn; + for my $loc (keys %$all) { + my $bn = (split(m!/!, $loc))[-1]; + ++$bn{$bn}; + } + push @c, grep { + $bn{$_} == 1 && /\A\Q$cur[0]/ + } keys %bn; + } return @c if @c; } unshift(@cur, pop @argv);