diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2013-01-12 15:22:09 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2013-01-12 15:22:09 -0800 |
commit | 11639619274d531429afb5a5895897da6d92ba41 (patch) | |
tree | ceacfc1b50e4ce906cbe76f6c14999ff2533cb14 /share/functions/seq.fish | |
parent | e1190eb1f34418f6c7a422f537eb75a434e71240 (diff) |
Actually add the seq function (oops)
Diffstat (limited to 'share/functions/seq.fish')
-rw-r--r-- | share/functions/seq.fish | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/share/functions/seq.fish b/share/functions/seq.fish new file mode 100644 index 00000000..f710c235 --- /dev/null +++ b/share/functions/seq.fish @@ -0,0 +1,49 @@ +# If seq is not installed, then define a function that invokes __fish_fallback_seq +# test -x in /usr/bin/seq because that's where it usually is and +# that's substantially cheaper than the type function + +if begin ; not test -x /usr/bin/seq ; and not type -f seq > /dev/null; end + # No seq command + function seq --description "Print sequences of numbers" + __fish_fallback_seq $argv + end + + function __fish_fallback_seq --description "Fallback implementation of the seq command" + + set -l from 1 + set -l step 1 + set -l to 1 + + switch (count $argv) + case 1 + set to $argv[1] + + case 2 + set from $argv[1] + set to $argv[2] + + case 3 + set from $argv[1] + set step $argv[2] + set to $argv[3] + + case '*' + printf (_ "%s: Expected 1, 2 or 3 arguments, got %d\n") seq (count $argv) + exit 1 + + end + + for i in $from $step $to + if not echo $i | grep -E '^-?[0-9]*([0-9]*|\.[0-9]+)$' >/dev/null + printf (_ "%s: '%s' is not a number\n") seq $i + exit 1 + end + end + + if [ $step -ge 0 ] + echo "for( i=$from; i<=$to ; i+=$step ) i;" | bc + else + echo "for( i=$from; i>=$to ; i+=$step ) i;" | bc + end + end +end |