1#!/usr/bin/env perl 2 3use warnings; 4use strict; 5use v5.10; 6 7use Carp qw(croak); 8use Umph::Prompt; 9 10my @items; 11 12sub rand_title 13{ 14 my $r = int(rand(1000)); 15 open my $fh, "<", "/usr/share/dict/american-english" or croak "$!\n"; 16 17 my $i = 0; 18 while (<$fh>) 19 { 20 last if $i == $r; 21 ++$i; 22 } 23 close $fh; 24 my $s = $_; 25 chomp $s; 26 $s; 27} 28 29my $prompt; 30 31sub init 32{ 33 for (my $i = 0; $i < 222; ++$i) 34 { 35 push @items, 36 {title => rand_title(), url => 'http://foo.bar', selected => 0}; 37 } 38 39 my %c = ( 40 q => sub { 41 my ($p, $args) = @_; 42 $p->exit(\@items, $args); 43 }, 44 d => sub { 45 my ($p, $args) = @_; 46 $p->display(\@items, $args); 47 }, 48 m => sub { 49 my ($p, $args) = @_; 50 $p->max_shown_items(@{$args}); 51 }, 52 s => sub { 53 my ($p, $args) = @_; 54 $p->select(\@items, $args); 55 }, 56 h => sub { 57 my ($p, $args) = @_; 58 $p->help($args); 59 }, 60 ); 61 62 $prompt = new Umph::Prompt( 63 commands => \%c, 64 prompt_msg => 'pager', 65 total_items => scalar @items, 66 current_index => 0, 67 max_shown_items => 20, 68 ontoggle => sub { 69 my ($p, $args) = @_; 70 71 # say STDERR "ontoggle = args = $args" if $args; 72 $p->toggle(\@items, $args); 73 }, 74 onitems => sub {return \@items}, 75 ); 76 77 $prompt->exec; 78} 79 80sub main 81{ 82 init; 83} 84 85main; 86 87# vim: set ts=2 sw=2 tw=72 expandtab: 88