#!/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 for command in $argv and execute_command $run_func_prefix $command end and if test -z "$argv" execute_command $run_func_prefix 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 test -z "$command" execute_command $prefix default else if functions -q $func $func $args[2] 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 if not functions -q $prefix\_default function $prefix\_default -a arg -d 'Alias for help command' $prefix\_help $arg end end end main $argv