1 package Term::Complete;
6 our @ISA = qw(Exporter);
7 our @EXPORT = qw(Complete);
10 # @(#)complete.pl,v1.2 (me@anywhere.EBay.Sun.COM) 09/23/91
14 Term::Complete - Perl word completion module
18 $input = Complete('prompt_string', \@completion_list);
19 $input = Complete('prompt_string', @completion_list);
23 This routine provides word completion on the list of words in
24 the array (or array ref).
26 The tty driver is put into raw mode using the system command
27 C<stty raw -echo> and restored using C<stty -raw echo>.
29 The following command characters are defined:
35 Attempts word completion.
40 Prints completion list.
41 Defined by I<$Term::Complete::complete>.
45 Erases the current input.
46 Defined by I<$Term::Complete::kill>.
48 =item E<lt>delE<gt>, E<lt>bsE<gt>
51 Defined by I<$Term::Complete::erase1> and I<$Term::Complete::erase2>.
57 Bell sounds when word completion fails.
61 The completion character E<lt>tabE<gt> cannot be changed.
69 our($complete, $kill, $erase1, $erase2);
78 my($prompt, @cmp_lst, $cmp, $test, $l, @match);
79 my ($return, $r) = ("", 0);
85 if (ref $_[0] || $_[0] =~ /^\*/) {
86 @cmp_lst = sort @{$_[0]};
92 system('stty raw -echo');
94 print($prompt, $return);
95 while (($_ = getc(STDIN)) ne "\r") {
97 # (TAB) attempt completion
99 @match = grep(/^$return/, @cmp_lst);
100 unless ($#match < 0) {
101 $l = length($test = shift(@match));
102 foreach $cmp (@match) {
103 until (substr($cmp, 0, $l) eq substr($test, 0, $l)) {
108 print($test = substr($test, $r, $l - $r));
109 $r = length($return .= $test);
114 # (^D) completion list
115 $_ eq $complete && do {
116 print(join("\r\n", '', grep(/^$return/, @cmp_lst)), "\r\n");
131 # (DEL) || (BS) erase
132 ($_ eq $erase1 || $_ eq $erase2) && do {
151 system('stty -raw echo');