aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/seq.fish
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-01-12 15:22:09 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-01-12 15:22:09 -0800
commit11639619274d531429afb5a5895897da6d92ba41 (patch)
treeceacfc1b50e4ce906cbe76f6c14999ff2533cb14 /share/functions/seq.fish
parente1190eb1f34418f6c7a422f537eb75a434e71240 (diff)
Actually add the seq function (oops)
Diffstat (limited to 'share/functions/seq.fish')
-rw-r--r--share/functions/seq.fish49
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