mirror of
				https://github.com/mitchell/swim.fish.git
				synced 2025-11-04 07:35:25 +00:00 
			
		
		
		
	Separate execution and command definition
This commit is contained in:
		
							parent
							
								
									e3f1ed12fa
								
							
						
					
					
						commit
						479f57997a
					
				
							
								
								
									
										120
									
								
								run
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								run
									
									
									
									
									
								
							| 
						 | 
					@ -1,86 +1,7 @@
 | 
				
			||||||
#!/usr/bin/env fish
 | 
					#!/usr/bin/env fish
 | 
				
			||||||
# This run(.fish) script serves as a central place to store frequently run commands for this project.
 | 
					 | 
				
			||||||
# Source: https://github.com/mitchell/run.fish
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Config ###
 | 
					source ./run.fish
 | 
				
			||||||
# Top-level configurations, like function prefixes and argument delimeters
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
set -g run_func_prefix 'run'
 | 
					 | 
				
			||||||
set -g run_arg_delimeter ':'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function define_aliases
 | 
					 | 
				
			||||||
    alias run_h='run_hello'
 | 
					 | 
				
			||||||
    alias run_l='run_lang'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    alias lang_f='lang_fr'
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Commands ###
 | 
					 | 
				
			||||||
# Add, edit, and remove commands freely below.
 | 
					 | 
				
			||||||
# To add a command simply create a function with this naming scheme: {run_func_prefix}_{name}.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
function run_hello -d 'Say hello to the world'
 | 
					 | 
				
			||||||
    echo 'hello, world!'
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function run_hey -a name -d 'Say hey to someone specific'
 | 
					 | 
				
			||||||
    echo "hey, $name!"
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function run_lang -a command -d 'Groups lang subcommands'
 | 
					 | 
				
			||||||
    function lang_en -d 'Say hello in english'
 | 
					 | 
				
			||||||
        run_hello
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function lang_fr -a name -d 'Say hello the world or someone specific, in french'
 | 
					 | 
				
			||||||
        if test -n "$name"
 | 
					 | 
				
			||||||
            echo "bonjour, $name!"
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            echo 'bonjour, le monde!'
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    execute_command 'lang' $command
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Default Commands ###
 | 
					 | 
				
			||||||
# Do not edit, unless you want to alter how the default commands work.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Below is a set of default commands, like help and commands. They introspect on any valid run
 | 
					 | 
				
			||||||
# script.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Examples:
 | 
					 | 
				
			||||||
# ./run help
 | 
					 | 
				
			||||||
# ./run help:hello
 | 
					 | 
				
			||||||
# ./run commands
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
function "$run_func_prefix"_commands -d 'List all available commands'
 | 
					 | 
				
			||||||
    functions --names | grep $run_func_prefix'_' | string replace $run_func_prefix'_' ''
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function "$run_func_prefix"_help -a command -d 'Print command definition'
 | 
					 | 
				
			||||||
    if test -n "$command"
 | 
					 | 
				
			||||||
        functions $run_func_prefix'_'$command
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        echo 'Here are the available commands:'
 | 
					 | 
				
			||||||
        $run_func_prefix'_commands'
 | 
					 | 
				
			||||||
        echo \n"To see a command's definition and description do `./run help$run_arg_delimeter{command}`"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Command Execution ###
 | 
					 | 
				
			||||||
# Do not edit, unless you want to alter how the script executes commands.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This script can execute 1 or more commands like make. It can also receive 1 argument per
 | 
					 | 
				
			||||||
# command or subcommand in the following format: {name}{run_arg_delimeter}{argument}.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Examples:
 | 
					 | 
				
			||||||
# ./run hello
 | 
					 | 
				
			||||||
# ./run hey:mitchell
 | 
					 | 
				
			||||||
# ./run lang:fr:mitchell
 | 
					 | 
				
			||||||
# ./run hello hey:mitchell lang:fr
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
function main
 | 
					function main
 | 
				
			||||||
    define_aliases
 | 
					    define_aliases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +9,11 @@ function main
 | 
				
			||||||
        set -l last_status $status
 | 
					        set -l last_status $status
 | 
				
			||||||
        test $last_status -gt 0; and exit $last_status
 | 
					        test $last_status -gt 0; and exit $last_status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        execute_command $run_func_prefix $command
 | 
					        execute_command 'run' $command
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if test -z "$argv"
 | 
				
			||||||
 | 
					        execute_command 'run' default
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,6 +21,8 @@ function execute_command -a prefix command
 | 
				
			||||||
    set -l args (string split --max 1 $run_arg_delimeter $command)
 | 
					    set -l args (string split --max 1 $run_arg_delimeter $command)
 | 
				
			||||||
    set -l func $prefix'_'$args[1]
 | 
					    set -l func $prefix'_'$args[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    define_default_functions $prefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if functions -q $func
 | 
					    if functions -q $func
 | 
				
			||||||
        $func $args[2]
 | 
					        $func $args[2]
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					@ -104,4 +31,35 @@ function execute_command -a prefix command
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
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 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 and description 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
 | 
					main $argv
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										47
									
								
								run.fish
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								run.fish
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					# This run.fish script serves as a central place to store frequently run commands for this project.
 | 
				
			||||||
 | 
					# Source: https://github.com/mitchell/run.fish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Config ###
 | 
				
			||||||
 | 
					# Top-level configurations, like function prefixes and argument delimeters
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					set -g run_arg_delimeter ':'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function define_aliases
 | 
				
			||||||
 | 
					    alias run_h='run_hello'
 | 
				
			||||||
 | 
					    alias run_l='run_lang'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    alias lang_f='lang_fr'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Commands ###
 | 
				
			||||||
 | 
					# Add, edit, and remove commands freely below.
 | 
				
			||||||
 | 
					# To add a command simply create a function with this naming scheme: {run_func_prefix}_{name}.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					function run_default -d 'Say bonjour to run.fish user'
 | 
				
			||||||
 | 
					    run_lang fr:'run.fish user'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function run_hello -d 'Say hello to the world'
 | 
				
			||||||
 | 
					    echo 'hello, world!'
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function run_hey -a name -d 'Say hey to someone specific'
 | 
				
			||||||
 | 
					    echo "hey, $name!"
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function run_lang -a command -d 'Groups lang subcommands'
 | 
				
			||||||
 | 
					    function lang_en -d 'Say hello in english'
 | 
				
			||||||
 | 
					        run_hello
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function lang_fr -a name -d 'Say hello the world or someone specific, in french'
 | 
				
			||||||
 | 
					        if test -n "$name"
 | 
				
			||||||
 | 
					            echo "bonjour, $name!"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            echo 'bonjour, le monde!'
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    execute_command 'lang' $command
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
		Reference in a new issue