+# Pager handling
+#--------------------------------------------------------------------------#
+
+sub get_pager { $ENV{'PAGER'} || `which less` || `which more` }
+
+sub in_pager { shift->original_stdout ? 1 : 0 }
+
+sub start_pager {
+ my $self = shift;
+ my $content = shift;
+ if (!$self->in_pager) {
+ local $ENV{'LESS'} ||= '-FXe';
+ local $ENV{'MORE'};
+ $ENV{'MORE'} ||= '-FXe' unless $^O =~ /^MSWin/;
+
+ my $pager = $self->get_pager;
+ return unless $pager;
+ open (my $cmd, "|-", $pager) || return;
+ $|++;
+ $self->original_stdout(*STDOUT);
+
+ # $pager will be closed once we restore STDOUT to $original_stdout
+ *STDOUT = $cmd;
+ }
+}
+
+sub end_pager {
+ my $self = shift;
+ return unless ($self->in_pager);
+ *STDOUT = $self->original_stdout;
+
+ # closes the pager
+ $self->original_stdout(undef);
+}
+
+#--------------------------------------------------------------------------#