This is a shim to get the features of a modernized Term::Pager into IO::Pager, providing a self-contained executable pure perl pager. It will die if Term::Pager is ever updated, or the shim can be reworked into a forking branch of IO::Pager::Perl; early attempts of which are in __DATA__ of that module.
Term::Pager - Page through text, a screenful at a time, like more or less
use Term:ReadKey; #Optional, but recommended use Term::Pager; my $t = Term::Pager->new( rows => 25, cols => 80 ); $t->add_text( $text ); $t->more();
This is a module for paging through text one screenful at a time. It supports the features you expect, including backwards movement and searching. It uses the keys you expect.
$t = Term::Pager->new( option => value, ... );
If no options are specified, sensible default values will be used. The following options are recognized:
The number of rows on your terminal. The terminal is queried directly with Term::ReadKey if loaded or stty, and if these fail it defaults to 25.
stty
The number of columns on your terminal. The terminal is queried directly with Term::ReadKey if loaded or stty, and if these fail it defaults to 80.
The speed (baud rate) of your terminal. The terminal is queried directly with Term::ReadKey if loaded or stty, and if these fail it defaults to a sensible value.
You will need some text to page through. You can specify text as as a parameter to the constructor:
text => $text
Or add text later:
$t->add_text( $text );
To continuously add text to the pager, you must setup your own event loop, and indicate to more that it should relinquish control e.g;
more
eval{ while( $t->more(RT=>.05) ){ ... $t->add_text("More text to page"); } };
The eval block captures the exception thrown upon termination of the pager so that your own program may continue. The RT parameter indicates that you wish to provide content in real time. This value is also passed to "ReadKey" in Term::ReadKey as the maximum blocking time per keypress and should be between 0 and 1, with larger values trading greater interface responsiveness for slight delays in output. A value of -1 may also be used to request non-blocking polls, but likely will not behave as you would hope.
NOTE: If Term::ReadKey is not loaded but RT is true, screen updates will only occur on keypress.
It is possible to extend the features of Term::Pager by supplying the add_func method with a hash of character keys and callback values to be invoked upon matching keypress; where \c? represents Control-? and \e? represents Alt-? The existing pairings are:
"\n"=> \&downline, #also "\e[B" ' ' => \&downpage, #also "\cv" 'd' => \&downhalf, 'q' => \&done, 'b' => \&uppage, #also "\ev" 'y' => \&upline, #also "\e[A" 'u' => \&uphalf, 'r' => \&refresh, #also "\cl" 'h' => \&help, 'g' => \&to_top, #also '<' 'G' => \&to_bott, #also '>' '/' => \&search, '?' => \&hcraes, #reverse search 'n' => \&next_match,#also 'P' 'p' => \&prev_match,#also 'N' "\e[D" => \&move_left, "\e[C" => \&move_right,
And a special sequence of a number followed by enter analogous to:
'/(\d+)/' => \&jump(\1)
if the value for that key is true.
The dialog method may be particularly useful when enhancing the pager. It accepts a string to display, and an optional timeout to sleep for before the dialog is cleared. If the timeout is missing or 0, the dialog remains until a key is pressed.
dialog
my $t = Term::Pager->new(); $t->add_text("Text to display"); $t->add_func('!'=>\&boo); $t->more(); sub boo{ my $self = shift; $self->dialog("BOO!", 1); }
Should you add additional functionality to your pager, you will likely want to change the contents of the help dialog or possibly the status line. Use the I18N method to replace the default text or save text for your own interface.
I18N
#Get the default help text my $help = $t->I18N('help'); #Minimal status line $t->I18N('status', "<h> help");
Current text elements available for customization are:
404 - search text not found dialog status - displayed at the bottom of the screen top - status line start of file indicator bottom - status line end of file indicator help - help dialog text, a list of keys and their functions
This module uses Termcap, which has been deprecated the Open Group, and may not be supported by your operating system for much longer.
If the termcap entry for your ancient esoteric terminal is wrong or incomplete, this module may either fill your screen with unintelligible gibberish, or drop back to a feature-free mode.
Term::Cap, Term::ReadKey, termcap(5), stty(1), more(1), less(1) Yellowstone National Park
Jeff Weisberg - http://www.tcp4me.com Jerrad Pierce
To install IO::Pager, copy and paste the appropriate command in to your terminal.
cpanm
cpanm IO::Pager
CPAN shell
perl -MCPAN -e shell install IO::Pager
For more information on module installation, please visit the detailed CPAN module installation guide.