aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/trap.fish
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-04-28 16:31:25 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-04-28 16:31:25 -0700
commit6496adf101d6cd04b2d579509454c17f1965281f (patch)
treeaf35cf93b66d3de18a54808286f57449d59342c4 /share/functions/trap.fish
parent79f8d5c51e5fa4ed55770445a38e7d3556538a7b (diff)
Make trap sort of work on OS X
Diffstat (limited to 'share/functions/trap.fish')
-rw-r--r--share/functions/trap.fish31
1 files changed, 21 insertions, 10 deletions
diff --git a/share/functions/trap.fish b/share/functions/trap.fish
index 5432df1a..640567f3 100644
--- a/share/functions/trap.fish
+++ b/share/functions/trap.fish
@@ -25,21 +25,32 @@ function trap -d 'Perform an action when the shell receives a signal'
set -l mode
set -l cmd
set -l sig
- set -l shortopt
- set -l longopt
- set -l shortopt -o lph
+ set -l options
set -l longopt
- if not getopt -T >/dev/null
- set longopt -l print,help,list-signals
- end
-
- if not getopt -n type -Q $shortopt $longopt -- $argv >/dev/null
- return 1
+ set -l shortopt lph
+ if not getopt -T > /dev/null
+ # GNU getopt
+ set longopt print,help,list-signals
+ set options -o $shortopt -l $longopt --
+ # Verify options
+ if not getopt -n type $options $argv >/dev/null
+ return 1
+ end
+ else
+ # Old getopt, used on OS X
+ set options $shortopt
+ # Verify options
+ if not getopt $options $argv >/dev/null
+ return 1
+ end
end
- set -l tmp (getopt $shortopt $longopt -- $argv)
+ # Do the real getopt invocation
+ set -l tmp (getopt $options $argv)
+ # Break tmp up into an array
+ set -l opt
eval set opt $tmp
while count $opt >/dev/null