From 11639619274d531429afb5a5895897da6d92ba41 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 12 Jan 2013 15:22:09 -0800 Subject: [PATCH] Actually add the seq function (oops) --- share/functions/seq.fish | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 share/functions/seq.fish diff --git a/share/functions/seq.fish b/share/functions/seq.fish new file mode 100644 index 000000000..f710c235d --- /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