blob: 9ef141acd4dd513f11e6fa7a501fc91a113f7ec7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package Reply::Plugin::Pager;
use strict;
use warnings;
# ABSTRACT: command to automatically open long results in a pager
use base 'Reply::Plugin';
use Term::ReadKey;
=head1 SYNOPSIS
; .replyrc
[Pager]
pager = less
=head1 DESCRIPTION
This plugin notices when too much output is going to be displayed as the result
of an expression, and automatically loads the result into a pager instead.
The C<pager> option can be specified to provide a different pager to use,
otherwise it will use the value of C<$ENV{PAGER}>.
=cut
sub new {
my $class = shift;
my %opts = @_;
if (defined $opts{pager}) {
$ENV{PAGER} = $opts{pager};
}
# delay this because it checks $ENV{PAGER} at load time
require IO::Pager;
my $self = $class->SUPER::new(@_);
return $self;
}
sub print_result {
my $self = shift;
my ($next, @result) = @_;
my ($cols, $rows) = GetTerminalSize;
my @lines = map { split /\n/ } @result;
if (@lines >= $rows - 2) {
IO::Pager::open(my $fh) or die "Couldn't run pager: $!";
$fh->print(@result, "\n");
}
else {
$next->(@result);
}
}
=for Pod::Coverage
print_result
=cut
1;
|