my ($optname, $optval) = @_;
$optval ||= 0;
$optval =~ /\A-[0-9]+\z/ and $optval .= '-'; # tail shorthand
+ $optval =~ s/[+]/--/;
($opt{hidemin}, $opt{hidemax}) =
- $optval =~ m/\A (?: (-? [0-9]+)? - )? ([0-9]+)? \z/ or die(
+ $optval =~ m/\A (?: (-? [0-9]+)? - )? (-? [0-9]+)? \z/ or die(
"Value \"$optval\" invalid for option limit",
" (range expected)\n"
);
+ s/\A-0*\z// and $_ ||= undef for $opt{hidemax} // ();
},
'log|e!',
'header!',
my $limit = $#lines;
if (defined $opt{hidemax}) {
- if ($opt{hidemin} and $opt{hidemin} < 0) {
+ if ($opt{hidemax} < 0) {
+ $limit = $nr - $opt{hidemax} - 1;
+ }
+ elsif ($opt{hidemin} and $opt{hidemin} < 0) {
$limit -= $opt{hidemax} - 1;
}
elsif ($opt{hidemax} <= $limit) {
$range &&= log $range if $opt{log};
my $lenval = $opt{'value-length'} // max map { length } @order;
my $len = defined $opt{trim} && $opt{trim} <= 0 ? -$opt{trim} + 1 :
- max map { length $values[$_] && length $lines[$_] }
- 0 .. min $#lines, $opt{hidemax} || (); # left padding
+ max(map { length $values[$_] && length $lines[$_] } $nr .. $limit)
+ // 0; # left padding
my $size = defined $opt{width} && $range &&
($opt{width} - $lenval - $len - !!$opt{indicators}); # bar multiplication
return $func;
}
elsif ($func =~ /\A\/($float)\z/) {
- my @range = $1;
- #TODO log
- for (my $next = $1; $next < $maxval; $next += $range[0]) {
- push @range, $next;
+ my @range = my $multiple = my $next = $1;
+ while ($next < $maxval) {
+ $multiple *= 10 if $opt{log};
+ push @range, $next += $multiple;
}
return @range;
}
Output partial progress every given number of
seconds or input lines
-l, --length=[-]SIZE[%] Trim line contents (between number and bars)
- -L, --limit[=(N|-LAST|START-[END])]
- Stop output after a number of lines
+ -L, --limit=[N|[-]START(-[END]|+N)]
+ Select a range of lines to display
-e, --log Logarithmic (exponential) scale instead of linear
--graph-format=CHAR Glyph to repeat for the graph line
-m, --markers=FORMAT Statistical positions to indicate on bars
Prepend a dash (i.e. make negative) to enforce padding
regardless of encountered contents.
-=item -L, --limit[=(<count> | -<last> | <start>-[<end>])]
+=item -L, --limit=[<count> | [-]<start>(-[<end>] | +<count>)]
-Stop output after a number of lines.
-A single value indicates the last line number (like C<head>),
+Select a range of lines to display.
+A single integer indicates the last line number (like C<head>),
or first line counting from the bottom if negative (like C<tail>).
-A specific range can be given by two values.
-All input is still counted and analyzed for statistics,
+A range consists of a starting line number followed by either
+a dash C<-> to an optional end, or plus sign C<+> with count.
+
+All hidden input is still counted and analyzed for statistics,
but disregarded for padding and bar size.
=item -e, --log