#!/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