#!/usr/local/bin/perl -w use Tk; require Tk::IO; my $top = MainWindow->new; my $status = "Ready for job ..."; $top->Label(-textvariable => \$status, -anchor => 'w')->pack(-side => 'bottom', -fill => 'x', -anchor => 'w'); my $t = $top->Text("-relief" => "raised", "-bd" => "2", "-setgrid" => "true"); my $s = $top->Scrollbar("-command" => ["yview",$t]); $t->configure("-yscrollcommand" => ["set",$s] ); $fh = Tk::IO->new(-linecommand => [$t,'insert','end'], -childcommand => \&Child); $cmd = 'ls -l'; $e = $top->Entry("-width" => 40,"-textvariable" => \$cmd); $e->pack("-side" => "bottom"); $b = $top->Button("-text" => "Do It", "-command" => [\&DoIt,$fh,$e]); $b->pack("-side" => "bottom"); $b = $top->Button("-text" => "Quit", "-command" => ['destroy',$top]); $b->pack("-side" => "bottom"); $b = $top->Button("-text" => "Kill", "-command" => sub { $fh->killpg(3)} ); $b->pack("-side" => "bottom"); $s->pack("-side"=>"left","-fill" => "y"); $t->pack("-side"=>"left","-expand" => "y", "-fill" => "both"); $t->bind("", sub { $t->focus }); $e->update; $e->focus; Tk::MainLoop; sub Child { my ($code,$fh) = @_; my $cmd = join(' ',$fh->command); $status = "code=$code from $cmd"; } sub DoIt {my $fh = shift; my $e = shift; $fh->exec($e->get); }