Niro* by cho45

#10 CUI screensaver: Terminal progressbars festa

#!/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;
}
blog comments powered by Disqus
login