swim.fish/run

76 lines
2.0 KiB
Fish
Executable File

#!/usr/bin/env fish
set -g run_func_prefix 'run'
if test -f ./run.fish
source ./run.fish
else
echo 'No run.fish found in current directory. Please copy the template from https://github.com/mitchell/run.fish'
exit 1
end
function main
alias $run_func_prefix\_default=$run_func_prefix\_help
define_aliases
for command in $argv
set -l last_status $status
test $last_status -gt 0; and exit $last_status
execute_command $run_func_prefix $command
end
if test -z "$argv"
execute_command $run_func_prefix default
end
end
function execute_command -a prefix command
set -l args (string split --max 1 $run_arg_delimeter $command)
set -l func $prefix\_$args[1]
define_default_functions $prefix
if functions -q $func
$func $args[2]
else if test -z "$command"
execute_command $prefix default
else
echo "$prefix command '$command' does not exist"
exit 1
end
end
function define_default_functions
set -g prefix $argv[1]
function _$prefix\_commands -d 'List all available commands'
set -l names (functions --names | grep $prefix\_)
for name in $names
set -l details (functions -D -v $name)
set -l description $details[5]
set -l short_name (string replace $prefix\_ '' $name)
if test (string length $short_name) -ge 8
echo $short_name\t$description
else
echo $short_name\t\t$description
end
end
end
function $prefix\_help -a command -d 'Print help menu or command definition'
if test -n "$command"
functions $prefix\_$command
else
echo 'Here are the available commands:'\n
_$prefix\_commands
echo \n"To see a command's definition do `run help$run_arg_delimeter{command}`"
echo "To see a subcommand group's help menu do `run {command}$run_arg_delimeter""help`"
end
end
end
main $argv