PAR-Packer

 view release on metacpan or  search on metacpan

contrib/stdio/Stdio.pm  view on Meta::CPAN

##==============================================================================
## Tk::Stdio - capture program standard output and standard error,
##             accept standard input
##==============================================================================
## Tk::Stdio is based on:
##
## Tk::Stderr - capture program standard error output
##==============================================================================
require 5.006;

package Tk::Stdio;
use strict;
use warnings;
use vars qw($VERSION @ISA);
($VERSION) = q$Revision: 1.0 $ =~ /Revision:\s+(\S+)/ or $VERSION = "0.0";
use base qw(Tk::Derived Tk::MainWindow);

use Tk::Text;
use Tk::Frame;

=pod

=head1 NAME

Tk::Stdio - capture standard output and error,
            accept standard input,
            display in separate window

=head1 SYNOPSIS

    use Tk::Stdio;

    $mw = MainWindow->new->InitStdio;
    print "something\n";    ## goes to standard IO window
    print STDERR 'stuff';   ## likewise
	warn 'eek!';            ## likewise
    my $input = <STDIN>;    ## keyboard entry is in standard IO window
    my $char = getc;        ## likewise

=head1 DESCRIPTION

This module captures the standard output or error of a program and redirects it to a read
only text widget, which doesn't appear until necessary. When it does appear, the
user can close it; it'll appear again when there is more output. Standard input can be
entered in the widget, which becomes temporarily writable.

=cut

$Tk::Stdio::first_char = '1.0';    # 'line.char' set in READLINE or GETC

##==============================================================================
## Populate
##==============================================================================
sub Populate {
    my ( $mw, $args ) = @_;
    my $private = $mw->privateData;
    $private->{ReferenceCount} = 0;
    $private->{Enabled}        = 0;

    $mw->SUPER::Populate($args);

    $mw->withdraw;
    $mw->protocol( WM_DELETE_WINDOW => [ $mw => 'withdraw' ] );

    my $f = $mw->Frame( Name => 'stderr_frame', )->pack( -fill => 'both', -expand => 1 );

    my $text = $f->Scrolled( 'Text',
                             -wrap             => 'char',
                             -scrollbars       => 'oe',
                             -state            => 'disabled',
                             -fg               => 'white',
                             -bg               => 'black',
                             -insertbackground => 'white',
                           )->pack( -fill => 'both', -expand => 1 );

    $text->bind( '<Button>', sub { $text->SetCursor('end') } );



( run in 1.717 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )