forked from adolfopa/miscutils
pick - Select one entry from stdin and/or argv
Pick will take stdin and all command line arguments and display a ksh-like selection menu will all input lines/arguments.
This commit is contained in:
35
pick
Executable file
35
pick
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Scalar::Util qw{looks_like_number};
|
||||
|
||||
my @choices;
|
||||
|
||||
for (@ARGV) {
|
||||
if (/^--$/) {
|
||||
push(@choices, <STDIN>);
|
||||
} elsif (/^@(.+)$/) {
|
||||
open(my $fh, '<', $1);
|
||||
push(@choices, <$fh>);
|
||||
close($fh);
|
||||
} else {
|
||||
push(@choices, "$_\n");
|
||||
}
|
||||
}
|
||||
|
||||
open(my $tty, '<', '/dev/tty');
|
||||
|
||||
my $sel;
|
||||
until (looks_like_number($sel) && $sel > 0 && $sel <= @choices) {
|
||||
while (my ($i, $c) = each @choices) {
|
||||
print $i+1 . ') ' . $choices[$i];
|
||||
}
|
||||
print $ENV{'PS3'} || '#? ';
|
||||
exit(1) unless defined($sel = <$tty>);
|
||||
}
|
||||
|
||||
close($tty);
|
||||
|
||||
print $choices[$sel - 1];
|
||||
Reference in New Issue
Block a user