#!perl use strict; use warnings; use Tk; my $mw = tkinit(-width => 400, -height => 300,); $mw->packPropagate(0); my $default_text = 'Default...'; my $previous_input = ''; my $e = $mw->Entry(-text => $default_text)->pack(-fill => 'x', -expand => 0); my $e2 = $mw->Entry(-text => 'dummy',)->pack(-fill => 'both', -expand => 1); $e->bind('' => [sub{ my $entry = shift; my $default = shift; my $previous = shift; if( $entry->get() eq $default_text ) { $entry->delete(0, 'end'); $$previous = ''; }else{ $$previous = $entry->get(); } }, $default_text, \$previous_input]); $e->bind('' => [sub{ my $entry = shift; my $default = shift; my $previous = shift; if( $entry->get() eq '' ) { $entry->insert(0, $default_text); $$previous = ''; }else{ $$previous = $entry->get(); } print "previous input is now set to [$$previous]\n"; }, $default_text, \$previous_input]); $e->bind('' => [sub{ my $entry = shift; my $mw = shift; my $previous = shift; if( $$previous ne '' and $entry->get() ne $previous_input ) { $entry->delete(0, 'end'); $entry->insert(0, $$previous); } $mw->focus(); }, $mw, \$previous_input]); $e->bind('' => [sub{ my $entry = shift; my $key = shift; return undef if $key eq 'Escape'; print "$key was pressed\n"; }, Ev('K')]); $mw->MainLoop(); exit(0);