#!/usr/bin/perl -w #entry_auto_complete.pl use Tk; use strict; my $mw = MainWindow->new; #list of recognized words/phrases #perhaps read in from a file of recognized words/phrases my (@list) = ( "apo\'strophe", "Upper", "this one", "that one", "the other one", "the something", "go west", "go east", "go north", "go south", ); @list = sort(@list); #show the list print "Upper, lower, space, apostrophe and all case insensitive\n"; print "\n"; foreach (@list) { print "$_\n"; } print "\n"; my $text = ''; my $entry = $mw->Entry( -textvariable => \$text, -width => 60 )->pack(); $entry->bind( '' => sub { my ($w) = @_; #widget referenced my $ev = $w->XEvent; #get the event object my $A = $ev->A; #get ascii char from the event print "---------------------$A---------------\n"; #if the character entered is [lowercase] OR #[uppercase] OR [a space] OR [an apostrophe] ... if ( $A =~ m/[a-z]|[A-Z]| |'/ ) { foreach (@list) { #compare the entered text to the items in the list if ( $text ne '' and $_ =~ m/^$text/i ) { print "$text -- $_\n"; my $input_length = length($text); my $match_length = length($_); $text = $_; #highlight/select the tail end of the entry field text $entry->selectionFrom($input_length); $entry->selectionTo($match_length); } #if } #foreach } #end if } #sub ); #end bind $mw->Button( -text => 'Quit', -command => sub { exit } )->pack( -fill => 'x' ); $entry->focus(); MainLoop;