From 135d72ac87f20a164c3e29de186dfa642d3b650b Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Fri, 20 Mar 2015 16:13:08 +0100 Subject: wibble --- icevault | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'icevault') diff --git a/icevault b/icevault index eb073cb..800f8a2 100755 --- a/icevault +++ b/icevault @@ -24,7 +24,7 @@ use Getopt::Long qw/:config posix_default no_ignore_case gnu_compat bundling auto_version/; use Encode qw/decode_utf8 encode_utf8/; use I18N::Langinfo (); -use List::Util qw/any first min none/; +use List::Util qw/all any first min none/; # Clean up PATH, and set TMPDIR to a ramdisk's mountpoint if possible @@ -285,15 +285,16 @@ sub complete($;$) { return @matches if $all or $#matches < 1; # find the longest common prefix to determine the depth level of completion - my $p = $matches[0]; - do { chop $p until /\A\Q$p\E/ } foreach @matches; + $matches[0] =~ /\A([A-Za-z0-9-]+):\/\/([^\P{Graph}:\/]+(?::\d+)?)\// or die; + ($s, $h) = ($1, $2); - if ($p =~ /\A[A-Za-z0-9-]+:\/\/[^\P{Graph}:\/]+(?::\d+)?\//) { - } elsif ($p =~ /\A[A-Za-z0-9-]+:\/\//) { + if (all { /\A\Q$s\E:\/\/\Q$h\E\// } @matches) { # common host: list all ids + } elsif (all { /\A\Q$s\E:\/\// } @matches) { # common scheme: list only hosts s#/[^\P{Print}\/]+\z#/# foreach @matches; - } elsif (defined $s) { + } else { # no common scheme: list only schemes s#://[^\P{Graph}\/]+/[^\P{Print}\/]+\z#://# foreach @matches; } + my %matches = map {( $_ => 1 )} @matches; return keys %matches; } -- cgit v1.2.3