#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Curses::UI;
use Time::HiRes 'sleep';
use AnyEvent;
my $cui = Curses::UI->new(-color_support => 1);
my $win = $cui->add('progressbars', 'Window');
my $colors = [qw/red green yellow blue magenta cyan white/];
while (1) {
my $cv = AnyEvent->condvar;
my $bars = [];
my $n = 0;
for my $name (1 .. $ENV{LINES}) {
$win->delete('progressbar-' . $name);
my $bar = $win->add(
'progressbar-' . $name,
'Progressbar',
-max => 100,
-pos => 0,
-nocenterline => 1,
-border => 0,
-y => $n++,
-fg => $colors->[int(rand() * @$colors)],
-bg => $colors->[int(rand() * @$colors)],
);
$bar->draw;
$cv->begin;
push @$bars, $bar;
my $t; $t = AnyEvent->timer(
interval => 0.01,
after => 3 * rand,
cb => sub {
if ($bar->get < 100) {
$bar->pos($bar->get + rand() * 3);
$bar->draw;
} else {
undef $t;
$cv->end;
}
} );
}
$cv->recv;
}