The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Tickit::Async;

use Tickit::Widget::Tabbed;
use Tickit::Widget::Scroller;
use Tickit::Widget::Scroller::Item::Text;

use IO::Async::Loop;
use IO::Async::FileStream;
use IO::Async::Protocol::LineStream;

my $tabbed = Tickit::Widget::Tabbed->new(
        tab_position => "bottom",
        pen_active => Tickit::Pen->new( u => 1 ),
);

my $loop = IO::Async::Loop->new;
foreach my $path ( @ARGV ) {
        open my $fh, "<", $path or die "Cannot open $path for reading - $!";

        my $scroller = Tickit::Widget::Scroller->new;
        my $tab = $tabbed->add_tab( $scroller, label => $path );

        my $stream = IO::Async::Protocol::LineStream->new(
                transport => IO::Async::FileStream->new(
                        read_handle => $fh,
                        on_initial => sub {
                                my ( $self ) = @_;
                                $self->seek_to_last( "\n" );
                        },
                ),
                on_read_line => sub {
                        my ( $self, $line ) = @_;
                        my $item = Tickit::Widget::Scroller::Item::Text->new( $line );
                        $scroller->push( $item );
                        $tab->pen->chattr( fg => 5 );
                },
        );

        $tab->set_on_activated( sub {
                my $self = shift;
                $self->pen->delattr( 'fg' );
        } );

        $loop->add( $stream );
}

my $tickit = Tickit::Async->new;
$loop->add( $tickit );

$tickit->set_root_widget( $tabbed );

$tickit->run;