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]