http://qs321.pair.com?node_id=11118772


in reply to Perl/Tk stdin NOT text box, only one part of code

When you're typing into the text box, it has focus. Cancel the binding to stop adding tags when the text box gets focus, enable it back when the focus goes somewhere else.
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::ROText; my $mw = 'MainWindow'->new(-title => 'Tagging'); $mw->Label(-text => 'Here, the tags are being created:')->pack; my $rotext = $mw->ROText->pack; $mw->Label(-text => 'Try typing here, including the letter "s":')->pac +k; my $text = $mw->Text(-width => 20, -height => 3)->pack; $mw->Entry(-text => 'Click here to change focus.', -state => 'readonly +')->pack; my $label = $mw->Label(-textvariable => \ my $l)->pack; my $max = 1000; my ($i, $repeat, $stop); $repeat = $mw->repeat(10, sub { return if $stop; ++$i; $rotext->insert('end', $i, "T$i"); $l = "$i/$max tags added. Press 's' to stop."; $repeat->cancel if $i == $max; }); sub stop { $stop = ! $stop; $l =~ s/stop/start/; } $mw->bind('<s>', \&stop); $text->bind('<FocusIn>', sub { $mw->bind('<s>', "") }); $text->bind('<FocusOut>', sub { $mw->bind('<s>', \&stop) }); MainLoop();

Update: Fixed the problem with "stop" not being updated.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]