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 ] ; }