From 00dcbae8d4ba1ae9aa8fce435c6376fdb44e4814 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Sun, 28 Mar 2021 04:51:55 +0200 Subject: [PATCH] negative limit range counting from end --- barcat | 21 ++++++++++++++++----- t/t1505-bottom_range.in | 1 + t/t1505-bottom_range_-L-4-3.out | 2 ++ t/t1506-limit_offset.in | 1 + t/t1506-limit_offset_-L-4+2_#TODO.out | 1 + 5 files changed, 21 insertions(+), 5 deletions(-) create mode 120000 t/t1505-bottom_range.in create mode 100644 t/t1505-bottom_range_-L-4-3.out create mode 120000 t/t1506-limit_offset.in create mode 120000 t/t1506-limit_offset_-L-4+2_#TODO.out diff --git a/barcat b/barcat index 5d0f85c..0316b64 100755 --- a/barcat +++ b/barcat @@ -209,12 +209,21 @@ sub show_lines { state $nr = $opt{hidemin} < 0 ? @lines + $opt{hidemin} + 1 : $opt{hidemin}; -@lines or return; @lines > $nr or return; +my $limit = $#lines; +if (defined $opt{hidemax}) { + if ($opt{hidemin} and $opt{hidemin} < 0) { + $limit -= $opt{hidemax} - 1; + } + else { + $limit = $opt{hidemax} - 1; + } +} + @order = sort { $b <=> $a } @order unless tied @order; my $maxval = $opt{maxval} // ( - $opt{hidemax} ? max grep { length } @values[0 .. $opt{hidemax} - 1] : + $opt{hidemax} ? max grep { length } @values[$nr .. $limit] : $order[0] ) // 0; my $minval = $opt{minval} // min $order[-1] // (), 0; @@ -277,8 +286,7 @@ say( color(0), ) if $opt{header}; -while ($nr <= $#lines) { - $nr >= $opt{hidemax} and last if defined $opt{hidemax}; +while ($nr <= $limit) { my $val = $values[$nr]; my $rel = length $val && $range && ($val - $minval) / $range; my $color = !length $val || !$opt{palette} ? undef : @@ -320,8 +328,11 @@ say $opt{palette} ? color(0) : '' if $opt{spark}; sub show_stat { if ($opt{hidemin} or $opt{hidemax}) { my $linemin = $opt{hidemin}; - $linemin += @lines if $linemin < 0; my $linemax = ($opt{hidemax} || @lines) - 1; + if ($linemin < 0) { + $linemin += @lines; + $linemax = @lines - $linemax; + } printf '%.8g of ', $opt{'sum-format'}->( sum(grep {length} @values[$linemin .. $linemax]) // 0 ); diff --git a/t/t1505-bottom_range.in b/t/t1505-bottom_range.in new file mode 120000 index 0000000..1350c85 --- /dev/null +++ b/t/t1505-bottom_range.in @@ -0,0 +1 @@ +t1501-end_limit.in \ No newline at end of file diff --git a/t/t1505-bottom_range_-L-4-3.out b/t/t1505-bottom_range_-L-4-3.out new file mode 100644 index 0000000..5ba6aa3 --- /dev/null +++ b/t/t1505-bottom_range_-L-4-3.out @@ -0,0 +1,2 @@ +4274 ----------------------------------- +3350 --------------------------- diff --git a/t/t1506-limit_offset.in b/t/t1506-limit_offset.in new file mode 120000 index 0000000..1350c85 --- /dev/null +++ b/t/t1506-limit_offset.in @@ -0,0 +1 @@ +t1501-end_limit.in \ No newline at end of file diff --git a/t/t1506-limit_offset_-L-4+2_#TODO.out b/t/t1506-limit_offset_-L-4+2_#TODO.out new file mode 120000 index 0000000..0f0f456 --- /dev/null +++ b/t/t1506-limit_offset_-L-4+2_#TODO.out @@ -0,0 +1 @@ +t1505-bottom_range_-L-4-3_#TODO.out \ No newline at end of file -- 2.30.0