diff --git a/pick b/pick new file mode 100755 index 0000000..00fe027 --- /dev/null +++ b/pick @@ -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, ); + } 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]; diff --git a/pick.1 b/pick.1 new file mode 100644 index 0000000..333fc67 --- /dev/null +++ b/pick.1 @@ -0,0 +1,25 @@ +.Dd Sep 13, 2023 +.Dt TS 1 +.Os +.Sh NAME +.Nm pick +.Nd Choose interactively from the set of arguments and input lines +.Sh SYNOPSIS +.Nm +.Ar arg ... +.Sh DESCRIPTION +.Nm +will display a Korn shell style selection menu with stdin contents and +arguments as options. +.Pp +When a selection is made, the command will print its value to stdout. +If the selection is aborted, nothing will be printed. +.Sh ENVIRONMENT +.Bl -tag -width PS3 +.It Ev PS3 +Prompt string displayed to the user (default: #?). +.El +.Sh EXIT STATUS +.Ex -std +.Sh AUTHORS +.An Adolfo Perez Alvarez Aq Mt adolfopa@sdf.org