2006-11-08 04:55:39 +08:00
2007-01-16 09:29:18 +08:00
function alias --description "Legacy function for creating shellscript functions using an alias-like syntax"
2006-11-18 00:24:38 +08:00
if count $argv > /dev/null
switch $argv [ 1 ]
case -h --h --he --hel --help
__fish_print_help alias
return 0
end
end
2006-11-08 04:55:39 +08:00
set -l name
set -l body
2013-01-02 05:56:08 +08:00
set -l prefix
2006-11-08 04:55:39 +08:00
switch ( count $argv )
2012-06-13 02:59:05 +08:00
case 0
echo "Fish implements aliases using functions. Use 'functions' builtin to see list of functions and 'functions function_name' to see function definition, type 'help alias' for more information."
return 1
2006-11-08 04:55:39 +08:00
case 1
2012-06-17 19:06:06 +08:00
# Some seds (e.g. on Mac OS X), don't support \n in the RHS
# Use a literal newline instead
# http://sed.sourceforge.net/sedfaq4.html#s4.1
set -l tmp ( echo $argv | sed -e " s/\([^=]\)=/\1\\
/" )
2006-11-08 04:55:39 +08:00
set name $tmp [ 1 ]
set body $tmp [ 2 ]
case 2
set name $argv [ 1 ]
set body $argv [ 2 ]
case \*
2007-04-12 19:52:21 +08:00
printf ( _ "%s: Expected one or two arguments, got %d\n" ) alias ( count $argv )
2006-11-08 04:55:39 +08:00
return 1
end
2013-02-06 03:43:40 +08:00
2013-02-20 05:58:55 +08:00
# Prevent the alias from immediately running into an infinite recursion if
# $body starts with the same command as $name.
2013-02-06 03:43:40 +08:00
switch $body
case $name $name \ \* $name \t \*
if contains $name ( builtin --names )
set prefix builtin
2013-02-20 05:58:55 +08:00
else
2013-02-06 03:43:40 +08:00
set prefix command
end
2013-01-02 05:56:08 +08:00
end
eval " function $name ; $prefix $body \$argv; end "
2006-11-08 04:55:39 +08:00
end