Here is a proof of concept, uses Data::Dump::Streamer and cpan STSI/TermReadKey-2.30.02.tar.gz (or cpanp i STSI/TermReadKey-2.30.02.tar.gz)
use Term::ReadKey;
use strict; use warnings;
my @completion_list = qw[ ro sham bo foo bar baz ];
{
my $orig_prompt = "Hi: ";
my $prompt = $orig_prompt;
my $prev_prompt = $orig_prompt;
my $tab = do {
my $ix = -1;
my $xx = @completion_list - 1;
sub {
$ix++;
return $completion_list[ $ix % $xx ];
};
};
$|=1;
print $prompt;
my $key ;
while( 1 ){
$key = ReadKey(-1);
next unless defined $key;
if( $key eq "\r"){
print "\n";
last;
} elsif( $key eq "\t" ){
my $completion = $tab->();
$prompt = $orig_prompt . $completion;
#~ FAIL print "\b" x ( 1 + length $prev_prompt ), $prompt;
#~ FAIL print "\b" x ( 100 ), $prompt;
#~ FAIL print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
+b\b\b\b$prompt";
print "\r" , " " x ( length $prev_prompt );
print "\r", $prompt;
$prev_prompt = $prompt;
} elsif( $key eq "\e") {
print "\r" , " " x ( length $prev_prompt );
$prompt = $orig_prompt ;
print "\r", $prompt;
$prev_prompt = $prompt;
} else {
use DDS; warn Dump $key ;
}
}
use DDS; warn Dump [ $key, $orig_prompt, $prompt, $prev_prompt ] ;
}
It could make a great addition to Term::Interact/example