for my application would be really better, if I could just change the Tk::ExecuteCommand and not use threads
I think the change is needed somewhere in these 2 functions in Tk::ExecuteCommand (http://search.cpan.org/src/LUSOL/tkjuke-1.0.6/Tk/ExecuteCommand.pm):
sub _read_stdout {
# Called when input is available for the output window. Also chec
+ks
# to see if the user has clicked Cancel.
my($self) = @_;
if ($self->{-finish}) {
$self->kill_command;
} else {
my $h = $self->{-handle};
if ( sysread $h, $_, 4096 ) {
my $t = $self->Subwidget('text');
$t->insert('end', $_);
$t->yview('end');
} else {
$self->{-finish} = 1;
}
}
} # end _read_stdout
sub execute_command {
# Execute the command and capture stdout/stderr.
my($self) = @_;
my $h = IO::Handle->new;
die "IO::Handle->new failed." unless defined $h;
$self->{-handle} = $h;
$self->{-pid} = open $h, $self->{-command} . ' 2>&1 |';
if (not defined $self->{-pid}) {
$self->Subwidget('text')->insert('end',
"'" . $self->{-command} . "' : $!\n");
$self->kill_command;
return;
}
$h->autoflush(1);
$self->fileevent($h, 'readable' => [\&_read_stdout, $self]);
my $doit = $self->Subwidget('doit');
$doit->configure(
-text => 'Cancel',
-relief => 'raised',
-state => 'normal',
-command => [\&kill_command, $self],
);
my $doit_bg = ($doit->configure(-background))[3];
$self->_flash_doit(-background => $doit_bg, qw/cyan 500/);
$self->waitVariable(\$self->{-finish});
} # end execute_command
... is it actually possible to solve my problem so easily - just with changing this module (replace somehow the fileevent, which could be the problem)?
|