git.shiar.nl
/
barcat.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
negative limit range counting from end
[barcat.git]
/
barcat
diff --git
a/barcat
b/barcat
index 5d0f85c287b571a726a6426ae027406b3b8cb0ef..0316b64460300a7e5ffb3dc73b4c696fe20024c2 100755
(executable)
--- a/
barcat
+++ b/
barcat
@@
-209,12
+209,21
@@
sub show_lines {
state $nr =
$opt{hidemin} < 0 ? @lines + $opt{hidemin} + 1 :
$opt{hidemin};
state $nr =
$opt{hidemin} < 0 ? @lines + $opt{hidemin} + 1 :
$opt{hidemin};
-@lines or return;
@lines > $nr 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} // (
@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;
$order[0]
) // 0;
my $minval = $opt{minval} // min $order[-1] // (), 0;
@@
-277,8
+286,7
@@
say(
color(0),
) if $opt{header};
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 :
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};
sub show_stat {
if ($opt{hidemin} or $opt{hidemax}) {
my $linemin = $opt{hidemin};
- $linemin += @lines if $linemin < 0;
my $linemax = ($opt{hidemax} || @lines) - 1;
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
);
printf '%.8g of ', $opt{'sum-format'}->(
sum(grep {length} @values[$linemin .. $linemax]) // 0
);