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